IDEA-96016 Exception while moving java class referencing Groovy class with light constructor

This commit is contained in:
Max Medvedev
2012-11-30 15:11:27 +04:00
parent 823d45d90c
commit 2bd992df6b
2 changed files with 21 additions and 6 deletions
@@ -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();
@@ -1,5 +1,5 @@
public class GrDefFieldsArePrivateInJavaCode {
public static void main(String[] args) {
System.out.println(new X().<error descr="'x' has private access in 'null'">x</error>);
System.out.println(new X().<error descr="'x' has private access in 'X'">x</error>);
}
}