OpenJDK / jigsaw / jake / langtools
changeset 4848:cc3c67b12ef1
8177311: Denied access when named module accesses unreferences package from the unnamed module
Summary: Ensure access to the unnamed module is allowed if the given module reads the unnamed module.
Reviewed-by: jjg
author | jlahoda |
---|---|
date | Wed, 29 Mar 2017 10:27:23 +0200 |
parents | bef1cba2d0d9 |
children | bb0649dbe925 |
files | src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java test/tools/javac/modules/EdgeCases.java |
diffstat | 2 files changed, 42 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java Mon Mar 27 17:53:00 2017 -0700 +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java Wed Mar 29 10:27:23 2017 +0200 @@ -334,7 +334,10 @@ currModule.complete(); PackageSymbol p = c.packge(); isAccessible = - (currModule == p.modle) || currModule.visiblePackages.get(p.fullname) == p || p == syms.rootPackage; + currModule == p.modle || + currModule.visiblePackages.get(p.fullname) == p || + p == syms.rootPackage || + (p.modle == syms.unnamedModule && currModule.readModules.contains(p.modle)); } else { isAccessible = true; }
--- a/test/tools/javac/modules/EdgeCases.java Mon Mar 27 17:53:00 2017 -0700 +++ b/test/tools/javac/modules/EdgeCases.java Wed Mar 29 10:27:23 2017 +0200 @@ -23,7 +23,7 @@ /* * @test - * @bug 8154283 8167320 8171098 8172809 8173068 8173117 8176045 + * @bug 8154283 8167320 8171098 8172809 8173068 8173117 8176045 8177311 * @summary tests for multi-module mode compilation * @library /tools/lib * @modules @@ -958,4 +958,41 @@ throw new Exception("expected output not found: " + log); } + @Test + public void testDependOnUnnamedAccessibility(Path base) throws Exception { + Path unnamedSrc = base.resolve("unnamed-src"); + tb.writeJavaFiles(unnamedSrc, + "package p1; public class First { public static p2.Second get() { return null; } }", + "package p2; public class Second { public void test() { } }"); + Path unnamedClasses = base.resolve("unnamed-classes"); + tb.createDirectories(unnamedClasses); + + System.err.println("compiling unnamed sources:"); + + new JavacTask(tb) + .outdir(unnamedClasses) + .files(findJavaFiles(unnamedSrc)) + .run() + .writeAll(); + + //test sources: + Path src = base.resolve("src"); + Path m = src.resolve("m"); + tb.writeJavaFiles(m, + "module m { }", + "package p; public class Test { { p1.First.get().test(); } }"); + Path classes = base.resolve("classes"); + tb.createDirectories(classes); + + System.err.println("compiling test module:"); + + new JavacTask(tb) + .options("-classpath", unnamedClasses.toString(), + "--add-reads", "m=ALL-UNNAMED") + .outdir(classes) + .files(findJavaFiles(src)) + .run() + .writeAll(); + } + }