You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Eric Milles (JIRA)" <ji...@apache.org> on 2019/07/10 15:34:00 UTC

[jira] [Commented] (GROOVY-9168) Default Arguments: non-static inner class constructor call in default value not supported

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

Eric Milles commented on GROOVY-9168:
-------------------------------------

Pull request 963 has been updated to address these two cases (and many others involving uninitialized this):

{code:groovy}
class Outer {
  class Inner {}
  Outer(Inner inner = new Inner()) {
    ...
  }
}
{code}

{code:groovy}
class Outer {
  class Inner {}
  Outer(Inner inner) {
    ...
  }
  Outer() {
    this(new Inner())
  }
}
{code}

> Default Arguments: non-static inner class constructor call in default value not supported
> -----------------------------------------------------------------------------------------
>
>                 Key: GROOVY-9168
>                 URL: https://issues.apache.org/jira/browse/GROOVY-9168
>             Project: Groovy
>          Issue Type: Bug
>    Affects Versions: 3.0.0-beta-1, 2.5.7
>            Reporter: Eric Milles
>            Priority: Major
>          Time Spent: 20m
>  Remaining Estimate: 0h
>
> This is a variation of GROOVY-6777, GROOVY-6809 and GROOVY-7609.  A constructor's parameter may not presently be defaulted  by a value expression using a non-static inner class (including anon. inner).  This is likely caused by the uninitialized "this" reference that is supplied to the constructor of the non-static inner class.
> {code:groovy}
> // Error: Apparent variable 'this' was found in a static scope but doesn't refer to a local variable, static field or class.
> class Outer {
>   class Inner {} // make this static and all is well
>   Outer(Inner inner = new Inner()) {
>   }
> }
> new Outer()
> {code}
> {code:groovy}
> class C {
>   C(Runnable runner = new Runnable() { void run() {} }) {
>     //                ^^^^^^^^^^^^^^ enclosing method not set and ...
>     this.runner = runner
>   }
>   Runnable runner
> }
> new C().runner.run()
> {code}



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