8246199: 'permits' is a restricted identifier

Reviewed-by: mcimadamore
This commit is contained in:
Vicente Romero 2020-06-08 11:08:28 -04:00
parent 358714bcd0
commit e90621c169
2 changed files with 37 additions and 0 deletions
src/jdk.compiler/share/classes/com/sun/tools/javac/parser
test/langtools/tools/javac/sealed

@ -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;
}

@ -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);