diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java index 6dd4a368f44..1136cb5621a 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java @@ -1598,6 +1598,9 @@ public class Modules extends JCTree.Visitor { addVisiblePackages(msym, seen, exportsFrom, exports); } }); + + //module readability is reflexive: + msym.readModules.add(msym); } private void addVisiblePackages(ModuleSymbol msym, diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TypeEnter.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TypeEnter.java index 72943e09f0f..eb48812f538 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TypeEnter.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TypeEnter.java @@ -498,7 +498,7 @@ public class TypeEnter implements Completer { } for (ExportsDirective export : currentModule.exports) { - if (export.modules != null && !export.modules.contains(env.toplevel.packge.modle)) { + if (export.modules != null && !export.modules.contains(env.toplevel.modle)) { continue; } diff --git a/test/langtools/tools/javac/ImportModule.java b/test/langtools/tools/javac/ImportModule.java index efbc9c21077..f38b77062e2 100644 --- a/test/langtools/tools/javac/ImportModule.java +++ b/test/langtools/tools/javac/ImportModule.java @@ -23,7 +23,7 @@ /** * @test - * @bug 8328481 8332236 + * @bug 8328481 8332236 8332890 * @summary Check behavior of module imports. * @library /tools/lib * @modules java.logging @@ -741,4 +741,60 @@ public class ImportModule extends TestRunner { .writeAll(); } + @Test //JDK-8332890 + public void testModuleInfoSelfImport(Path base) throws Exception { + Path current = base.resolve("."); + Path src = current.resolve("src"); + Path classes = current.resolve("classes"); + tb.writeJavaFiles(src, + """ + import module M; + module M { + exports p1 to M1; + exports p2; + exports p3 to M; + uses A; + uses B; + uses C; + } + """, + """ + package p1; + public class A {} + """, + """ + package p2; + public class B {} + """, + """ + package p3; + public class C {} + """); + + Files.createDirectories(classes); + + List<String> actualErrors = new JavacTask(tb) + .options("-XDrawDiagnostics", + "--enable-preview", "--release", SOURCE_VERSION) + .outdir(classes) + .files(tb.findJavaFiles(src)) + .run(Task.Expect.FAIL) + .writeAll() + .getOutputLines(Task.OutputKind.DIRECT); + + List<String> expectedErrors = List.of( + "module-info.java:3:18: compiler.warn.module.not.found: M1", + "module-info.java:6:9: compiler.err.cant.resolve: kindname.class, A, , ", + "- compiler.note.preview.filename: module-info.java, DEFAULT", + "- compiler.note.preview.recompile", + "1 error", + "1 warning" + ); + + if (!Objects.equals(expectedErrors, actualErrors)) { + throw new AssertionError("Incorrect Output, expected: " + expectedErrors + + ", actual: " + out); + + } + } }