diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java index d05766095eb3..bcb33a90d862 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java @@ -1377,11 +1377,11 @@ public class HighlightUtil extends HighlightUtilBase { String symbolName = HighlightMessageUtil.getSymbolName(refElement, result.getSubstitutor()); if (refElement.hasModifierProperty(PsiModifier.PRIVATE)) { - String containerName = HighlightMessageUtil.getSymbolName(refElement.getParent(), result.getSubstitutor()); + String containerName = getContainerName(refElement, result.getSubstitutor()); return JavaErrorMessages.message("private.symbol", symbolName, containerName); } else if (refElement.hasModifierProperty(PsiModifier.PROTECTED)) { - String containerName = HighlightMessageUtil.getSymbolName(refElement.getParent(), result.getSubstitutor()); + String containerName = getContainerName(refElement, result.getSubstitutor()); return JavaErrorMessages.message("protected.symbol", symbolName, containerName); } else { @@ -1391,17 +1391,32 @@ public class HighlightUtil extends HighlightUtilBase { symbolName = HighlightMessageUtil.getSymbolName(refElement, result.getSubstitutor()); } if (refElement.hasModifierProperty(PsiModifier.PACKAGE_LOCAL) || packageLocalClass != null) { - String containerName = HighlightMessageUtil.getSymbolName(refElement.getParent(), result.getSubstitutor()); + String containerName = getContainerName(refElement, result.getSubstitutor()); return JavaErrorMessages.message("package.local.symbol", symbolName, containerName); } else { - PsiElement symbol = refElement instanceof PsiTypeParameter ? refElement.getParent().getParent() : refElement.getParent(); - String containerName = symbol == null ? "?" : HighlightMessageUtil.getSymbolName(symbol, result.getSubstitutor()); + String containerName = getContainerName(refElement, result.getSubstitutor()); return JavaErrorMessages.message("visibility.access.problem", symbolName, containerName); } } } + private static PsiElement getContainer(PsiModifierListOwner refElement) { + if (refElement instanceof PsiTypeParameter) return refElement.getParent().getParent(); + if (refElement instanceof PsiClass) { + final PsiClass containingClass = ((PsiClass)refElement).getContainingClass(); + if (containingClass != null) return containingClass; + return refElement.getContainingFile(); + } + if (refElement instanceof PsiMember) return ((PsiMember)refElement).getContainingClass(); + return refElement.getParent(); + } + + private static String getContainerName(PsiModifierListOwner refElement, final PsiSubstitutor substitutor) { + final PsiElement container = getContainer(refElement); + return container == null ? "?" : HighlightMessageUtil.getSymbolName(container, substitutor); + } + @Nullable static HighlightInfo checkValidArrayAccessExpression(@NotNull PsiArrayAccessExpression arrayAccessExpression) { final PsiExpression arrayExpression = arrayAccessExpression.getArrayExpression(); diff --git a/plugins/groovy/testdata/highlighting/GrDefFieldsArePrivateInJavaCode.java b/plugins/groovy/testdata/highlighting/GrDefFieldsArePrivateInJavaCode.java index c4961d7da7a3..4b0c0e350242 100644 --- a/plugins/groovy/testdata/highlighting/GrDefFieldsArePrivateInJavaCode.java +++ b/plugins/groovy/testdata/highlighting/GrDefFieldsArePrivateInJavaCode.java @@ -1,5 +1,5 @@ public class GrDefFieldsArePrivateInJavaCode { public static void main(String[] args) { - System.out.println(new X().x); + System.out.println(new X().x); } } \ No newline at end of file