Bug 533411: [9] Command line compiler puts the module-info.class in
wrong location - rehash
Change-Id: I2c474c140d9f853ad07fc5b5718e7e0887388b5b
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/ModuleCompilationTests.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/ModuleCompilationTests.java
index 94c5c52..d9eaef7 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/ModuleCompilationTests.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/ModuleCompilationTests.java
@@ -4864,4 +4864,43 @@
false,
OUTPUT_DIR + "javac");
}
+ /*
+ * Test that when module-info is not included in the command line, the class is still
+ * generated inside the module's sub folder.
+ */
+ public void testBug533411() {
+ File outputDirectory = new File(OUTPUT_DIR);
+ Util.flushDirectoryContent(outputDirectory);
+ String out = "bin";
+ String directory = OUTPUT_DIR + File.separator + "src";
+ String moduleLoc = directory + File.separator + "mod.one";
+ List<String> files = new ArrayList<>();
+ writeFileCollecting(files, moduleLoc, "module-info.java",
+ "module mod.one { \n" +
+ " requires java.sql;\n" +
+ "}");
+ writeFileCollecting(files, moduleLoc + File.separator + "p", "Test.java",
+ "package p;\n" +
+ "public class Test {\n" +
+ " java.sql.Connection conn = null;\n" +
+ "}");
+
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("-d " + OUTPUT_DIR + File.separator + out )
+ .append(" -9 ")
+ .append(" -classpath \"")
+ .append(Util.getJavaClassLibsAsString())
+ .append("\" ")
+ .append(" --module-source-path " + "\"" + directory + "\" ")
+ .append(moduleLoc + File.separator + "p" + File.separator + "Test.java");
+
+ Set<String> classFiles = runConformModuleTest(
+ new String[0],
+ buffer.toString(),
+ "",
+ "",
+ false);
+ String fileName = OUTPUT_DIR + File.separator + out + File.separator + "mod.one" + File.separator + "module-info.class";
+ assertClassFile("Missing modul-info.class: " + fileName, fileName, classFiles);
+ }
}
diff --git a/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/ModuleFinder.java b/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/ModuleFinder.java
index ce077d6..0ef53ad 100644
--- a/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/ModuleFinder.java
+++ b/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/ModuleFinder.java
@@ -268,7 +268,7 @@
return null;
}
private static IModule extractModuleFromSource(File file, Parser parser, Classpath pathEntry) {
- ICompilationUnit cu = new CompilationUnit(null, file.getAbsolutePath(), null);
+ ICompilationUnit cu = new CompilationUnit(null, file.getAbsolutePath(), null, pathEntry.getDestinationPath());
CompilationResult compilationResult = new CompilationResult(cu, 0, 1, 10);
CompilationUnitDeclaration unit = parser.parse(cu, compilationResult);
if (unit.isModuleInfo() && unit.moduleDeclaration != null) {