mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 15:24:43 +02:00
8241519: javac crashes with wrong module-info.class in module path
If module-info.class is broken, mark the corresponding ModuleSymbol as erroneous. Reviewed-by: jjg
This commit is contained in:
parent
1adecc8e3a
commit
04ad75e788
2 changed files with 60 additions and 7 deletions
|
@ -630,15 +630,19 @@ public class Modules extends JCTree.Visitor {
|
||||||
|
|
||||||
if (msym.kind == ERR) {
|
if (msym.kind == ERR) {
|
||||||
//make sure the module is initialized:
|
//make sure the module is initialized:
|
||||||
msym.directives = List.nil();
|
initErrModule(msym);
|
||||||
msym.exports = List.nil();
|
|
||||||
msym.provides = List.nil();
|
|
||||||
msym.requires = List.nil();
|
|
||||||
msym.uses = List.nil();
|
|
||||||
} else if ((msym.flags_field & Flags.AUTOMATIC_MODULE) != 0) {
|
} else if ((msym.flags_field & Flags.AUTOMATIC_MODULE) != 0) {
|
||||||
setupAutomaticModule(msym);
|
setupAutomaticModule(msym);
|
||||||
} else {
|
} else {
|
||||||
msym.module_info.complete();
|
try {
|
||||||
|
msym.module_info.complete();
|
||||||
|
} catch (CompletionFailure cf) {
|
||||||
|
msym.kind = ERR;
|
||||||
|
//make sure the module is initialized:
|
||||||
|
initErrModule(msym);
|
||||||
|
completeModule(msym);
|
||||||
|
throw cf;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If module-info comes from a .java file, the underlying
|
// If module-info comes from a .java file, the underlying
|
||||||
|
@ -653,6 +657,14 @@ public class Modules extends JCTree.Visitor {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void initErrModule(ModuleSymbol msym) {
|
||||||
|
msym.directives = List.nil();
|
||||||
|
msym.exports = List.nil();
|
||||||
|
msym.provides = List.nil();
|
||||||
|
msym.requires = List.nil();
|
||||||
|
msym.uses = List.nil();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "mainCompleter";
|
return "mainCompleter";
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @test
|
* @test
|
||||||
* @bug 8154283 8167320 8171098 8172809 8173068 8173117 8176045 8177311
|
* @bug 8154283 8167320 8171098 8172809 8173068 8173117 8176045 8177311 8241519
|
||||||
* @summary tests for multi-module mode compilation
|
* @summary tests for multi-module mode compilation
|
||||||
* @library /tools/lib
|
* @library /tools/lib
|
||||||
* @modules
|
* @modules
|
||||||
|
@ -996,4 +996,45 @@ public class EdgeCases extends ModuleTestBase {
|
||||||
.writeAll();
|
.writeAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testMisnamedModuleInfoClass(Path base) throws Exception {
|
||||||
|
Path src = base.resolve("src");
|
||||||
|
Path a = src.resolve("a");
|
||||||
|
tb.writeJavaFiles(a,
|
||||||
|
"module a {}");
|
||||||
|
Path b = src.resolve("b");
|
||||||
|
tb.writeJavaFiles(b,
|
||||||
|
"module b { uses com.example.c; }");
|
||||||
|
Path classes = base.resolve("classes");
|
||||||
|
tb.createDirectories(classes);
|
||||||
|
Path aClasses = classes.resolve("x");
|
||||||
|
tb.createDirectories(aClasses);
|
||||||
|
|
||||||
|
new JavacTask(tb)
|
||||||
|
.outdir(aClasses)
|
||||||
|
.files(findJavaFiles(a))
|
||||||
|
.run()
|
||||||
|
.writeAll();
|
||||||
|
|
||||||
|
Path bClasses = classes.resolve("b");
|
||||||
|
tb.createDirectories(bClasses);
|
||||||
|
|
||||||
|
List<String> log;
|
||||||
|
|
||||||
|
log = new JavacTask(tb)
|
||||||
|
.outdir(bClasses)
|
||||||
|
.options("-p", classes.toString(),
|
||||||
|
"-XDrawDiagnostics")
|
||||||
|
.files(findJavaFiles(b))
|
||||||
|
.run(Task.Expect.FAIL)
|
||||||
|
.writeAll()
|
||||||
|
.getOutputLines(Task.OutputKind.DIRECT);
|
||||||
|
|
||||||
|
List<String> expected = List.of("module-info.java:1:28: compiler.err.doesnt.exist: com.example",
|
||||||
|
"1 error");
|
||||||
|
|
||||||
|
if (!expected.equals(log))
|
||||||
|
throw new Exception("expected output not found: " + log);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue