You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Eric Milles (Jira)" <ji...@apache.org> on 2023/09/03 14:13:00 UTC
[jira] [Updated] (GROOVY-6498) Static initializer not called before static property resolution
[ https://issues.apache.org/jira/browse/GROOVY-6498?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Eric Milles updated GROOVY-6498:
--------------------------------
Description:
If a class has a static initializer, it is not called before static properties are resolved or before propertyMissing is called. This was not a problem in Groovy 1.8.
Example 1:
{code:groovy}
class Config1 {
private static props = [ x: 1 ]
static {
Config1.metaClass.static.propertyMissing = { name -> props[name] }
}
}
println Config1.x
{code}
Result in Groovy 1.8: 1
Result in Groovy 2.2: exception
Example 2:
{code:groovy}
class Config2 {
private static props = [ y: 1 ]
static { Config2.metaClass.static.getY = { -> props.y } }
}
println Config2.y
{code}
Result in Groovy 1.8: 1
Result in Groovy 2.2: exception
was:
If a class has a static initializer, it is not called before static properties are resolved or before propertyMissing is called. This was not a problem in Groovy 1.8.
Example 1:
class Config1 {
private static props = [ x: 1 ]
static {
Config1.metaClass.static.propertyMissing = { name -> props[name] }
}
}
println Config1.x
Result in Groovy 1.8: 1
Result in Groovy 2.2: exception
Example 2:
class Config2 {
private static props = [ y: 1 ]
static { Config2.metaClass.static.getY = { -> props.y } }
}
println Config2.y
Result in Groovy 1.8: 1
Result in Groovy 2.2: exception
> Static initializer not called before static property resolution
> ---------------------------------------------------------------
>
> Key: GROOVY-6498
> URL: https://issues.apache.org/jira/browse/GROOVY-6498
> Project: Groovy
> Issue Type: Bug
> Components: groovy-runtime
> Affects Versions: 2.2.1, 2.4.0-rc-1
> Environment: Windows
> Reporter: Thornton Rose
> Priority: Major
>
> If a class has a static initializer, it is not called before static properties are resolved or before propertyMissing is called. This was not a problem in Groovy 1.8.
> Example 1:
> {code:groovy}
> class Config1 {
> private static props = [ x: 1 ]
> static {
> Config1.metaClass.static.propertyMissing = { name -> props[name] }
> }
> }
> println Config1.x
> {code}
> Result in Groovy 1.8: 1
> Result in Groovy 2.2: exception
> Example 2:
> {code:groovy}
> class Config2 {
> private static props = [ y: 1 ]
> static { Config2.metaClass.static.getY = { -> props.y } }
> }
> println Config2.y
> {code}
> Result in Groovy 1.8: 1
> Result in Groovy 2.2: exception
--
This message was sent by Atlassian Jira
(v8.20.10#820010)