void (@NotNull PsiReferenceExpression expression) { JavaResolveResult resultForIncompleteCode = doVisitReferenceElement(expression); if (!hasErrorResults()) { visitExpression(expression); if (hasErrorResults()) return; } JavaResolveResult[] results = resolveOptimised(expression); if (results == null) return; JavaResolveResult result = results.length == 1 ? results[0] : JavaResolveResult.EMPTY; PsiElement resolved = result.getElement(); if (resolved instanceof PsiVariable variable && resolved.getContainingFile() == expression.getContainingFile()) { boolean isFinal = variable.hasModifierProperty(PsiModifier.FINAL); if (isFinal && !variable.hasInitializer() && !(variable instanceof PsiPatternVariable)) { if (!hasErrorResults()) { add(HighlightControlFlowUtil.checkFinalVariableMightAlreadyHaveBeenAssignedTo(variable, expression, myFinalVarProblems)); } } if (!hasErrorResults()) { try { add(HighlightControlFlowUtil.checkVariableInitializedBeforeUsage(expression, variable, myUninitializedVarProblems, myFile)); } catch (IndexNotReadyException ignored) { } } if (!hasErrorResults() && resolved instanceof PsiLocalVariable) { add(HighlightUtil.checkVarTypeSelfReferencing((PsiLocalVariable)resolved, expression)); } } PsiElement parent = expression.getParent(); if (parent instanceof PsiMethodCallExpression methodCallExpression && ((PsiMethodCallExpression)parent).getMethodExpression() == expression && (!result.isAccessible() || !result.isStaticsScopeCorrect())) { PsiExpressionList list = methodCallExpression.getArgumentList(); PsiResolveHelper resolveHelper = getResolveHelper(getProject()); if (!HighlightMethodUtil.isDummyConstructorCall(methodCallExpression, resolveHelper, list, expression)) { try { add(HighlightMethodUtil.checkAmbiguousMethodCallIdentifier( expression, results, list, resolved, result, methodCallExpression, resolveHelper, myLanguageLevel, myFile)); if (!PsiTreeUtil.findChildrenOfType(methodCallExpression.getArgumentList(), PsiLambdaExpression.class).isEmpty()) { PsiElement nameElement = expression.getReferenceNameElement(); if (nameElement != null) { add(HighlightMethodUtil.checkAmbiguousMethodCallArguments( expression, results, list, resolved, result, methodCallExpression, resolveHelper, nameElement)); } } } catch (IndexNotReadyException ignored) { } } } if (!hasErrorResults() && resultForIncompleteCode != null && HighlightingFeature.PATTERNS_IN_SWITCH.isAvailable(expression)) { add(HighlightUtil.checkPatternVariableRequired(expression, resultForIncompleteCode)); } if (!hasErrorResults() && resultForIncompleteCode != null) { add(HighlightUtil.checkExpressionRequired(expression, resultForIncompleteCode, myFile)); } if (!hasErrorResults() && resolved instanceof PsiField) { try { add(HighlightUtil.checkIllegalForwardReferenceToField(expression, (PsiField)resolved)); } catch (IndexNotReadyException ignored) { } } if (!hasErrorResults()) add(GenericsHighlightUtil.checkAccessStaticFieldFromEnumConstructor(expression, result)); if (!hasErrorResults()) add(HighlightUtil.checkClassReferenceAfterQualifier(expression, resolved)); PsiExpression qualifierExpression = expression.getQualifierExpression(); add(HighlightUtil.checkUnqualifiedSuperInDefaultMethod(myLanguageLevel, expression, qualifierExpression)); if (!hasErrorResults() && myJavaModule == null && qualifierExpression != null) { if (parent instanceof PsiMethodCallExpression) { PsiClass psiClass = RefactoringChangeUtil.getQualifierClass(expression); if (psiClass != null) { add(GenericsHighlightUtil.checkClassSupersAccessibility(psiClass, expression, myFile.getResolveScope())); } } if (!hasErrorResults()) { add(GenericsHighlightUtil.checkMemberSignatureTypesAccessibility(expression)); } } if (!hasErrorResults() && resolved instanceof PsiModifierListOwner) { HighlightingFeature.checkPreviewFeature(expression, myPreviewFeatureVisitor); } }