26 * @summary Test the -XaddReads option |
26 * @summary Test the -XaddReads option |
27 * @library /tools/lib |
27 * @library /tools/lib |
28 * @modules jdk.compiler/com.sun.tools.javac.api |
28 * @modules jdk.compiler/com.sun.tools.javac.api |
29 * jdk.compiler/com.sun.tools.javac.main |
29 * jdk.compiler/com.sun.tools.javac.main |
30 * jdk.jdeps/com.sun.tools.javap |
30 * jdk.jdeps/com.sun.tools.javap |
31 * @build ToolBox ModuleTestBase |
31 * @build toolbox.ToolBox toolbox.JarTask toolbox.JavacTask toolbox.JavapTask ModuleTestBase |
32 * @run main AddReadsTest |
32 * @run main AddReadsTest |
33 */ |
33 */ |
34 |
34 |
35 import java.nio.file.Files; |
35 import java.nio.file.Files; |
36 import java.nio.file.Path; |
36 import java.nio.file.Path; |
42 import javax.lang.model.SourceVersion; |
42 import javax.lang.model.SourceVersion; |
43 import javax.lang.model.element.ModuleElement; |
43 import javax.lang.model.element.ModuleElement; |
44 import javax.lang.model.element.ModuleElement.RequiresDirective; |
44 import javax.lang.model.element.ModuleElement.RequiresDirective; |
45 import javax.lang.model.element.TypeElement; |
45 import javax.lang.model.element.TypeElement; |
46 import javax.lang.model.util.ElementFilter; |
46 import javax.lang.model.util.ElementFilter; |
|
47 |
|
48 import toolbox.JarTask; |
|
49 import toolbox.JavacTask; |
|
50 import toolbox.JavapTask; |
|
51 import toolbox.Task; |
|
52 import toolbox.ToolBox; |
47 |
53 |
48 public class AddReadsTest extends ModuleTestBase { |
54 public class AddReadsTest extends ModuleTestBase { |
49 |
55 |
50 public static void main(String... args) throws Exception { |
56 public static void main(String... args) throws Exception { |
51 new AddReadsTest().runTests(); |
57 new AddReadsTest().runTests(); |
63 "module m2 { }", |
69 "module m2 { }", |
64 "package test; public class Test extends api.Api { }"); |
70 "package test; public class Test extends api.Api { }"); |
65 Path classes = base.resolve("classes"); |
71 Path classes = base.resolve("classes"); |
66 tb.createDirectories(classes); |
72 tb.createDirectories(classes); |
67 |
73 |
68 String log = tb.new JavacTask() |
74 String log = new JavacTask(tb) |
69 .options("-XDrawDiagnostics", |
75 .options("-XDrawDiagnostics", |
70 "-modulesourcepath", src.toString()) |
76 "-modulesourcepath", src.toString()) |
71 .outdir(classes) |
77 .outdir(classes) |
72 .files(findJavaFiles(src)) |
78 .files(findJavaFiles(src)) |
73 .run(ToolBox.Expect.FAIL) |
79 .run(Task.Expect.FAIL) |
74 .writeAll() |
80 .writeAll() |
75 .getOutput(ToolBox.OutputKind.DIRECT); |
81 .getOutput(Task.OutputKind.DIRECT); |
76 |
82 |
77 if (!log.contains("Test.java:1:44: compiler.err.not.def.access.package.cant.access: api.Api, api")) |
83 if (!log.contains("Test.java:1:44: compiler.err.not.def.access.package.cant.access: api.Api, api")) |
78 throw new Exception("expected output not found"); |
84 throw new Exception("expected output not found"); |
79 |
85 |
80 //test add dependencies: |
86 //test add dependencies: |
81 tb.new JavacTask() |
87 new JavacTask(tb) |
82 .options("-XaddReads:m2=m1", |
88 .options("-XaddReads:m2=m1", |
83 "-modulesourcepath", src.toString(), |
89 "-modulesourcepath", src.toString(), |
84 "-processor", VerifyRequires.class.getName()) |
90 "-processor", VerifyRequires.class.getName()) |
85 .outdir(classes) |
91 .outdir(classes) |
86 .files(findJavaFiles(src)) |
92 .files(findJavaFiles(src)) |
87 .run() |
93 .run() |
88 .writeAll(); |
94 .writeAll(); |
89 |
95 |
90 String decompiled = tb.new JavapTask() |
96 String decompiled = new JavapTask(tb) |
91 .options("-verbose", classes.resolve("m2").resolve("module-info.class").toString()) |
97 .options("-verbose", classes.resolve("m2").resolve("module-info.class").toString()) |
92 .run() |
98 .run() |
93 .getOutput(ToolBox.OutputKind.DIRECT); |
99 .getOutput(Task.OutputKind.DIRECT); |
94 |
100 |
95 if (decompiled.contains("m1")) { |
101 if (decompiled.contains("m1")) { |
96 throw new Exception("Incorrectly refers to m1 module."); |
102 throw new Exception("Incorrectly refers to m1 module."); |
97 } |
103 } |
98 |
104 |
99 //cyclic dependencies OK when created through addReads: |
105 //cyclic dependencies OK when created through addReads: |
100 tb.new JavacTask() |
106 new JavacTask(tb) |
101 .options("-XaddReads:m2=m1,m1=m2", |
107 .options("-XaddReads:m2=m1,m1=m2", |
102 "-modulesourcepath", src.toString()) |
108 "-modulesourcepath", src.toString()) |
103 .outdir(classes) |
109 .outdir(classes) |
104 .files(findJavaFiles(src)) |
110 .files(findJavaFiles(src)) |
105 .run() |
111 .run() |
106 .writeAll(); |
112 .writeAll(); |
107 |
113 |
108 tb.writeJavaFiles(src_m2, |
114 tb.writeJavaFiles(src_m2, |
109 "module m2 { requires m1; }"); |
115 "module m2 { requires m1; }"); |
110 |
116 |
111 tb.new JavacTask() |
117 new JavacTask(tb) |
112 .options("-XaddReads:m1=m2", |
118 .options("-XaddReads:m1=m2", |
113 "-modulesourcepath", src.toString()) |
119 "-modulesourcepath", src.toString()) |
114 .outdir(classes) |
120 .outdir(classes) |
115 .files(findJavaFiles(src)) |
121 .files(findJavaFiles(src)) |
116 .run() |
122 .run() |
182 tb.writeJavaFiles(m1, |
188 tb.writeJavaFiles(m1, |
183 "module m1 { }", |
189 "module m1 { }", |
184 "package api; public class Api { public static void test() { } }", |
190 "package api; public class Api { public static void test() { } }", |
185 "package impl; public class Impl { { api.Api.test(); } }"); |
191 "package impl; public class Impl { { api.Api.test(); } }"); |
186 |
192 |
187 tb.new JavacTask() |
193 new JavacTask(tb) |
188 .options("-classpath", jar.toString(), |
194 .options("-classpath", jar.toString(), |
189 "-modulesourcepath", moduleSrc.toString(), |
195 "-modulesourcepath", moduleSrc.toString(), |
190 "-XaddReads:m1=ALL-UNNAMED", |
196 "-XaddReads:m1=ALL-UNNAMED", |
191 "-XDrawDiagnostics") |
197 "-XDrawDiagnostics") |
192 .outdir(classes) |
198 .outdir(classes) |
204 Files.createDirectories(classes); |
210 Files.createDirectories(classes); |
205 |
211 |
206 tb.writeJavaFiles(src, |
212 tb.writeJavaFiles(src, |
207 "package impl; public class Impl { api.Api a; }"); |
213 "package impl; public class Impl { api.Api a; }"); |
208 |
214 |
209 tb.new JavacTask() |
215 new JavacTask(tb) |
210 .options("-classpath", jar.toString(), |
216 .options("-classpath", jar.toString(), |
211 "-XaddReads:java.base=ALL-UNNAMED", |
217 "-XaddReads:java.base=ALL-UNNAMED", |
212 "-Xmodule:java.base") |
218 "-Xmodule:java.base") |
213 .outdir(classes) |
219 .outdir(classes) |
214 .files(src.resolve("impl").resolve("Impl.java")) |
220 .files(src.resolve("impl").resolve("Impl.java")) |
240 tb.writeJavaFiles(legacySrc, |
246 tb.writeJavaFiles(legacySrc, |
241 "package api; public abstract class Api {}"); |
247 "package api; public abstract class Api {}"); |
242 Path legacyClasses = base.resolve("legacy-classes"); |
248 Path legacyClasses = base.resolve("legacy-classes"); |
243 Files.createDirectories(legacyClasses); |
249 Files.createDirectories(legacyClasses); |
244 |
250 |
245 String log = tb.new JavacTask() |
251 String log = new JavacTask(tb) |
246 .options() |
252 .options() |
247 .outdir(legacyClasses) |
253 .outdir(legacyClasses) |
248 .files(findJavaFiles(legacySrc)) |
254 .files(findJavaFiles(legacySrc)) |
249 .run() |
255 .run() |
250 .writeAll() |
256 .writeAll() |
251 .getOutput(ToolBox.OutputKind.DIRECT); |
257 .getOutput(Task.OutputKind.DIRECT); |
252 |
258 |
253 if (!log.isEmpty()) { |
259 if (!log.isEmpty()) { |
254 throw new Exception("unexpected output: " + log); |
260 throw new Exception("unexpected output: " + log); |
255 } |
261 } |
256 |
262 |
291 Files.createDirectories(unnamedClasses); |
297 Files.createDirectories(unnamedClasses); |
292 |
298 |
293 tb.writeJavaFiles(unnamedSrc, |
299 tb.writeJavaFiles(unnamedSrc, |
294 "package impl; public class Impl { }"); |
300 "package impl; public class Impl { }"); |
295 |
301 |
296 tb.new JavacTask() |
302 new JavacTask(tb) |
297 .options("-XaddReads:m1=ALL-UNNAMED", |
303 .options("-XaddReads:m1=ALL-UNNAMED", |
298 "-Xmodule:m1", |
304 "-Xmodule:m1", |
299 "-modulepath", classes.toString()) |
305 "-modulepath", classes.toString()) |
300 .outdir(unnamedClasses) |
306 .outdir(unnamedClasses) |
301 .files(findJavaFiles(unnamedSrc)) |
307 .files(findJavaFiles(unnamedSrc)) |