[ 
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)

Reply via email to