diff options
Diffstat (limited to 'java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java')
-rw-r--r-- | java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java index 0dc8e3df8fec..7404d1fbfae3 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java @@ -1181,7 +1181,7 @@ public class HighlightUtil extends HighlightUtilBase { final PsiType caughtType = parameter.getType(); if (caughtType instanceof PsiClassType) { HighlightInfo info = checkSimpleCatchParameter(parameter, thrownTypes, (PsiClassType)caughtType); - return info == null ? null : Collections.<HighlightInfo>singletonList(info); + return info == null ? null : Collections.singletonList(info); } if (caughtType instanceof PsiDisjunctionType) { return checkMultiCatchParameter(parameter, thrownTypes); @@ -1796,12 +1796,19 @@ public class HighlightUtil extends HighlightUtilBase { */ @Nullable public static HighlightInfo checkIllegalForwardReferenceToField(@NotNull PsiReferenceExpression expression, @NotNull PsiField referencedField) { + final Boolean isIllegalForwardReference = isIllegalForwardReferenceToField(expression, referencedField, false); + if (isIllegalForwardReference == null) return null; + String description = isIllegalForwardReference ? JavaErrorMessages.message("illegal.forward.reference") : JavaErrorMessages.message("illegal.self.reference"); + return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(expression).descriptionAndTooltip(description).create(); + } + + public static Boolean isIllegalForwardReferenceToField(@NotNull PsiReferenceExpression expression, @NotNull PsiField referencedField, boolean acceptQualified) { PsiClass containingClass = referencedField.getContainingClass(); if (containingClass == null) return null; if (expression.getContainingFile() != referencedField.getContainingFile()) return null; if (expression.getTextRange().getStartOffset() >= referencedField.getTextRange().getEndOffset()) return null; // only simple reference can be illegal - if (expression.getQualifierExpression() != null) return null; + if (!acceptQualified && expression.getQualifierExpression() != null) return null; PsiField initField = findEnclosingFieldInitializer(expression); PsiClassInitializer classInitializer = findParentClassInitializer(expression); if (initField == null && classInitializer == null) return null; @@ -1814,8 +1821,7 @@ public class HighlightUtil extends HighlightUtilBase { if (!containingClass.getManager().areElementsEquivalent(containingClass, PsiTreeUtil.getParentOfType(expression, PsiClass.class))) { return null; } - String description = JavaErrorMessages.message("illegal.forward.reference"); - return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(expression).descriptionAndTooltip(description).create(); + return initField != referencedField; } /** |