# HG changeset patch # User jlahoda # Date 1460713171 -7200 # Fri Apr 15 11:39:31 2016 +0200 # Node ID 3b61e985398d0d57597f1bcba3ffc0690ccfc4e8 # Parent 65837a9d9c4a6a562a7466c9aa6fb09dca5c61e2 8154283: Check for clash between package and class not working when package in a different module Summary: Looking for any visible package when checking for package-class clash Reviewed-by: TBD 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 --- 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 @@ -698,7 +698,7 @@ */ public boolean packageExists(ModuleSymbol msym, Name fullname) { Assert.checkNonNull(msym); - return enterPackage(msym, fullname).exists(); + return lookupPackage(msym, fullname).exists(); } /** Make a package, given its fully qualified name. diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/MemberEnter.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/MemberEnter.java --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/MemberEnter.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/MemberEnter.java @@ -53,10 +53,6 @@ public class MemberEnter extends JCTree.Visitor { protected static final Context.Key memberEnterKey = new Context.Key<>(); - /** A switch to determine whether we check for package/class conflicts - */ - final static boolean checkClash = true; - private final Enter enter; private final Log log; private final Check chk; diff --git a/test/tools/javac/modules/EdgeCases.java b/test/tools/javac/modules/EdgeCases.java --- a/test/tools/javac/modules/EdgeCases.java +++ b/test/tools/javac/modules/EdgeCases.java @@ -23,6 +23,7 @@ /* * @test + * @bug 8154283 * @summary tests for multi-module mode compilation * @library /tools/lib * @modules @@ -57,7 +58,6 @@ import toolbox.JarTask; import toolbox.JavacTask; import toolbox.Task; -import toolbox.ToolBox; public class EdgeCases extends ModuleTestBase { @@ -269,4 +269,39 @@ } + @Test + void testClasspackageClash(Path base) throws Exception { + Path src = base.resolve("src"); + Path src_m1 = src.resolve("m1"); + tb.writeJavaFiles(src_m1, + "module m1 { exports test.m1; }", + "package test.m1;\n" + + "public class Test {}\n"); + Path src_m2 = src.resolve("m2"); + tb.writeJavaFiles(src_m2, + "module m2 { requires m1; }", + "package test;\n" + + "public class m1 {}\n"); + Path classes = base.resolve("classes"); + tb.createDirectories(classes); + + List log = new JavacTask(tb) + .options("-modulesourcepath", src.toString(), + "-XDrawDiagnostics") + .outdir(classes) + .files(findJavaFiles(src)) + .run(Task.Expect.FAIL) + .writeAll() + .getOutputLines(Task.OutputKind.DIRECT); + + List expected = Arrays.asList( + "m1.java:2:8: compiler.err.clash.with.pkg.of.same.name: kindname.class, test.m1", + "1 error" + ); + + if (!expected.equals(log)) { + throw new IllegalStateException(log.toString()); + } + } + }