Ping to Brian... Any thoughts or comments on the proposed description below for "pre-initialization context"?
I went ahead and added it into the JEP draft but am happy to adjust as needed. Thanks, -Archie On Thu, Feb 2, 2023 at 3:49 PM Archie Cobbs <[email protected]> wrote: > On Thu, Feb 2, 2023 at 2:16 PM Brian Goetz <[email protected]> wrote: > >> This can be amended to: >> >> An explicit constructor invocation statement introduces an >> _pre-initialization context_, which limits the use of constructs that refer >> to the current object. Notably, the keywords `this` and `super` are >> prohibited in a pre-initialization context, as are unqualified references >> to instance variables and instance methods of lexically enclosing >> declarations. >> > > That might not work. For example, this source is legal (as it should be) > and yet the 'this' keyword appears within the super() call: > > $ cat Outer.java > public class Outer { > > public int x; > > public Outer(int x) { > this.x = x; > } > > public class Inner extends Outer { > public Inner() { > super(Outer.this.x + 10); > } > } > > public static void main(String[] args) { > System.out.println(new Outer(10).new Inner().x); > } > } > $ java -cp classes Outer > 20 > > What about something like this? > > An explicit constructor invocation statement introduces a *pre-initialization >> context*, which includes the prologue of the constructor and the >> explicit constructor invocation statement, and which prohibits the use of >> constructs that refer explicitly or implicitly to the current object. These >> include this or super referring to the current object, unqualified >> references to instance variables or instance methods of the current object, >> method references referring to instance methods of the current object, and >> instantiations of inner classes of the current object's class for which the >> current object is the enclosing instance (ยง8.1.3). >> > -- Archie L. Cobbs
