Details
-
Bug
-
Status: Closed
-
Minor
-
Resolution: Fixed
-
None
-
None
Description
When getProperty is used e.g., to mimic a Map behaviour, the result differs depending on whether getProperty was defined directly in the class, added through a mixin, or through a metaclass.
class FooWorksAsMap { // class names the same length as LinkedHashMap to make output pretty def getProperty(String foo) { "OK:FooWorksAsMap.$foo" } } class BarWorksAsMap {} class BaxWorksAsMap {} @Category(BarWorksAsMap) class C { def getProperty(String foo) { "OK:BarWorksAsMap.$foo" } } BarWorksAsMap.mixin C BaxWorksAsMap.metaClass.getProperty = { foo -> "OK:BaxWorksAsMap.$foo" } def maps = [new FooWorksAsMap(), new BarWorksAsMap(), new BaxWorksAsMap(), [foo:'OK:LinkedHashMap.foo', class:'OK:LinkedHashMap.class']] for (def prop in ['foo','class']) { for (def m in maps) { def op = "${m.getClass().getSimpleName()}.$prop" try { println "$op -> " + m."$prop" } catch (t) { println "$op -> FAIL:$t" } } }