[ https://issues.apache.org/jira/browse/GROOVY-7362?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16645938#comment-16645938 ]
Paul King commented on GROOVY-7362: ----------------------------------- Removing 2_5_X fix version for now since GROOVY-8495 was removed for now from 2_5_X. We can add a 2.5.x fix version if/when we backport GROOVY-8495 to 2_5_X. > Can't compile Java class extending Groovy abstract class with explicit > GroovyObject interface > --------------------------------------------------------------------------------------------- > > Key: GROOVY-7362 > URL: https://issues.apache.org/jira/browse/GROOVY-7362 > Project: Groovy > Issue Type: Bug > Components: Compiler > Affects Versions: 2.4.0 > Reporter: Peter Gromov > Assignee: Paul King > Priority: Major > Fix For: 3.0.0-alpha-4 > > > That's a more advanced version of GROOVY-3877 > Compile classes.groovy: > {code} > abstract class AbstractClass extends ConcreteClass implements GroovyObject {} > class ConcreteClass {} > {code} > Then compile JavaClass.java: > {code} > public class JavaClass extends AbstractClass {} > {code} > You get: > {quote} > JavaClass.java:1: error: JavaClass is not abstract and does not override > abstract method setMetaClass(MetaClass) in GroovyObject > public class JavaClass extends AbstractClass { > ^ > 1 error > {quote} > That's likely because setMetaClass is added as a synthetic method in > ConcreteClass and not overridden in AbstractClass. > This also happens without explicit GroovyObject interface when using joint > compilation > (https://youtrack.jetbrains.com/issue/IDEA-137722#comment=27-952814). Before > generating stubs, "implements GroovyObject" is added to Groovy classes, and > if it so happens that AbstractClass is visited before ConcreteClass, then > "implements GroovyObject" will be added to both Groovy classes, but the > (synthetic) implementations somehow end up being only in ConcreteClass. -- This message was sent by Atlassian JIRA (v7.6.3#76005)