Keith Suderman created GROOVY-8819: -------------------------------------- Summary: 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.5.2, 2.4.x Reporter: Keith Suderman
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)