Details
-
Type:
Improvement
-
Status:
Open
-
Priority:
Minor
-
Resolution: Unresolved
-
Affects Version/s: None
-
Fix Version/s: None
-
Component/s: None
-
Labels:None
-
Testcase included:yes
-
Number of attachments :
Description
When static missing properties are catched, the handler is called also when an inherited static method is called.
It is not a serious problem, but it feels weird. Either it should be changed (if possible with reasonably small effort), or thoroughly documented.
Also, it should be documented that if the handler throws a MissingPropertyException, it gets silently eaten up and the static method is called all right. On the other hand, any other exception goes all the way up to the user-level harness if any, which is generally rather undesirable.
Here's a code sample which illustrates the problem, along with the proper exception thrown so as the method is properly called:
===
class Foo {
static def inheritedStaticMethod()
}
class Test extends Foo {
static def main(av) {
// need to catch all class-level missing properties
Object.metaClass.static.propertyMissing={
println "Property $it of $
// simulated 'found valid dynamic property' case
if (it.startsWith('f')) return "(${delegate.simpleName}
.$it OK)"
// oops, we did not find valid d.p, so we
throw new MissingPropertyException("No valid DP for $
.$it")
}
println "Checking the handler: $
$
{Foo.foo}$
{Test.foo}$
{String.foo}"
inheritedStaticMethod()
}
}
===