diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java index 692ccefa69e..27d6e73fa45 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java @@ -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 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; } diff --git a/test/langtools/tools/javac/recovery/AttrRecovery.java b/test/langtools/tools/javac/recovery/AttrRecovery.java index bd74eb6c3f0..64aaad2a184 100644 --- a/test/langtools/tools/javac/recovery/AttrRecovery.java +++ b/test/langtools/tools/javac/recovery/AttrRecovery.java @@ -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());