From 79069c5e748a274c45dec72aad082c31eff418d1 Mon Sep 17 00:00:00 2001 From: Jan Lahoda Date: Tue, 20 Jun 2023 07:02:49 +0000 Subject: [PATCH] 8310314: Misplaced "unnamed classes are a preview feature and are disabled by default" error Reviewed-by: jlaskey --- .../com/sun/tools/javac/parser/JavacParser.java | 3 +-- .../unnamedclass/SourceLevelErrorPosition.java | 13 +++++++++++++ .../javac/unnamedclass/SourceLevelErrorPosition.out | 2 ++ 3 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 test/langtools/tools/javac/unnamedclass/SourceLevelErrorPosition.java create mode 100644 test/langtools/tools/javac/unnamedclass/SourceLevelErrorPosition.out 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 f1da2698ee3..3eb63a06124 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 @@ -3995,6 +3995,7 @@ public class JavacParser implements Parser { } if (isTopLevelMethodOrField) { + checkSourceLevel(token.pos, Feature.UNNAMED_CLASSES); defs.appendList(topLevelMethodOrFieldDeclaration(mods)); isUnnamedClass = true; } else { @@ -4025,8 +4026,6 @@ public class JavacParser implements Parser { // Restructure top level to be an unnamed class. private List constructUnnamedClass(List origDefs) { - checkSourceLevel(Feature.UNNAMED_CLASSES); - ListBuffer topDefs = new ListBuffer<>(); ListBuffer defs = new ListBuffer<>(); diff --git a/test/langtools/tools/javac/unnamedclass/SourceLevelErrorPosition.java b/test/langtools/tools/javac/unnamedclass/SourceLevelErrorPosition.java new file mode 100644 index 00000000000..54beb45d90b --- /dev/null +++ b/test/langtools/tools/javac/unnamedclass/SourceLevelErrorPosition.java @@ -0,0 +1,13 @@ +/** + * @test /nodynamiccopyright/ + * @bug 8310314 + * @summary Ensure proper error position for the "unnamed classes not supported" error + * @compile/fail/ref=SourceLevelErrorPosition.out -XDrawDiagnostics SourceLevelErrorPosition.java + */ +class Nested {} +void main() { + System.err.println(""); +} +void test() { + System.err.println(""); +} diff --git a/test/langtools/tools/javac/unnamedclass/SourceLevelErrorPosition.out b/test/langtools/tools/javac/unnamedclass/SourceLevelErrorPosition.out new file mode 100644 index 00000000000..518350810a0 --- /dev/null +++ b/test/langtools/tools/javac/unnamedclass/SourceLevelErrorPosition.out @@ -0,0 +1,2 @@ +SourceLevelErrorPosition.java:8:1: compiler.err.preview.feature.disabled.plural: (compiler.misc.feature.unnamed.classes) +1 error