mirror of
https://github.com/openjdk/jdk.git
synced 2026-07-27 19:33:39 +00:00
8370334: javadoc NPE with "import module" statement
Reviewed-by: vromero
This commit is contained in:
parent
26460b6f12
commit
8af5943719
@ -37,7 +37,7 @@ import java.util.LinkedHashMap;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
@ -236,6 +236,7 @@ public class Modules extends JCTree.Visitor {
|
||||
setupAllModules(); //initialize the module graph
|
||||
Assert.checkNonNull(allModules);
|
||||
inInitModules = false;
|
||||
return allModules;
|
||||
}, null);
|
||||
} finally {
|
||||
inInitModules = false;
|
||||
@ -249,10 +250,11 @@ public class Modules extends JCTree.Visitor {
|
||||
//the next steps may query if the current module participates in preview,
|
||||
//and that requires a completed java.base:
|
||||
syms.java_base.complete();
|
||||
return modules;
|
||||
}, c);
|
||||
}
|
||||
|
||||
private boolean enter(List<JCCompilationUnit> trees, Consumer<Set<ModuleSymbol>> init, ClassSymbol c) {
|
||||
private boolean enter(List<JCCompilationUnit> trees, Function<Set<ModuleSymbol>, Set<ModuleSymbol>> init, ClassSymbol c) {
|
||||
if (!allowModules) {
|
||||
for (JCCompilationUnit tree: trees) {
|
||||
tree.modle = syms.noModule;
|
||||
@ -270,10 +272,13 @@ public class Modules extends JCTree.Visitor {
|
||||
|
||||
setCompilationUnitModules(trees, roots, c);
|
||||
|
||||
init.accept(roots);
|
||||
Set<ModuleSymbol> initialized = init.apply(roots);
|
||||
|
||||
for (ModuleSymbol msym: roots) {
|
||||
msym.complete();
|
||||
for (ModuleSymbol msym : initialized) {
|
||||
if (msym != syms.unnamedModule ||
|
||||
roots.contains(syms.unnamedModule)) {
|
||||
msym.complete();
|
||||
}
|
||||
}
|
||||
} catch (CompletionFailure ex) {
|
||||
chk.completionError(null, ex);
|
||||
|
||||
@ -672,4 +672,35 @@ public class Modules extends ModuleTestBase {
|
||||
checkTypesIncluded("p.P");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testImportModules(Path base) throws Exception {
|
||||
Path src = base.resolve("src");
|
||||
Path mod = Paths.get(src.toString(), "m1");
|
||||
tb.writeJavaFiles(mod,
|
||||
"""
|
||||
import module m1;
|
||||
module m1 {
|
||||
exports p;
|
||||
uses Service;
|
||||
provides Service with ServiceImpl;
|
||||
}
|
||||
""",
|
||||
"""
|
||||
package p;
|
||||
public interface Service {
|
||||
}
|
||||
""",
|
||||
"""
|
||||
package p;
|
||||
public class ServiceImpl implements Service {
|
||||
}
|
||||
""");
|
||||
execTask("--module-source-path", src.toString(),
|
||||
"--module", "m1");
|
||||
checkModulesSpecified("m1");
|
||||
checkPackagesIncluded("p");
|
||||
checkTypesIncluded("p.Service");
|
||||
checkTypesIncluded("p.ServiceImpl");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -23,7 +23,7 @@
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 8167975 8173596
|
||||
* @bug 8167975 8173596 8370334
|
||||
* @summary Test the --add-modules option
|
||||
* @library /tools/lib
|
||||
* @modules jdk.compiler/com.sun.tools.javac.api
|
||||
@ -35,6 +35,7 @@
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import javax.tools.JavaCompiler;
|
||||
import javax.tools.JavaCompiler.CompilationTask;
|
||||
@ -278,5 +279,39 @@ public class AddModulesTest extends ModuleTestBase {
|
||||
Assert.check(t.call());
|
||||
}
|
||||
}
|
||||
|
||||
@Test //JDK-8370334
|
||||
public void testModuleImportAndAddModules(Path base) throws Exception {
|
||||
Path src = base.resolve("src");
|
||||
|
||||
//module that will be inserted using addModules:
|
||||
Path src_m = src.resolve("m");
|
||||
tb.writeJavaFiles(src_m,
|
||||
"import module m; module m { exports p1; }",
|
||||
"package p1; public class C1 { }");
|
||||
//test module:
|
||||
Path src_test = src.resolve("test");
|
||||
tb.writeJavaFiles(src_test,
|
||||
"import module test; module test { exports p2; }",
|
||||
"package p2; public class C2 { }");
|
||||
|
||||
Path classes = base.resolve("classes");
|
||||
tb.createDirectories(classes);
|
||||
|
||||
JavaCompiler c = ToolProvider.getSystemJavaCompiler();
|
||||
try (StandardJavaFileManager fm = c.getStandardFileManager(null, null, null)) {
|
||||
List<String> options = List.of(
|
||||
"--module-source-path", src.toString(),
|
||||
"-d", classes.toString()
|
||||
);
|
||||
Iterable<? extends JavaFileObject> files =
|
||||
fm.getJavaFileObjects(findJavaFiles(src_test));
|
||||
|
||||
CompilationTask t = c.getTask(null, fm, null, options, null, files);
|
||||
t.addModules(Arrays.asList("m"));
|
||||
//expecting no errors/crashes:
|
||||
Assert.check(t.call());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user