8217868: Crash for overlap between source path and patch module path
Summary: When analyzing implicit files, do not look for containing module, but rather use the already known one.
Reviewed-by: jjg
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java Sat Mar 02 18:09:18 2019 -0500
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java Mon Mar 04 10:19:35 2019 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -504,12 +504,8 @@
module.completer = sym -> completeModule((ModuleSymbol) sym);
} else {
Assert.check(rootModules.isEmpty());
- String moduleOverride = singleModuleOverride(trees);
- if (moduleOverride != null) {
- module = moduleFinder.findModule(names.fromString(moduleOverride));
- } else {
- module = defaultModule;
- }
+ Assert.checkNonNull(c);
+ module = c.packge().modle;
rootModules.add(module);
}
@@ -1796,6 +1792,7 @@
public void newRound() {
allModules = null;
rootModules = null;
+ defaultModule = null;
warnedMissing.clear();
}
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/JavadocTool.java Sat Mar 02 18:09:18 2019 -0500
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/JavadocTool.java Mon Mar 04 10:19:35 2019 +0100
@@ -197,9 +197,11 @@
}
// Parse the files in the packages and subpackages to be documented
- ListBuffer<JCCompilationUnit> packageTrees = new ListBuffer<>();
- parse(etable.getFilesToParse(), packageTrees, false);
- modules.enter(packageTrees.toList(), null);
+ ListBuffer<JCCompilationUnit> allTrees = new ListBuffer<>();
+ allTrees.addAll(classTrees);
+ parse(etable.getFilesToParse(), allTrees, false);
+ modules.newRound();
+ modules.initModules(allTrees.toList());
if (messager.hasErrors()) {
return null;
@@ -207,7 +209,7 @@
// Enter symbols for all files
toolEnv.notice("main.Building_tree");
- javadocEnter.main(classTrees.toList().appendList(packageTrees));
+ javadocEnter.main(allTrees.toList());
if (messager.hasErrors()) {
return null;
--- a/test/langtools/tools/javac/modules/PatchModulesTest.java Sat Mar 02 18:09:18 2019 -0500
+++ b/test/langtools/tools/javac/modules/PatchModulesTest.java Mon Mar 04 10:19:35 2019 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 8160489
+ * @bug 8160489 8217868
* @summary tests for --patch-modules
* @library /tools/lib
* @modules
@@ -192,5 +192,23 @@
throw new AssertionError();
}
}
+
+ @Test
+ public void testPatchModuleSourcePathClash(Path base) throws Exception {
+ Path src = base.resolve("src");
+ tb.writeJavaFiles(src,
+ "module m { uses test.Test; }",
+ "package test; public class Test { }");
+ Path classes = base.resolve("classes");
+ tb.createDirectories(classes);
+
+ new toolbox.JavacTask(tb)
+ .options("--patch-module", "other=" + src.toString(),
+ "-sourcepath", src.toString())
+ .outdir(classes)
+ .files(findJavaFiles(src.resolve("module-info.java")))
+ .run()
+ .writeAll();
+ }
}