On Thu, 12 Jan 2023 21:04:09 GMT, Archie L. Cobbs <d...@openjdk.org> wrote:

>> but what if `m` is a static method in a separate compilation unit? Should it 
>> be able to observe a partially initialized Foo?
>
> Caring about the proper initialization of any class in the _current_ 
> compilation unit is an explicit non-goal.
> 
> We only care about bugs where a superclass and subclass are in separate 
> compilation units.

So, to clarify, in this case:


import java.util.*;

class B {
    final Object ref;

     private B(Object ref) {
          Foo.consume(this);
          this.ref = ref;
      }
 }


Even though `this` leaks to a method clearly before it is fully initialized, we 
do not care because there can be no subclass involved observing this. I guess I 
was confused because, while subclasses are a particularly sneaky case where 
uninitialized values can show up, the above leak seems potentially dangerous as 
well - we're effectively leaking a class whose final field has not been 
initialized!

That said, if that was discussed, and it was decided for the warning not to 
deal with this case, that's ok.

-------------

PR: https://git.openjdk.org/jdk/pull/11874

Reply via email to