diff options
2 files changed, 40 insertions, 1 deletions
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 94c5c52fc6..d9eaef7286 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 @@ public void testBug521362_emptyFile() { 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 ce077d6696..0ef53adfc0 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 @@ public class ModuleFinder { 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) { |