[ https://issues.apache.org/jira/browse/GROOVY-8819?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Daniel Sun resolved GROOVY-8819. -------------------------------- Resolution: Fixed Assignee: Daniel Sun Fix Version/s: 2.5.4 3.0.0-alpha-4 Fixed by https://github.com/apache/groovy/commit/f4e57455de793123d0007d7183806731442efe82 > java.lang.VerifyError when calling this() with static final field from a > super class > ------------------------------------------------------------------------------------ > > Key: GROOVY-8819 > URL: https://issues.apache.org/jira/browse/GROOVY-8819 > Project: Groovy > Issue Type: Bug > Components: Compiler > Affects Versions: 2.4.x, 2.5.2 > Reporter: Keith Suderman > Assignee: Daniel Sun > Priority: Minor > Fix For: 3.0.0-alpha-4, 2.5.4 > > > If a constructor attempts to call _this(X)_, where _X_ is a _static final_ > field defined in a super class a _java.lang.VerifyError_ is thrown at runtime > . This only occurs if _X_ is not qualified with the super class name. > {code:java|title=Parent.java|borderStyle=solid} > class Parent { > static final String DEFAULT = 'default' > } > {code} > {code:java|title=Child.java|borderStyle=solid} > class Child extends Parent { > String value > Child() { this(DEFAULT) } // <-- here > Child(String value) { this.value = value } > } > {code} > {noformat:title=java.lang.VerifyError} > Caught: java.lang.VerifyError: Bad type on operand stack > Exception Details: > Location: > Child.<init>()V @10: invokeinterface > Reason: > Type uninitializedThis (current frame, stack[2]) is not assignable to > 'java/lang/Object' > Current Frame: > bci: @10 > flags: \{ flagThisUninit } > locals: \{ uninitializedThis, > '[Lorg/codehaus/groovy/runtime/callsite/CallSite;' } > stack: \{ uninitializedThis, > 'org/codehaus/groovy/runtime/callsite/CallSite', uninitializedThis } > Bytecode: > 0x0000000: b800 114c 2a2b 1212 322a b900 1802 00b8 > 0x0000010: 001e c000 20b7 0023 b1 > {noformat} > *Workaround* > Simply ensure that references to static final fields from the super class are > qualified with the super class name. > {code:java|title=Child.java|borderStyle=solid} > class Child extends Parent { > String value > Child() { this(Parent.DEFAULT) } // ok > Child(String value) { this.value = value } > } > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)