On Thu, 11 Sep 2025 17:35:55 GMT, Vicente Romero <vrom...@openjdk.org> wrote:

>> src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java line 1477:
>> 
>>> 1475:                  * the compiler
>>> 1476:                  */
>>> 1477:                 return sym.kind != MTH || !insideClassDef;
>> 
>> I think the "right" thing to do here seems to have to do with membership and 
>> whether the access is unqualified or not.
>> 
>> E.g. 
>> * if we are in the prologue of `A`, and we see a call to `m()`, and `m()` is 
>> a member of `A`, then we should fail
>> * if we are in a class `B` inside the prologue of `A`, and we see a call to 
>> `m()`, and `m()` is a member of `B`, then it should be ok
>> * if we are in a class `B` inside the prologue of `A`, and we see a call to 
>> `m()`, and `m()` is a member of _both_ `B` and `A`, then it should be ok
>> * if we are in a class `B` inside the prologue of `A`, and we see a call to 
>> `m()`, and `m()` is a member of `A` then it should fail
>> 
>> The problem seems to be that, by the time we hit the `isEarlyReference` 
>> method, we no longer know the "current class" -- so we always check 
>> membership against the "outer" class whose prologue we're inspecting.
>
> I have updated the PR there is a test case that was failing before but now is 
> passing:
> 
> class Test {
>     public int xx;
> 
>     Test() {
>         int i = new Test(){
>             void foo() {
>                 System.err.println(xx);
>             }
>         }.xx;
>         super();
>     }
> }
> 
> I think that it is correct that we accept this code as in both cases we are 
> accessing the `xx` field inherited by the anonymous class

yes, the accessed `xx` is _another_ field

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

PR Review Comment: 
https://git.openjdk.org/valhalla/pull/1567#discussion_r2344048138

Reply via email to