[ 
https://issues.apache.org/jira/browse/GROOVY-6629?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16348088#comment-16348088
 ] 

Paul King edited comment on GROOVY-6629 at 2/1/18 6:37 AM:
-----------------------------------------------------------

Here is the comment about this message from 
{{StaticCompilationVisitor#checkForConstructorWithCSButClassWithout}}: 
{code}
    /**
     * If we are in a constructor, that is static compiled, but in a class, that
     * is not, it may happen that init code from object initializers, fields
     * or properties is added into the constructor code. The backend assumes
     * a purely static constructor, so it may fail if it encounters dynamic
     * code here. Thus we make this kind of code fail
     */
{code}
And a simpler example to trigger the error:
{code}
class TestBroken {
    private myField
    @groovy.transform.CompileStatic
    TestBroken() {}
}
{code}


was (Author: paulk):
Here is the comment about this message from 
{{StaticCompilationVisitor#checkForConstructorWithCSButClassWithout}}: 
{code}
    /**
     * If we are in a constructor, that is static compiled, but in a class, that
     * is not, it may happen that init code from object initializers, fields
     * or properties is added into the constructor code. The backend assumes
     * a purely static constructor, so it may fail if it encounters dynamic
     * code here. Thus we make this kind of code fail
     */
{code}

> static compilation fails with obscure message when only constructor is 
> annotated
> --------------------------------------------------------------------------------
>
>                 Key: GROOVY-6629
>                 URL: https://issues.apache.org/jira/browse/GROOVY-6629
>             Project: Groovy
>          Issue Type: Bug
>          Components: Static compilation
>    Affects Versions: 2.2.2, 2.3.0, 2.4.0-rc-1
>            Reporter: Dimitar Dimitrov
>            Priority: Major
>
> {code}
> class TestBroken {
>     private final InetAddress bindTo
>     @groovy.transform.CompileStatic
>     TestBroken(InetAddress bindTo = null) {
>         this.bindTo = bindTo ?: InetAddress.getByName("localhost")
>     }
> }
> {code}
> Error:(12, 5) Groovyc: [Static type checking] - Cannot statically compile 
> constructor implicitly including non static elements from object 
> initializers, properties or fields.
> {code}
> @groovy.transform.CompileStatic
> class TestWorking {
>     private final InetAddress bindTo
>     TestWorking(InetAddress bindTo = null) {
>         this.bindTo = bindTo ?: InetAddress.getByName("localhost")
>     }
> }
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to