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