RFR: JDK-8246486: javac doesn't allow a subclass to be declared before a sealed superclass with no permits clause

Vicente Romero vicente.romero at oracle.com
Wed Jun 3 20:22:00 UTC 2020


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/20200603/6e186243/attachment.htm>


More information about the compiler-dev mailing list