From e90621c1692dfc6ebf7c506f27b978bbaee9e2e9 Mon Sep 17 00:00:00 2001 From: Vicente Romero Date: Mon, 8 Jun 2020 11:08:28 -0400 Subject: [PATCH] 8246199: 'permits' is a restricted identifier Reviewed-by: mcimadamore --- .../sun/tools/javac/parser/JavacParser.java | 7 +++++ .../javac/sealed/SealedCompilationTests.java | 30 +++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java index 1fe7bd744d0..604be0c8918 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java @@ -3360,6 +3360,13 @@ public class JavacParser implements Parser { log.warning(pos, Warnings.RestrictedTypeNotAllowedPreview(name, Source.JDK15)); } } + if (name == names.permits) { + if (allowSealedTypes) { + return Source.JDK15; + } else if (shouldWarn) { + log.warning(pos, Warnings.RestrictedTypeNotAllowedPreview(name, Source.JDK15)); + } + } return null; } diff --git a/test/langtools/tools/javac/sealed/SealedCompilationTests.java b/test/langtools/tools/javac/sealed/SealedCompilationTests.java index 3f5f39be23c..eacd60f6b32 100644 --- a/test/langtools/tools/javac/sealed/SealedCompilationTests.java +++ b/test/langtools/tools/javac/sealed/SealedCompilationTests.java @@ -267,6 +267,8 @@ public class SealedCompilationTests extends CompilationTestCase { for (String s : List.of( "class sealed {}", + "enum sealed {}", + "record sealed() {}", "interface sealed {}", "@interface sealed {}" )) { @@ -281,6 +283,34 @@ public class SealedCompilationTests extends CompilationTestCase { assertFail("compiler.err.restricted.type.not.allowed.here", s); } + for (String s : List.of( + "class SealedTest { String permits; }", + "class SealedTest { int permits = 0; }", + "class SealedTest { void test(String permits) { } }", + "class SealedTest { void permits(String permits) { } }", + "class SealedTest { void test() { String permits = null; } }" + )) { + assertOK(s); + } + + for (String s : List.of( + "class permits {}", + "enum permits {}", + "record permits() {}", + "interface permits {}", + "@interface permits {}" + )) { + assertFail("compiler.err.restricted.type.not.allowed", s); + } + + for (String s : List.of( + "class Foo { permits m() {} }", + "class Foo { permits i; }", + "class Foo { void m(permits i) {} }" + )) { + assertFail("compiler.err.restricted.type.not.allowed.here", s); + } + String[] testOptions = {/* no options */}; String[] previousCompOptions = getCompileOptions(); setCompileOptions(testOptions);