--- a/langtools/test/tools/javac/diags/Example.java Fri Apr 07 15:46:31 2017 +0100
+++ b/langtools/test/tools/javac/diags/Example.java Mon Apr 10 11:08:59 2017 +0200
@@ -24,8 +24,18 @@
import java.io.*;
import java.net.URL;
import java.net.URLClassLoader;
+import java.nio.file.Files;
+import java.nio.file.Path;
import java.util.*;
+import java.util.Map.Entry;
+import java.util.jar.JarFile;
+import java.util.jar.JarOutputStream;
+import java.util.logging.Level;
+import java.util.logging.Logger;
import java.util.regex.*;
+import java.util.stream.Collectors;
+import java.util.zip.ZipEntry;
+
import javax.annotation.processing.Processor;
import javax.tools.Diagnostic;
import javax.tools.DiagnosticCollector;
@@ -210,9 +220,53 @@
File modulepathDir = new File(tempDir, "modulepath");
modulepathDir.mkdirs();
clean(modulepathDir);
- List<String> sOpts = Arrays.asList("-d", modulepathDir.getPath(),
- "--module-source-path", new File(file, "modulepath").getAbsolutePath());
- new Jsr199Compiler(verbose).run(null, null, false, sOpts, modulePathFiles);
+ boolean hasModuleInfo =
+ modulePathFiles.stream()
+ .anyMatch(f -> f.getName().equalsIgnoreCase("module-info.java"));
+ Path modulePath = new File(file, "modulepath").toPath().toAbsolutePath();
+ if (hasModuleInfo) {
+ //ordinary modules
+ List<String> sOpts =
+ Arrays.asList("-d", modulepathDir.getPath(),
+ "--module-source-path", modulePath.toString());
+ new Jsr199Compiler(verbose).run(null, null, false, sOpts, modulePathFiles);
+ } else {
+ //automatic modules:
+ Map<String, List<Path>> module2Files =
+ modulePathFiles.stream()
+ .map(f -> f.toPath())
+ .collect(Collectors.groupingBy(p -> modulePath.relativize(p)
+ .getName(0)
+ .toString()));
+ for (Entry<String, List<Path>> e : module2Files.entrySet()) {
+ File scratchDir = new File(tempDir, "scratch");
+ scratchDir.mkdirs();
+ clean(scratchDir);
+ List<String> sOpts =
+ Arrays.asList("-d", scratchDir.getPath());
+ new Jsr199Compiler(verbose).run(null,
+ null,
+ false,
+ sOpts,
+ e.getValue().stream()
+ .map(p -> p.toFile())
+ .collect(Collectors.toList()));
+ try (JarOutputStream jarOut =
+ new JarOutputStream(new FileOutputStream(new File(modulepathDir, e.getKey() + ".jar")))) {
+ Files.find(scratchDir.toPath(), Integer.MAX_VALUE, (p, attr) -> attr.isRegularFile())
+ .forEach(p -> {
+ try (InputStream in = Files.newInputStream(p)) {
+ jarOut.putNextEntry(new ZipEntry(scratchDir.toPath()
+ .relativize(p)
+ .toString()));
+ jarOut.write(in.readAllBytes());
+ } catch (IOException ex) {
+ throw new IllegalStateException(ex);
+ }
+ });
+ }
+ }
+ }
opts.add("--module-path");
opts.add(modulepathDir.getAbsolutePath());
}