RFR: JDK-8315458 Implementation of Implicitly Declared Classes and Instance Main Method (Second Preview) [v2]
Maurizio Cimadamore
mcimadamore at openjdk.org
Thu Nov 2 12:09:05 UTC 2023
On Thu, 2 Nov 2023 11:55:17 GMT, Jim Laskey <jlaskey at openjdk.org> wrote:
>> src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Enter.java line 442:
>>
>>> 440: Errors.ClassPublicShouldBeInFile(topElement, tree.name));
>>> 441: }
>>> 442: if ((tree.mods.flags & IMPLICIT_CLASS) != 0) {
>>
>> I'm not 100% sure about this. Another option would be to tweak Resolve::findType and make sure that `typeNotFound` (or some more specific message!) is returned when an implicit class is referred to by name. If you look at the first few lines in that method you will see:
>>
>>
>> if (name == names.empty)
>> return typeNotFound; // do not allow inadvertent "lookup" of anonymous types
>>
>>
>> So, there's already some logic there for skipping some types.
>
> The main thing here is that it is done once at the source instead of every look up. The symbol should not exist in the compilation unit.
Yep - I think the main consequence of this choice is the fact that we cannot generate a specific error message - but perhaps that's ok (after all, having a special message would equate to admitting that the compiler _does know_ about the name :-) )
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/16461#discussion_r1380003979
More information about the core-libs-dev
mailing list