You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Keith Suderman (JIRA)" <ji...@apache.org> on 2018/09/30 17:04:00 UTC
[jira] [Created] (GROOVY-8819) java.lang.VerifyError when calling
this() with static final field from a super class
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)