[
https://issues.apache.org/jira/browse/GROOVY-8327?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Isaac Dooley updated GROOVY-8327:
---------------------------------
Description:
The parser in 2.5, 2.6, 3.0 gives a MultipleCompilationErrorsException on code
that compiled successfully in 2.4
{code:java|title=Code that fails to compile on 2.6.0-alpha-1}
class A {
static String g() { }
A() {
this({g()}) // It is ok to create a closure that calls g() in a
constructor, but not if it is being passed into this().
}
A(a) { }
}
{code}
{code:java|title=compilation error message}
$ groovyc test.groovy
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
test.groovy: 4: Can't access instance method 'g' before the class is constructed
@ line 4, column 15.
this({g()}) // It is ok to create a closure that calls g() in a
constructor, but not if it is being passed into this().
^
1 error
{code}
My opinion is that groovy should allow users to call a static method inside a
constructor before the instance has been fully constructed, but I'm not aware
of the details of why this is disallowed in 2.6.0-alpha-1.
was:
The parser in 2.6.0-alpha-1 gives a MultipleCompilationErrorsException on code
that compiled successfully in 2.4.12.
{code:title=Code that fails to compile on 2.6.0-alpha-1}
class A {
static String g() { }
A() {
this({g()}) // It is ok to create a closure that calls g() in a
constructor, but not if it is being passed into this().
}
A(a) { }
}
{code}
{code:title=compilation error message}
$ groovyc test.groovy
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
test.groovy: 4: Can't access instance method 'g' before the class is constructed
@ line 4, column 15.
this({g()}) // It is ok to create a closure that calls g() in a
constructor, but not if it is being passed into this().
^
1 error
{code}
My opinion is that groovy should allow users to call a static method inside a
constructor before the instance has been fully constructed, but I'm not aware
of the details of why this is disallowed in 2.6.0-alpha-1.
> Parser regression. Can't access static instance method before class is
> constructed
> ----------------------------------------------------------------------------------
>
> Key: GROOVY-8327
> URL: https://issues.apache.org/jira/browse/GROOVY-8327
> Project: Groovy
> Issue Type: Bug
> Affects Versions: 2.6.0-alpha-1, 3.0.0-alpha-3, 2.5.2
> Environment: groovc command line on linux
> Reporter: Isaac Dooley
> Priority: Major
>
> The parser in 2.5, 2.6, 3.0 gives a MultipleCompilationErrorsException on
> code that compiled successfully in 2.4
> {code:java|title=Code that fails to compile on 2.6.0-alpha-1}
> class A {
> static String g() { }
> A() {
> this({g()}) // It is ok to create a closure that calls g() in a
> constructor, but not if it is being passed into this().
> }
> A(a) { }
> }
> {code}
> {code:java|title=compilation error message}
> $ groovyc test.groovy
> org.codehaus.groovy.control.MultipleCompilationErrorsException: startup
> failed:
> test.groovy: 4: Can't access instance method 'g' before the class is
> constructed
> @ line 4, column 15.
> this({g()}) // It is ok to create a closure that calls g() in a
> constructor, but not if it is being passed into this().
> ^
> 1 error
> {code}
> My opinion is that groovy should allow users to call a static method inside a
> constructor before the instance has been fully constructed, but I'm not aware
> of the details of why this is disallowed in 2.6.0-alpha-1.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)