OpenJDK / amber / amber
changeset 60069:2d039936dbb4 amber-demo-II
Automatic merge with sealed-types
author | mcimadamore |
---|---|
date | Thu, 13 Feb 2020 23:10:50 +0000 |
parents | 4057f45b992a 2a8310d5265d |
children | 0ef08b8bd812 |
files | src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TypeEnter.java test/langtools/tools/javac/sealed/SealedCompilationTests.java |
diffstat | 2 files changed, 32 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TypeEnter.java Thu Feb 13 22:08:15 2020 +0000 +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TypeEnter.java Thu Feb 13 23:10:50 2020 +0000 @@ -838,7 +838,9 @@ TreeInfo.declarationFor(tree.sym.outermostClass(), env.toplevel) != null) .collect(List.collector()); Set<Type> explicitlySealedSuperTypesInCU = directSuperTypesInSameCU.stream() - .filter(type -> type != tree.sym.type && type.tsym.isSealed()).collect(Collectors.toSet()); + .filter(type -> type != tree.sym.type && + type.tsym != null && + type.tsym.isSealed()).collect(Collectors.toSet()); boolean anySuperInSameCUIsSealed = !explicitlySealedSuperTypesInCU.isEmpty(); if (anySuperInSameCUIsSealed) {
--- a/test/langtools/tools/javac/sealed/SealedCompilationTests.java Thu Feb 13 22:08:15 2020 +0000 +++ b/test/langtools/tools/javac/sealed/SealedCompilationTests.java Thu Feb 13 23:10:50 2020 +0000 @@ -84,7 +84,7 @@ # class Sub implements Sup { } """; String I2 = - """ + """ sealed interface Sup # { } # class Sub1 implements Sup { } # class Sub2 implements Sup { } @@ -260,6 +260,34 @@ sealed class C {} """)) assertFail("compiler.err.sealed.type.must.have.subtypes", s); + + for (String s : List.of( + """ + sealed interface I {} + + non-sealed interface I2 extends I {} + """, + """ + sealed interface I {} + + sealed interface I2 extends I {} + + non-sealed interface I3 extends I2 {} + """, + """ + sealed interface I permits I2 {} + + non-sealed interface I2 extends I {} + """, + """ + sealed interface I permits I2 {} + + sealed interface I2 extends I permits I3 {} + + non-sealed interface I3 extends I2 {} + """ + )) + assertOK(s); } public void testEnumsCantBeSealedOrNonSealed() {