You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Paul King (Jira)" <ji...@apache.org> on 2020/05/16 10:37:00 UTC
[jira] [Resolved] (GROOVY-9506) Joint compilation is broken
[ https://issues.apache.org/jira/browse/GROOVY-9506?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Paul King resolved GROOVY-9506.
-------------------------------
Fix Version/s: 2.5.12
3.0.4
4.0.0-alpha-1
Resolution: Fixed
Test also added to 3/4 branches with the recent fix for GROOVY-9556.
> Joint compilation is broken
> ---------------------------
>
> Key: GROOVY-9506
> URL: https://issues.apache.org/jira/browse/GROOVY-9506
> Project: Groovy
> Issue Type: Bug
> Affects Versions: 2.5.10
> Reporter: Daniil Ovchinnikov
> Assignee: Paul King
> Priority: Critical
> Fix For: 4.0.0-alpha-1, 3.0.4, 2.5.12
>
>
> {code:title=playground.groovy}
> @groovy.transform.AutoImplement
> class C implements Runnable {}
> class Main {
> static void main(String[] args) {
> def c = new C()
> c.run()
> }
> }
> {code}
> {code:title=I.java}
> public interface I {
> void foo();
> }
> {code}
> {noformat}
> $ groovyc I.java playground.groovy -j
> $ java -cp .:$GROOVY_HOME/lib/groovy-2.5.10.jar Main
> Exception in thread "main" java.lang.NullPointerException
> at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:37)
> at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
> at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:115)
> at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:119)
> at Main.main(playground.groovy:9)
> {noformat}
> What happens:
> 1. {{org.codehaus.groovy.tools.javac.JavaStubGenerator#printClassContents}} applies its {{Verifier}}.
> 2. {{org.codehaus.groovy.classgen.Verifier#addGroovyObjectInterfaceAndMethods}} adds {{GroovyObject}} interface and {{GroovyObject}}'s methods via {{org.codehaus.groovy.classgen.Verifier#addMethod}}.
> 3. {{Verifier#addMethod}} is overridden in {{#printClassContents}}' {{Verifier}} to skip adding methods to the class node.
> 4. at the moment when {{@AutoImplement}} kicks in there exists the {{GroovyObject}} interface and no methods in the class node, so the transformation adds default method implementations.
> Related: https://youtrack.jetbrains.com/issue/IDEA-237148
--
This message was sent by Atlassian Jira
(v8.3.4#803005)