Details
-
Improvement
-
Status: Open
-
Minor
-
Resolution: Unresolved
-
None
-
None
-
None
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() { println "Allright, Kilroy's here" } } class Test extends Foo { static def main(av) { // need to catch all class-level missing properties Object.metaClass.static.propertyMissing={ println "Property $it of ${delegate.simpleName} missing." // 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 ${delegate.simpleName}.$it") } println "Checking the handler: ${Object.foo} ${Foo.foo} ${Test.foo} ${String.foo}" inheritedStaticMethod() } }