[ https://issues.apache.org/jira/browse/GROOVY-7836?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15439270#comment-15439270 ]
Jason Winnebeck commented on GROOVY-7836: ----------------------------------------- Thanks, I can confirm this was fixed in 2.4.7 > CompileStatic + static inner class + EqualsAndHashCode gives VerifyError in > equals > ---------------------------------------------------------------------------------- > > Key: GROOVY-7836 > URL: https://issues.apache.org/jira/browse/GROOVY-7836 > Project: Groovy > Issue Type: Bug > Components: Static compilation > Affects Versions: 2.4.6 > Reporter: Jason Winnebeck > Fix For: 2.4.7 > > > {code} > import groovy.transform.CompileStatic > import groovy.transform.EqualsAndHashCode > @CompileStatic > class Parent { > List<Integer> getInts() { [0] } > @EqualsAndHashCode > static class Child { > List<Integer> ints > } > } > println GroovySystem.version > println new Parent.Child() > {code} > The key is the inner class having a property matching the parent's. > Result: > {code} > 2.4.6 > java.lang.VerifyError: (class: Parent$Child, method: equals signature: > (Ljava/lang/Object;)Z) Incompatible object argument for function call > {code} > Inspecting the bytecode, I see the following: > {code} > L13 > ALOAD 0 > INVOKEVIRTUAL Parent.getInts ()Ljava/util/List; > ALOAD 2 > INVOKEVIRTUAL Parent$Child.getInts ()Ljava/util/List; > INVOKESTATIC > org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareEqual > (Ljava/lang/Object;Ljava/lang/Object;)Z > IFNE L14 > ICONST_1 > {code} > It appears that the bytecode is attempting to call a method on the outer > class, even though the inner class is static and there is no reason to access > the outer class. -- This message was sent by Atlassian JIRA (v6.3.4#6332)