RFR: 8254105: allow static nested declarations [v4]
Maurizio Cimadamore
mcimadamore at openjdk.java.net
Wed Oct 28 18:02:48 UTC 2020
On Tue, 27 Oct 2020 14:23:37 GMT, Vicente Romero <vromero at openjdk.org> wrote:
>> Please review the fix for [JDK-8254105](https://bugs.openjdk.java.net/browse/JDK-8254105). The intention of the fix is to allow static members to be declared inside inner classes. The spec allowing this change can be seen at [Local and Nested Static Declarations](http://cr.openjdk.java.net/~gbierman/8246771/8246771-20200928/specs/local-statics-jls.html). This change is part of the [Records JEP](https://openjdk.java.net/jeps/395). The idea is to allow not only records to be defined inside inner classes but also interfaces, enums, static classes and methods.
>>
>> TIA,
>> Vicente
>>
>> PS: the records spec can be accessed here [Record Classes](http://cr.openjdk.java.net/~gbierman/8246771/8246771-20200928/specs/records-jls.html). This patch also adds a test to check the changes in the Records spec to Chapter 13 "Binary Compatibility". I'm OK moving that test to a separate PR.
>
> Vicente Romero has updated the pull request incrementally with one additional commit since the last revision:
>
> removing duplicated test
The changes look good, but I have one concern: this patch seem to apply the improvements unconditionally, regardless of the source version - is this what we want? While I understand that the risk is low (this patch makes space of compilable programs bigger), at the same times it feels wrong that when compiling with `--source 14` I can now nest static classes inside member classes (which is not compatible with what the SE 14 spec says).
src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java line 1232:
> 1230: mask |= STATIC;
> 1231: else if ((flags & ENUM) != 0 || (flags & RECORD) != 0) {
> 1232: //log.error(pos, Errors.StaticDeclarationNotAllowedInInnerClasses);
Can't you get rid of the `else if` here?
src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java line 1306:
> 1304: SEALED,
> 1305: FINAL | NON_SEALED)
> 1306: && checkDisjoint(pos, flags,
Where is this coming from? This seems outside the scope of the change?
-------------
PR: https://git.openjdk.java.net/jdk/pull/571
More information about the compiler-dev
mailing list