< prev index next >

test/tools/javac/modules/PatchModulesTest.java

Print this page
rev 3947 : imported patch xmodule-to-patch-module

*** 26,60 **** * @bug 8160489 * @summary tests for --patch-modules * @library /tools/lib * @modules * jdk.compiler/com.sun.tools.javac.api ! * jdk.compiler/com.sun.tools.javac.file:+open * jdk.compiler/com.sun.tools.javac.main * @build toolbox.ToolBox toolbox.JavacTask toolbox.ModuleBuilder ModuleTestBase * @run main PatchModulesTest */ import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; ! import java.lang.reflect.Field; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import javax.tools.JavaFileObject; import javax.tools.ToolProvider; import com.sun.source.util.JavacTask; import com.sun.tools.javac.api.JavacTool; - import com.sun.tools.javac.file.BaseFileManager; import com.sun.tools.javac.file.JavacFileManager; - import com.sun.tools.javac.file.Locations; import static java.util.Arrays.asList; public class PatchModulesTest extends ModuleTestBase { --- 26,65 ---- * @bug 8160489 * @summary tests for --patch-modules * @library /tools/lib * @modules * jdk.compiler/com.sun.tools.javac.api ! * jdk.compiler/com.sun.tools.javac.file * jdk.compiler/com.sun.tools.javac.main * @build toolbox.ToolBox toolbox.JavacTask toolbox.ModuleBuilder ModuleTestBase * @run main PatchModulesTest */ import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; ! import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; + import java.util.AbstractMap.SimpleEntry; import java.util.List; import java.util.Map; + import java.util.Map.Entry; + import java.util.TreeMap; import java.util.stream.Collectors; + import java.util.stream.StreamSupport; + import javax.tools.JavaFileManager.Location; import javax.tools.JavaFileObject; import javax.tools.ToolProvider; + import javax.tools.StandardJavaFileManager; + import javax.tools.StandardLocation; import com.sun.source.util.JavacTask; import com.sun.tools.javac.api.JavacTool; import com.sun.tools.javac.file.JavacFileManager; import static java.util.Arrays.asList; public class PatchModulesTest extends ModuleTestBase {
*** 113,137 **** } void test(List<String> patches, boolean expectOK, String expect) throws Exception { JavacTool tool = (JavacTool) ToolProvider.getSystemJavaCompiler(); StringWriter sw = new StringWriter(); ! try (PrintWriter pw = new PrintWriter(sw)) { ! JavacFileManager fm = tool.getStandardFileManager(null, null, null); List<String> opts = patches.stream() .map(p -> "--patch-module=" + p.replace(":", PS)) .collect(Collectors.toList()); Iterable<? extends JavaFileObject> files = fm.getJavaFileObjects("C.java"); JavacTask task = tool.getTask(pw, fm, null, opts, null, files); ! Field locationsField = BaseFileManager.class.getDeclaredField("locations"); ! locationsField.setAccessible(true); ! Object locations = locationsField.get(fm); ! ! Field patchMapField = Locations.class.getDeclaredField("patchMap"); ! patchMapField.setAccessible(true); ! Map<?,?> patchMap = (Map<?,?>) patchMapField.get(locations); String found = patchMap.toString(); if (!found.equals(expect)) { tb.out.println("Expect: " + expect); tb.out.println("Found: " + found); --- 118,150 ---- } void test(List<String> patches, boolean expectOK, String expect) throws Exception { JavacTool tool = (JavacTool) ToolProvider.getSystemJavaCompiler(); StringWriter sw = new StringWriter(); ! try (PrintWriter pw = new PrintWriter(sw); ! JavacFileManager fm = tool.getStandardFileManager(null, null, null)) { List<String> opts = patches.stream() .map(p -> "--patch-module=" + p.replace(":", PS)) .collect(Collectors.toList()); Iterable<? extends JavaFileObject> files = fm.getJavaFileObjects("C.java"); JavacTask task = tool.getTask(pw, fm, null, opts, null, files); ! Map<String, List<Location>> mod2Location = ! StreamSupport.stream(fm.listLocationsForModules(StandardLocation.PATCH_MODULE_PATH) ! .spliterator(), ! false) ! .flatMap(sl -> sl.stream()) ! .collect(Collectors.groupingBy(l -> fm.inferModuleName(l))); ! ! Map<String, List<String>> patchMap = mod2Location.entrySet() ! .stream() ! .map(e -> new SimpleEntry<>(e.getKey(), e.getValue().get(0))) ! .map(e -> new SimpleEntry<>(e.getKey(), locationPaths(fm, e.getValue()))) ! .collect(Collectors.toMap(Entry :: getKey, ! Entry :: getValue, ! (v1, v2) -> {throw new IllegalStateException();}, ! TreeMap::new)); String found = patchMap.toString(); if (!found.equals(expect)) { tb.out.println("Expect: " + expect); tb.out.println("Found: " + found);
*** 148,154 **** --- 161,196 ---- tb.out.println("Found: " + found); error("output not as expected"); } } } + + static List<String> locationPaths(StandardJavaFileManager fm, Location loc) { + return StreamSupport.stream(fm.getLocationAsPaths(loc).spliterator(), false) + .map(p -> p.toString()) + .collect(Collectors.toList()); + } + + @Test + public void testPatchWithSource(Path base) throws Exception { + Path patch = base.resolve("patch"); + tb.writeJavaFiles(patch, "package javax.lang.model.element; public interface Extra { }"); + Path src = base.resolve("src"); + tb.writeJavaFiles(src, + "module m { requires java.compiler; }", + "package test; public interface Test extends javax.lang.model.element.Extra { }"); + Path classes = base.resolve("classes"); + tb.createDirectories(classes); + + new toolbox.JavacTask(tb) + .options("--patch-module", "java.compiler=" + patch.toString()) + .outdir(classes) + .files(findJavaFiles(src)) + .run() + .writeAll(); + + if (Files.exists(classes.resolve("javax"))) { + throw new AssertionError(); + } + } }
< prev index next >