RFR: JDK-8246486: javac doesn't allow a subclass to be declared before a sealed superclass with no permits clause
Maurizio Cimadamore
maurizio.cimadamore at oracle.com
Thu Jun 4 21:24:32 UTC 2020
Changes look good.
Maurizio
On 03/06/2020 21:22, Vicente Romero wrote:
> Please review the fix for [1] at [2], this patch if fixing the
> following issue, javac doesn't accept code like:
>
> final class B extends A {}
> sealed class A {} // no permits clause
>
> the reason is that when analyzing the permits clause of the sealed
> class, the permitted list was overwritten without checking if it
> wasn't empty. This is fixed now. Also as the presence of annotation
> processors can provoke several iterations on the same code, now it is
> necessary to clean out the `permitted` list if annotations processors
> are present. This avoid that an iteration can find symbols stored in
> this list by a previous iteration. Given this new dependency on
> annotation processors of the sealed classes code, test
> SealedCompilationTests has been modified to be executed twice: with
> and without a simple annotations processor to stress this dependency.
> There is a change that is not strictly related to the main theme of
> the patch which is this one liner:
>
> diff -r 0a32396f7a69 -r 3a73b52df56b
> src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TypeEnter.java
> ---
> a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TypeEnter.java
> Wed Jun 03 12:09:04 2020 -0400
> +++
> b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TypeEnter.java
> Wed Jun 03 15:25:41 2020 -0400
> @@ -717,7 +717,6 @@
> ListBuffer<Symbol> permittedSubtypeSymbols = new
> ListBuffer<>();
> List<JCExpression> permittedTrees = tree.permitting;
> for (JCExpression permitted : permittedTrees) {
> - permitted = clearTypeParams(permitted);
> Type pt = attr.attribBase(permitted, baseEnv, false,
> false, false);
> permittedSubtypeSymbols.append(pt.tsym);
> }
>
> permitted subclasses can't have type parameters thus this line is a
> no-op, but given that the bug was related to the permits clause I
> found this issue and addressed it as part of the patch,
>
> Thanks,
> Vicente
>
> [1] https://bugs.openjdk.java.net/browse/JDK-8246486
> [2] http://cr.openjdk.java.net/~vromero/8246486/webrev.00/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.java.net/pipermail/compiler-dev/attachments/20200604/9d3f3b68/attachment.htm>
More information about the compiler-dev
mailing list