[java-highlighting] IDEA-340604 Improve an error message for unresolved references for implicit classes

GitOrigin-RevId: a4f319c4e48053ec57bce1e171f61d665154ed55
This commit is contained in:
Mikhail Pyltsin
2023-12-14 16:52:17 +01:00
committed by intellij-monorepo-bot
parent d97f659b90
commit 58e3af039d
4 changed files with 16 additions and 0 deletions

View File

@@ -38,6 +38,7 @@ import com.intellij.psi.*;
import com.intellij.psi.codeStyle.VariableKind;
import com.intellij.psi.impl.PsiImplUtil;
import com.intellij.psi.impl.PsiSuperMethodImplUtil;
import com.intellij.psi.impl.java.stubs.index.JavaImplicitClassIndex;
import com.intellij.psi.impl.light.LightRecordMethod;
import com.intellij.psi.impl.source.resolve.JavaResolveUtil;
import com.intellij.psi.impl.source.resolve.graphInference.InferenceSession;
@@ -3476,6 +3477,9 @@ public final class HighlightUtil {
primitiveType.getPresentableText(false));
}
}
if (!JavaImplicitClassIndex.getInstance().getElements(ref.getQualifiedName(), ref.getProject(), ref.getResolveScope()).isEmpty()) {
description = JavaErrorBundle.message("implicit.class.can.not.be.referenced", ref.getText());
}
}
HighlightInfo.Builder info =

View File

@@ -316,6 +316,7 @@ marked.for.removal.symbol.since=''{0}'' is deprecated since version {1} and mark
qualifier.must.be.expression=Qualifier must be an expression
cannot.resolve.symbol=Cannot resolve symbol ''{0}''
cannot.access.member.on.type=Cannot access member because ''{0}'' has primitive type {1}
implicit.class.can.not.be.referenced=Implicitly declared class ''{0}'' cannot be referenced
cannot.call.method.on.type=Cannot call method because ''{0}'' has primitive type {1}
class.is.already.defined.in.single.static.import=Class ''{0}'' is already defined in a single static import
class.is.ambiguous.in.single.static.import=Class ''{0}'' is ambiguous in a single static import

View File

@@ -0,0 +1,5 @@
<error descr="Implicitly declared class 'ReferenceToImplicitClass' cannot be referenced">ReferenceToImplicitClass</error> a;
public static void main(String[] args) {
Class<<error descr="Implicitly declared class 'ReferenceToImplicitClass' cannot be referenced">ReferenceToImplicitClass</error>> stringClass = <error descr="Implicitly declared class 'ReferenceToImplicitClass' cannot be referenced">ReferenceToImplicitClass</error>.class;
}

View File

@@ -451,4 +451,10 @@ public class LightAdvHighlightingTest extends LightDaemonAnalyzerTestCase {
public void testThisReferencedInnerClass() {
doTest(false);
}
public void testReferenceToImplicitClass() {
IdeaTestUtil.withLevel(getModule(), LanguageLevel.JDK_22_PREVIEW, () -> {
doTest(false);
});
}
}