Skip to content

Commit e15912b

Browse files
committedDec 4, 2024
8345248: Module name 'transitive' not accepted for requires transitive
Reviewed-by: vromero
1 parent 521ed72 commit e15912b

File tree

2 files changed

+107
-4
lines changed

2 files changed

+107
-4
lines changed
 

‎src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -4208,16 +4208,16 @@ List<JCDirective> moduleDirectiveList() {
42084208
while (true) {
42094209
switch (token.kind) {
42104210
case IDENTIFIER:
4211-
if (token.name() == names.transitive && !isTransitive) {
4211+
if (token.name() == names.transitive) {
42124212
Token t1 = S.token(1);
42134213
if (t1.kind == SEMI || t1.kind == DOT) {
42144214
break loop;
42154215
}
4216+
if (isTransitive) {
4217+
log.error(DiagnosticFlag.SYNTAX, token.pos, Errors.RepeatedModifier);
4218+
}
42164219
isTransitive = true;
42174220
break;
4218-
} else if (token.name() == names.transitive && isTransitive) {
4219-
log.error(DiagnosticFlag.SYNTAX, token.pos, Errors.RepeatedModifier);
4220-
break;
42214221
} else {
42224222
break loop;
42234223
}

‎test/langtools/tools/javac/modules/RequiresTransitiveTest.java

+103
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
/*
2525
* @test
26+
* @bug 8345248
2627
* @summary tests for "requires transitive"
2728
* @library /tools/lib
2829
* @modules
@@ -34,6 +35,8 @@
3435

3536
import java.nio.file.Files;
3637
import java.nio.file.Path;
38+
import java.util.List;
39+
import java.util.Objects;
3740

3841
import toolbox.JavacTask;
3942
import toolbox.Task;
@@ -256,4 +259,104 @@ public void testRepeatedModifiers(Path base) throws Exception {
256259
throw new Exception("expected output not found: " + e);
257260
}
258261
}
262+
263+
@Test //JDK-8345248:
264+
public void testTransitiveModuleName(Path base) throws Exception {
265+
Path lib = base.resolve("lib");
266+
Path libSrc = lib.resolve("src");
267+
Path transitive = libSrc.resolve("transitive");
268+
tb.writeJavaFiles(transitive,
269+
"""
270+
module transitive {
271+
}
272+
"""
273+
);
274+
Path transitiveA = libSrc.resolve("transitive.a");
275+
tb.writeJavaFiles(transitiveA,
276+
"""
277+
module transitive.a {
278+
}
279+
"""
280+
);
281+
282+
Path libClasses = lib.resolve("classes");
283+
Files.createDirectories(libClasses);
284+
285+
new JavacTask(tb, Task.Mode.CMDLINE)
286+
.options("--module-source-path", libSrc.toString())
287+
.files(findJavaFiles(libSrc))
288+
.outdir(libClasses)
289+
.run()
290+
.writeAll();
291+
292+
Path src = base.resolve("src");
293+
Path classes = base.resolve("classes");
294+
295+
Files.createDirectories(classes);
296+
297+
tb.writeJavaFiles(src,
298+
"""
299+
module m {
300+
requires transitive;
301+
requires transitive.a;
302+
}
303+
"""
304+
);
305+
306+
new JavacTask(tb, Task.Mode.CMDLINE)
307+
.options("--module-path", libClasses.toString())
308+
.sourcepath(src)
309+
.files(findJavaFiles(src))
310+
.outdir(classes)
311+
.run()
312+
.writeAll();
313+
314+
tb.writeJavaFiles(src,
315+
"""
316+
module m {
317+
requires transitive transitive;
318+
requires transitive transitive.a;
319+
}
320+
"""
321+
);
322+
323+
new JavacTask(tb, Task.Mode.CMDLINE)
324+
.options("--module-path", libClasses.toString())
325+
.sourcepath(src)
326+
.files(findJavaFiles(src))
327+
.outdir(classes)
328+
.run()
329+
.writeAll();
330+
331+
tb.writeJavaFiles(src,
332+
"""
333+
module m {
334+
requires transitive transitive transitive;
335+
requires transitive transitive transitive.a;
336+
}
337+
"""
338+
);
339+
340+
List<String> log = new JavacTask(tb, Task.Mode.CMDLINE)
341+
.options("--module-path", libClasses.toString(),
342+
"-XDrawDiagnostics")
343+
.sourcepath(src)
344+
.files(findJavaFiles(src))
345+
.outdir(classes)
346+
.run(Task.Expect.FAIL)
347+
.writeAll()
348+
.getOutputLines(Task.OutputKind.DIRECT);
349+
350+
351+
List<String> expected = List.of(
352+
"module-info.java:2:25: compiler.err.repeated.modifier",
353+
"module-info.java:3:25: compiler.err.repeated.modifier",
354+
"2 errors"
355+
);
356+
357+
if (!Objects.equals(expected, log)) {
358+
throw new Exception("expected: " + expected +
359+
", but got: " + log);
360+
}
361+
}
259362
}

0 commit comments

Comments
 (0)
Please sign in to comment.