From d04ac14bdbab4187d0be98b8471f90be8a14f649 Mon Sep 17 00:00:00 2001 From: Jan Lahoda Date: Wed, 15 May 2024 05:43:18 +0000 Subject: [PATCH] 8332236: javac crashes with module imports and implicitly declared class Reviewed-by: vromero --- .../sun/tools/javac/parser/JavacParser.java | 2 +- test/langtools/tools/javac/ImportModule.java | 24 ++++++++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) 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 4278b902fb3..ce484e14b05 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 @@ -4118,7 +4118,7 @@ public class JavacParser implements Parser { for (JCTree def : origDefs) { if (def.hasTag(Tag.PACKAGEDEF)) { log.error(def.pos(), Errors.ImplicitClassShouldNotHavePackageDeclaration); - } else if (def.hasTag(Tag.IMPORT)) { + } else if (def.hasTag(Tag.IMPORT) || def.hasTag(Tag.MODULEIMPORT)) { topDefs.append(def); } else if (!def.hasTag(Tag.SKIP)) { defs.append(def); diff --git a/test/langtools/tools/javac/ImportModule.java b/test/langtools/tools/javac/ImportModule.java index 767288d4d2f..efbc9c21077 100644 --- a/test/langtools/tools/javac/ImportModule.java +++ b/test/langtools/tools/javac/ImportModule.java @@ -23,7 +23,7 @@ /** * @test - * @bug 8328481 + * @bug 8328481 8332236 * @summary Check behavior of module imports. * @library /tools/lib * @modules java.logging @@ -719,4 +719,26 @@ public class ImportModule extends TestRunner { .writeAll(); } + @Test + public void testImplicitlyDeclaredClass(Path base) throws Exception { + Path current = base.resolve("."); + Path src = current.resolve("src"); + Path classes = current.resolve("classes"); + tb.writeFile(src.resolve("Test.java"), + """ + import module java.base; + void main() { + } + """); + + Files.createDirectories(classes); + + new JavacTask(tb) + .options("--enable-preview", "--release", SOURCE_VERSION) + .outdir(classes) + .files(tb.findJavaFiles(src)) + .run(Task.Expect.SUCCESS) + .writeAll(); + } + }