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 2022/02/03 22:48:00 UTC
[jira] [Closed] (GROOVY-10197) java.lang.VerifyError using property inside enum's constant
[ https://issues.apache.org/jira/browse/GROOVY-10197?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Paul King closed GROOVY-10197.
------------------------------
> java.lang.VerifyError using property inside enum's constant
> -----------------------------------------------------------
>
> Key: GROOVY-10197
> URL: https://issues.apache.org/jira/browse/GROOVY-10197
> Project: Groovy
> Issue Type: Bug
> Affects Versions: 3.0.8
> Reporter: Ivan Kuznetsov
> Assignee: Eric Milles
> Priority: Major
> Fix For: 3.0.9, 2.5.16
>
>
> I'm facing with this strange error after script compiles successfully but fails to load using groovy 3.0.8:
> {noformat}
> java.lang.VerifyError: Bad type on operand stack
> Exception Details:
> Location:
> E$1.<init>(Ljava/lang/String;ILjava/util/LinkedHashMap;)V @50: invokevirtual
> Reason:
> Type 'E$1' (current frame, stack[0]) is not assignable to 'groovy/lang/Closure'
> Current Frame:
> bci: @50
> flags: { }
> locals: { 'E$1', 'java/lang/String', integer, 'java/util/LinkedHashMap', integer }
> stack: { 'E$1' }
> Bytecode:
> 0000000: 2a2b 1c2d 01b7 0012 0436 0415 042a 5fb5
> 0000010: 0014 1504 572d c700 0704 a700 0403 9900
> 0000020: 13bb 0016 5912 18b7 001b c000 1dbf 0000
> 0000030: bf2a b600 23c0 0004 c000 2512 26b6 002a
> 0000040: 9900 1a2d 1226 b900 3002 003a 0519 05b8
> 0000050: 0036 2a5f b500 1419 0557 2a2d b800 3c01
> 0000060: 57b1
> Stackmap Table:
> full_frame(@29,{Object[#2],Object[#69],Integer,Object[#37],Integer},{})
> same_locals_1_stack_item_frame(@30,Integer)
> full_frame(@46,{},{Object[#29]})
> full_frame(@49,{Object[#2],Object[#69],Integer,Object[#37],Integer},{})
> same_frame(@90)
> same_frame(@97) at E.<clinit>(ideaGroovyConsole.groovy)
> at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized0(Native Method)
> at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized(Unsafe.java:1155)
> at java.base/jdk.internal.reflect.UnsafeFieldAccessorFactory.newFieldAccessor(UnsafeFieldAccessorFactory.java:42)
> at java.base/jdk.internal.reflect.ReflectionFactory.newFieldAccessor(ReflectionFactory.java:186)
> at java.base/java.lang.reflect.Field.acquireFieldAccessor(Field.java:1126)
> at java.base/java.lang.reflect.Field.getFieldAccessor(Field.java:1107)
> at java.base/java.lang.reflect.Field.get(Field.java:419)
> at org.codehaus.groovy.reflection.CachedField.getProperty(CachedField.java:68)
> at groovy.lang.MetaClassImpl.getProperty(MetaClassImpl.java:1900)
> at groovy.lang.MetaClassImpl.getProperty(MetaClassImpl.java:3874)
> at org.codehaus.groovy.runtime.callsite.ClassMetaClassGetPropertySite.getProperty(ClassMetaClassGetPropertySite.java:50)
> at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGetProperty(AbstractCallSite.java:329)
> at ideaGroovyConsole.run(ideaGroovyConsole.groovy:110) {noformat}
> Here is the reproducing script:
> {code:java}
> @CompileStatic
> enum E {
> E1{
> // int value = 1
> int getValue() { 1 }
> }
> int getValue() { -1 }
> }
> {code}
> If you use an overriding method, all is working fine. But replacing method with local field causes an error above. I think it is {{@CompileStatic}}-specific error, because without this annotation both versions are loaded successfully.
--
This message was sent by Atlassian Jira
(v8.20.1#820001)