mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-06 11:50:54 +07:00
[java] fixes receiver highlighting in local classes (IDEA-158752)
This commit is contained in:
@@ -33,6 +33,7 @@ import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.PsiImplUtil;
|
||||
import com.intellij.psi.impl.source.PsiClassReferenceType;
|
||||
import com.intellij.psi.impl.source.PsiImmediateClassType;
|
||||
import com.intellij.psi.util.ClassUtil;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.psi.util.TypeConversionUtil;
|
||||
@@ -157,7 +158,7 @@ public class AnnotationsHighlightUtil {
|
||||
final PsiClass psiClass = PsiUtil.resolveClassInType(type);
|
||||
if (psiClass != null && psiClass.isEnum() && !(expr instanceof PsiReferenceExpression && ((PsiReferenceExpression)expr).resolve() instanceof PsiEnumConstant)) {
|
||||
String description = JavaErrorMessages.message("annotation.non.enum.constant.attribute.value");
|
||||
return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(value).descriptionAndTooltip(description).create();
|
||||
return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(value).descriptionAndTooltip(description).create();
|
||||
}
|
||||
|
||||
if (type != null && TypeConversionUtil.areTypesAssignmentCompatible(expectedType, expr) ||
|
||||
@@ -754,7 +755,7 @@ public class AnnotationsHighlightUtil {
|
||||
|
||||
private static boolean isStatic(PsiModifierListOwner owner) {
|
||||
if (owner == null) return false;
|
||||
if (owner instanceof PsiClass && ((PsiClass)owner).getContainingClass() == null) return true;
|
||||
if (owner instanceof PsiClass && ClassUtil.isTopLevelClass((PsiClass)owner)) return true;
|
||||
PsiModifierList modifierList = owner.getModifierList();
|
||||
return modifierList != null && modifierList.hasModifierProperty(PsiModifier.STATIC);
|
||||
}
|
||||
|
||||
@@ -267,8 +267,12 @@ public class ClassUtil {
|
||||
return false;
|
||||
}
|
||||
|
||||
final PsiFile parentFile = aClass.getContainingFile();
|
||||
// do not select JspClass
|
||||
return parentFile != null && parentFile.getLanguage() == JavaLanguage.INSTANCE;
|
||||
PsiElement parent = aClass.getParent();
|
||||
if (parent instanceof PsiDeclarationStatement && parent.getParent() instanceof PsiCodeBlock) {
|
||||
return false;
|
||||
}
|
||||
|
||||
PsiFile parentFile = aClass.getContainingFile();
|
||||
return parentFile != null && parentFile.getLanguage() == JavaLanguage.INSTANCE; // do not select JspClass
|
||||
}
|
||||
}
|
||||
@@ -29,6 +29,12 @@ class C {
|
||||
void m4a(C C.this) { }
|
||||
void m4b(C <error descr="The receiver name does not match the enclosing class type">C.X.this</error>) { }
|
||||
|
||||
void m5() {
|
||||
class L {
|
||||
L(C C.this) { }
|
||||
}
|
||||
}
|
||||
|
||||
static void sm1(@TA Object <error descr="The receiver cannot be used in a static context">this</error>) { }
|
||||
|
||||
C(C <error descr="The receiver cannot be used in a static context">this</error>) { }
|
||||
|
||||
Reference in New Issue
Block a user