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 2016/07/18 01:40:20 UTC

[jira] [Comment Edited] (GROOVY-7856) Adding CompileStatic via compiler config script to class with eachWithIndex results in exception in instruction selection phase

    [ https://issues.apache.org/jira/browse/GROOVY-7856?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15381618#comment-15381618 ] 

Paul King edited comment on GROOVY-7856 at 7/18/16 1:40 AM:
------------------------------------------------------------

I have a temporary fix in the master branch. Basically the static compiler is trying to find the class {{Integer}} (no package). This is taken directly from the {{@ClosureParams}} options attribute hint. I haven't had enough time yet to work out why using {{configscript}} doesn't do the same package name resolving as seems to occur normally (without {{configscript}}). So for now I have {{java.lang.Integer}} in the hint. We should really understand why this is occurring and also I haven't created a test case yet, so I'll leave the issue open for now. But any feedback in the meantime on whether this fixes things for you would be appreciated.


was (Author: paulk):
I have a temporary fix in the master branch. Basically the static compiler is trying to find the class {{Integer}} (no package). This is taken directly from the {{@ClosureParams}} options attribute hint. I haven't had enough time yet to work out why using {{--configscript}} doesn't do the same package name resolving as seems to occur normally (without {{--configscript}}). So for now I have {{java.lang.Integer}} in the hint. We should really understand why this is occurring and also I haven't created a test case yet, so I'll leave the issue open for now. But any feedback in the meantime on whether this fixes things for you would be appreciated.

> Adding CompileStatic via compiler config script to class with eachWithIndex results in exception in instruction selection phase
> -------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: GROOVY-7856
>                 URL: https://issues.apache.org/jira/browse/GROOVY-7856
>             Project: Groovy
>          Issue Type: Bug
>          Components: Compiler
>    Affects Versions: 2.4.7
>         Environment: Groovy Version: 2.4.7 JVM: 1.8.0_92 Vendor: Oracle Corporation OS: Linux
>            Reporter: Rick Venutolo
>            Priority: Minor
>
> I have run into an issue when adding the CompileStatic AST transformation to a class via the Groovy compiler configscript argument.
> {code:title=Demo.groovy|borderStyle=solid}
> class Demo {
>     void test() {
>         ['a', 'b'].eachWithIndex {String s, int i -> println "$i: $s"}
>     }
> }
> {code}
> {code:title=config.groovy|borderStyle=solid}
> import groovy.transform.CompileStatic
> import org.codehaus.groovy.ast.ClassNode
> withConfig(configuration) {
>     source(classValidator: {ClassNode classNode -> classNode.nameWithoutPackage == 'Demo'}) {
>         ast(CompileStatic)
>     }
> }
> {code}
> {code:title=Compile using --configscript|borderStyle=solid}
> $ groovyc --configscript config.groovy Demo.groovy
> {code}
> {code:title=Output (abbreviated)|borderStyle=solid}
> >>> a serious error occurred: BUG! exception in phase 'instruction selection' in source unit 'Demo.groovy' unexpected NullpointerException
> >>> stacktrace:
> BUG! exception in phase 'instruction selection' in source unit 'Demo.groovy' unexpected NullpointerException
>     at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1058)
>     at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:591)
>     at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:569)
>     ...
> Caused by: java.lang.NullPointerException
>     at org.codehaus.groovy.control.ClassNodeResolver.tryAsLoaderClassOrScript(ClassNodeResolver.java:180)
>     at org.codehaus.groovy.control.ClassNodeResolver.findClassNode(ClassNodeResolver.java:170)
>     at org.codehaus.groovy.control.ClassNodeResolver.resolveName(ClassNodeResolver.java:126)
>   ...
> {code}
> *Notes*
> * Groovy & JVM versions: {{Groovy Version: 2.4.7 JVM: 1.8.0_92 Vendor: Oracle Corporation OS: Linux}}
> ** Have tried Groovy versions going back to 2.4.3 and Oracle JVM 1.7.0_79
> * Changing any of the following will result in no compilation error:
> ** Remove the {{source(classValidator: ...)}} code around {{ast}}, leaving {{ast(CompileStatic)}}, in the compiler config script
> ** Replace the {{eachWithIndex}} call in Demo with {{each}}
> ** Annotate {{Demo}} with {{@CompileStatic}} and compile without {{--configscript}}
> I have detailed and demoed the bug [here|https://github.com/rvenutolo/compilestatic-compiler-config] with some code you can clone and run.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)