27 * @summary Javac doesn't report warnings/errors if module provides unexported service and doesn't use it itself |
27 * @summary Javac doesn't report warnings/errors if module provides unexported service and doesn't use it itself |
28 * @library /tools/lib |
28 * @library /tools/lib |
29 * @modules |
29 * @modules |
30 * jdk.compiler/com.sun.tools.javac.api |
30 * jdk.compiler/com.sun.tools.javac.api |
31 * jdk.compiler/com.sun.tools.javac.main |
31 * jdk.compiler/com.sun.tools.javac.main |
32 * jdk.jdeps/com.sun.tools.javap |
32 * @build toolbox.ToolBox toolbox.JavacTask ModuleTestBase |
33 * @build ToolBox ModuleTestBase |
|
34 * @run main ServiceProvidedButNotExportedOrUsedTest |
33 * @run main ServiceProvidedButNotExportedOrUsedTest |
35 */ |
34 */ |
36 |
35 |
37 import java.nio.file.Files; |
36 import java.nio.file.Files; |
38 import java.nio.file.Path; |
37 import java.nio.file.Path; |
39 import java.util.Arrays; |
38 import java.util.Arrays; |
40 import java.util.List; |
39 import java.util.List; |
|
40 |
|
41 import toolbox.JavacTask; |
|
42 import toolbox.Task; |
|
43 import toolbox.ToolBox; |
41 |
44 |
42 public class ServiceProvidedButNotExportedOrUsedTest extends ModuleTestBase { |
45 public class ServiceProvidedButNotExportedOrUsedTest extends ModuleTestBase { |
43 public static void main(String... args) throws Exception { |
46 public static void main(String... args) throws Exception { |
44 ServiceProvidedButNotExportedOrUsedTest t = new ServiceProvidedButNotExportedOrUsedTest(); |
47 ServiceProvidedButNotExportedOrUsedTest t = new ServiceProvidedButNotExportedOrUsedTest(); |
45 t.runTests(); |
48 t.runTests(); |
53 "package p1; public class C1 { }", |
56 "package p1; public class C1 { }", |
54 "package p2; public class C2 extends p1.C1 { }"); |
57 "package p2; public class C2 extends p1.C1 { }"); |
55 Path classes = base.resolve("classes"); |
58 Path classes = base.resolve("classes"); |
56 Files.createDirectories(classes); |
59 Files.createDirectories(classes); |
57 |
60 |
58 List<String> output = tb.new JavacTask() |
61 List<String> output = new JavacTask(tb) |
59 .outdir(classes) |
62 .outdir(classes) |
60 .options("-Werror", "-XDrawDiagnostics") |
63 .options("-Werror", "-XDrawDiagnostics") |
61 .files(findJavaFiles(src)) |
64 .files(findJavaFiles(src)) |
62 .run(ToolBox.Expect.FAIL) |
65 .run(Task.Expect.FAIL) |
63 .writeAll() |
66 .writeAll() |
64 .getOutputLines(ToolBox.OutputKind.DIRECT); |
67 .getOutputLines(Task.OutputKind.DIRECT); |
65 List<String> expected = Arrays.asList( |
68 List<String> expected = Arrays.asList( |
66 "module-info.java:1:12: compiler.warn.service.provided.but.not.exported.or.used: p1.C1", |
69 "module-info.java:1:12: compiler.warn.service.provided.but.not.exported.or.used: p1.C1", |
67 "- compiler.err.warnings.and.werror", |
70 "- compiler.err.warnings.and.werror", |
68 "1 error", |
71 "1 error", |
69 "1 warning"); |
72 "1 warning"); |
84 "module m3 { requires m1; exports p2; }", |
87 "module m3 { requires m1; exports p2; }", |
85 "package p2; public class C2 extends p1.C1 { }"); |
88 "package p2; public class C2 extends p1.C1 { }"); |
86 Path modules = base.resolve("modules"); |
89 Path modules = base.resolve("modules"); |
87 Files.createDirectories(modules); |
90 Files.createDirectories(modules); |
88 |
91 |
89 List<String> output = tb.new JavacTask() |
92 List<String> output = new JavacTask(tb) |
90 .options("-XDrawDiagnostics", "-modulesourcepath", src.toString()) |
93 .options("-XDrawDiagnostics", "-modulesourcepath", src.toString()) |
91 .outdir(modules) |
94 .outdir(modules) |
92 .files(findJavaFiles(src)) |
95 .files(findJavaFiles(src)) |
93 .run(ToolBox.Expect.FAIL) |
96 .run(Task.Expect.FAIL) |
94 .writeAll() |
97 .writeAll() |
95 .getOutputLines(ToolBox.OutputKind.DIRECT); |
98 .getOutputLines(Task.OutputKind.DIRECT); |
96 List<String> expected = Arrays.asList( |
99 List<String> expected = Arrays.asList( |
97 "module-info.java:1:39: compiler.err.service.implementation.not.in.right.module: m3", |
100 "module-info.java:1:39: compiler.err.service.implementation.not.in.right.module: m3", |
98 "1 error"); |
101 "1 error"); |
99 if (!output.containsAll(expected)) { |
102 if (!output.containsAll(expected)) { |
100 throw new Exception("Expected output not found"); |
103 throw new Exception("Expected output not found"); |