diff --git a/make/langtools/src/classes/build/tools/symbolgenerator/CreateSymbols.java b/make/langtools/src/classes/build/tools/symbolgenerator/CreateSymbols.java index a88eabe01b2..039c531301f 100644 --- a/make/langtools/src/classes/build/tools/symbolgenerator/CreateSymbols.java +++ b/make/langtools/src/classes/build/tools/symbolgenerator/CreateSymbols.java @@ -340,6 +340,10 @@ public class CreateSymbols { "Ljdk/internal/javac/PreviewFeature;"; private static final String PREVIEW_FEATURE_ANNOTATION_INTERNAL = "Ljdk/internal/PreviewFeature+Annotation;"; + private static final String RESTRICTED_ANNOTATION = + "Ljdk/internal/javac/Restricted;"; + private static final String RESTRICTED_ANNOTATION_INTERNAL = + "Ljdk/internal/javac/Restricted+Annotation;"; private static final String VALUE_BASED_ANNOTATION = "Ljdk/internal/ValueBased;"; private static final String VALUE_BASED_ANNOTATION_INTERNAL = @@ -349,7 +353,8 @@ public class CreateSymbols { "Lsun/Proprietary+Annotation;", PREVIEW_FEATURE_ANNOTATION_OLD, PREVIEW_FEATURE_ANNOTATION_NEW, - VALUE_BASED_ANNOTATION)); + VALUE_BASED_ANNOTATION, + RESTRICTED_ANNOTATION)); private void stripNonExistentAnnotations(LoadDescriptions data) { Set allClasses = data.classes.name2Class.keySet(); @@ -1247,6 +1252,12 @@ public class CreateSymbols { annotationType = VALUE_BASED_ANNOTATION_INTERNAL; } + if (RESTRICTED_ANNOTATION.equals(annotationType)) { + //the non-public Restricted annotation will not be available in ct.sym, + //replace with purely synthetic javac-internal annotation: + annotationType = RESTRICTED_ANNOTATION_INTERNAL; + } + return new Annotation(null, addString(constantPool, annotationType), createElementPairs(constantPool, values)); diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symtab.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symtab.java index 17173e480f1..4e62828c426 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symtab.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symtab.java @@ -222,6 +222,7 @@ public class Symtab { public final Type previewFeatureType; public final Type previewFeatureInternalType; public final Type restrictedType; + public final Type restrictedInternalType; public final Type typeDescriptorType; public final Type recordType; public final Type switchBootstrapsType; @@ -609,6 +610,7 @@ public class Symtab { previewFeatureType = enterClass("jdk.internal.javac.PreviewFeature"); previewFeatureInternalType = enterSyntheticAnnotation("jdk.internal.PreviewFeature+Annotation"); restrictedType = enterClass("jdk.internal.javac.Restricted"); + restrictedInternalType = enterSyntheticAnnotation("jdk.internal.javac.Restricted+Annotation"); typeDescriptorType = enterClass("java.lang.invoke.TypeDescriptor"); recordType = enterClass("java.lang.Record"); switchBootstrapsType = enterClass("java.lang.runtime.SwitchBootstraps"); diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java index 22b21b86b9b..dba5fb6a197 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java @@ -1544,7 +1544,7 @@ public class ClassReader { } else if (proxy.type.tsym.flatName() == syms.valueBasedInternalType.tsym.flatName()) { Assert.check(sym.kind == TYP); sym.flags_field |= VALUE_BASED; - } else if (proxy.type.tsym.flatName() == syms.restrictedType.tsym.flatName()) { + } else if (proxy.type.tsym.flatName() == syms.restrictedInternalType.tsym.flatName()) { Assert.check(sym.kind == MTH); sym.flags_field |= RESTRICTED; } else { diff --git a/test/langtools/tools/javac/RestrictedMethods.java b/test/langtools/tools/javac/RestrictedMethods.java index 3f79860add5..d6973f456ca 100644 --- a/test/langtools/tools/javac/RestrictedMethods.java +++ b/test/langtools/tools/javac/RestrictedMethods.java @@ -3,6 +3,7 @@ * @bug 8316971 * @summary Smoke test for restricted method call warnings * @compile/fail/ref=RestrictedMethods.out -Xlint:restricted -Werror -XDrawDiagnostics RestrictedMethods.java + * @compile/fail/ref=RestrictedMethods.out --release ${jdk.version} -Xlint:restricted -Werror -XDrawDiagnostics RestrictedMethods.java * @compile -Werror RestrictedMethods.java */ diff --git a/test/langtools/tools/javac/RestrictedMethods.out b/test/langtools/tools/javac/RestrictedMethods.out index e6ef28a68ca..3d0e423e359 100644 --- a/test/langtools/tools/javac/RestrictedMethods.out +++ b/test/langtools/tools/javac/RestrictedMethods.out @@ -1,7 +1,7 @@ -RestrictedMethods.java:14:44: compiler.warn.restricted.method: java.lang.foreign.MemorySegment, reinterpret(long) -RestrictedMethods.java:18:49: compiler.warn.restricted.method: java.lang.foreign.MemorySegment, reinterpret(long) -RestrictedMethods.java:24:27: compiler.warn.restricted.method: java.lang.foreign.MemorySegment, reinterpret(long) -RestrictedMethods.java:33:16: compiler.warn.restricted.method: java.lang.foreign.MemorySegment, reinterpret(long) +RestrictedMethods.java:15:44: compiler.warn.restricted.method: java.lang.foreign.MemorySegment, reinterpret(long) +RestrictedMethods.java:19:49: compiler.warn.restricted.method: java.lang.foreign.MemorySegment, reinterpret(long) +RestrictedMethods.java:25:27: compiler.warn.restricted.method: java.lang.foreign.MemorySegment, reinterpret(long) +RestrictedMethods.java:34:16: compiler.warn.restricted.method: java.lang.foreign.MemorySegment, reinterpret(long) - compiler.err.warnings.and.werror 1 error 4 warnings