8384229: Previously accepted code is rejected after JDK-8378102

Reviewed-by: vromero
This commit is contained in:
Jan Lahoda 2026-05-21 04:40:37 +00:00
parent 11619700ca
commit e50c413bb7
2 changed files with 66 additions and 5 deletions

View File

@ -2358,8 +2358,9 @@ public class Resolve {
bestSoFar != sym) {
return new AmbiguityError(bestSoFar, sym);
} else if (env.toplevel.namedImportScope == scope &&
(sym == typeNotFound || (sym.kind == ERR && s.kind == ERR))) {
bestSoFar = bestOf(bestSoFar, new UnresolvableGobalSymbolError(s));
((sym == typeNotFound && s.kind.matches(KindSelector.TYP)) ||
(sym.kind == ERR && s.kind == ERR))) {
bestSoFar = bestOf(bestSoFar, new UnresolvableGlobalSymbolError(s));
} else
bestSoFar = bestOf(bestSoFar, sym);
}
@ -4157,9 +4158,9 @@ public class Resolve {
List<Type> typeargtypes);
}
class UnresolvableGobalSymbolError extends InvalidSymbolError {
class UnresolvableGlobalSymbolError extends InvalidSymbolError {
UnresolvableGobalSymbolError(Symbol sym) {
UnresolvableGlobalSymbolError(Symbol sym) {
super(HIDDEN, sym, "unresolvable class error");
this.name = sym.name;
}

View File

@ -23,7 +23,7 @@
/*
* @test
* @bug 8301580 8322159 8333107 8332230 8338678 8351260 8366196 8372336 8373094
* @bug 8301580 8322159 8333107 8332230 8338678 8351260 8366196 8372336 8373094 8384229
* @summary Verify error recovery w.r.t. Attr
* @library /tools/lib
* @modules jdk.compiler/com.sun.tools.javac.api
@ -800,6 +800,66 @@ public class AttrRecovery {
assertEquals(expected, actual);
}
@Test //JDK-8384229
public void testStaticFieldTypeLookup() throws Exception {
Path out = base.resolve("out");
Files.createDirectories(out);
new JavacTask(tb)
.options("-XDrawDiagnostics",
"-XDdev")
.sources("""
package test;
import static test.A.Object;
enum A {
Object;
}
class Test {
void foo() {
Object f = "";
}
}
""")
.outdir(out)
.run()
.writeAll();
new JavacTask(tb)
.options("-XDrawDiagnostics",
"-XDdev")
.sources("""
package test;
import static test.A.Object;
enum A {
Object;
}
class Test {
private static final Object f = "";
}
""")
.outdir(out)
.run()
.writeAll();
new JavacTask(tb)
.options("-XDrawDiagnostics",
"-XDdev")
.sources("""
package test;
import static test.A.Object;
class A {
public static java.lang.Object Object() { return null; }
}
class Test {
private static final Object f = Object();
}
""")
.outdir(out)
.run()
.writeAll();
}
@BeforeEach
public void setUp(TestInfo info) throws IOException {
base = Path.of(info.getTestMethod().orElseThrow().getName());