24 /** |
24 /** |
25 * @test |
25 * @test |
26 * @bug 8207954 |
26 * @bug 8207954 |
27 * @summary Verify that CreateSymbols can handle classfiles from the current release. |
27 * @summary Verify that CreateSymbols can handle classfiles from the current release. |
28 * @library /tools/lib /tools/javac/lib |
28 * @library /tools/lib /tools/javac/lib |
29 * @modules jdk.compiler/com.sun.tools.javac.api |
29 * @modules jdk.compiler/com.sun.tools.javac.api:+open |
30 * jdk.compiler/com.sun.tools.javac.main |
30 * jdk.compiler/com.sun.tools.javac.main |
|
31 * jdk.compiler/com.sun.tools.javac.jvm:+open |
|
32 * jdk.compiler/com.sun.tools.javac.util:+open |
|
33 * jdk.jdeps/com.sun.tools.classfile:+open |
31 * @build toolbox.ToolBox toolbox.JavacTask toolbox.Task |
34 * @build toolbox.ToolBox toolbox.JavacTask toolbox.Task |
32 * @run main CanHandleClassFilesTest |
35 * @run main CanHandleClassFilesTest |
33 */ |
36 */ |
34 |
37 |
35 import java.io.Writer; |
38 import java.io.Writer; |
36 import java.nio.file.Files; |
39 import java.nio.file.Files; |
37 import java.nio.file.Path; |
40 import java.nio.file.Path; |
38 import java.nio.file.Paths; |
41 import java.nio.file.Paths; |
|
42 import java.util.stream.Stream; |
39 |
43 |
40 import javax.tools.StandardLocation; |
44 import javax.tools.StandardLocation; |
41 |
45 |
42 import toolbox.JavacTask; |
46 import toolbox.JavacTask; |
43 import toolbox.ToolBox; |
47 import toolbox.ToolBox; |
91 throw new ClassNotFoundException(name); |
95 throw new ClassNotFoundException(name); |
92 } |
96 } |
93 } |
97 } |
94 }; |
98 }; |
95 |
99 |
|
100 // open the non-exported packages needed by CreateSymbols to its module |
|
101 Module targetModule = cl.getUnnamedModule(); |
|
102 Stream.of("jdk.compiler/com.sun.tools.javac.api", |
|
103 "jdk.compiler/com.sun.tools.javac.jvm", |
|
104 "jdk.compiler/com.sun.tools.javac.util", |
|
105 "jdk.jdeps/com.sun.tools.classfile") |
|
106 .forEach(p -> open(p, targetModule)); |
|
107 |
96 var createSymbolsClass = Class.forName("build.tools.symbolgenerator.CreateSymbols", false, cl); |
108 var createSymbolsClass = Class.forName("build.tools.symbolgenerator.CreateSymbols", false, cl); |
97 var main = createSymbolsClass.getDeclaredMethod("main", String[].class); |
109 var main = createSymbolsClass.getMethod("main", String[].class); |
98 var symbols = targetDir.resolve("symbols"); |
110 var symbols = targetDir.resolve("symbols"); |
99 |
111 |
100 try (Writer w = Files.newBufferedWriter(symbols)) {} |
112 try (Writer w = Files.newBufferedWriter(symbols)) {} |
101 |
113 |
102 main.invoke(null, |
114 main.invoke(null, |
110 symbols.toAbsolutePath().toString(), |
122 symbols.toAbsolutePath().toString(), |
111 targetDir.resolve("ct.sym").toAbsolutePath().toString()}); |
123 targetDir.resolve("ct.sym").toAbsolutePath().toString()}); |
112 } |
124 } |
113 } |
125 } |
114 |
126 |
|
127 void open(String moduleAndPackage, Module target) { |
|
128 String[] s = moduleAndPackage.split("/"); |
|
129 var moduleName = s[0]; |
|
130 var packageName = s[1]; |
|
131 ModuleLayer.boot().findModule(moduleName).orElseThrow().addOpens(packageName, target); |
|
132 } |
|
133 |
115 } |
134 } |