Is there any reason why implementations of GroovyObject methods which are injected into Groovy classes are marked with ACC_SYNTHETIC?
This causes all sorts of confusion: class GroovyClass {} class JavaClass extends GroovyClass {} // compiles ok class JavaClass extends GroovyClass implements GroovyObject {} // error: JavaClass is not abstract and does not override abstract method setMetaClass(MetaClass) in GroovyObject class JavaClass extends GroovyClass { @Override public Object getProperty(String propertyName) { return super.getProperty(propertyName); // error: cannot find symbol: method getProperty(String) } } class JavaClass { void usage() { new GroovyClass().getProperty("a”); // error: cannot find symbol: method getProperty(String) } } This happens because javac ignores ACC_SYNTHETIC members as if they don’t even exist. — Daniil Ovchinnikov Software Developer JetBrains jetbrains.com “Drive to develop”