mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
check annotation params accessibility (IDEA-108584)
This commit is contained in:
+19
-5
@@ -412,19 +412,33 @@ public class AnnotationsHighlightUtil {
|
||||
super.visitElement(element);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitClassObjectAccessExpression(PsiClassObjectAccessExpression expression) {
|
||||
super.visitClassObjectAccessExpression(expression);
|
||||
final PsiTypeElement operand = expression.getOperand();
|
||||
final PsiClass classType = PsiUtil.resolveClassInType(operand.getType());
|
||||
if (classType != null) {
|
||||
checkAccessibility(expression, classType, HighlightUtil.formatClass(classType));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitReferenceExpression(PsiReferenceExpression expression) {
|
||||
super.visitReferenceExpression(expression);
|
||||
final PsiElement resolve = expression.resolve();
|
||||
if (resolve instanceof PsiField &&
|
||||
((PsiMember)resolve).hasModifierProperty(PsiModifier.PRIVATE) &&
|
||||
if (resolve instanceof PsiField) {
|
||||
checkAccessibility(expression, (PsiMember)resolve, HighlightUtil.formatField((PsiField)resolve));
|
||||
}
|
||||
}
|
||||
|
||||
private void checkAccessibility(PsiExpression expression, PsiMember resolve, String memberString) {
|
||||
if (resolve.hasModifierProperty(PsiModifier.PRIVATE) &&
|
||||
PsiTreeUtil.isAncestor(parent, resolve, true)) {
|
||||
String description = JavaErrorMessages.message("private.symbol",
|
||||
HighlightUtil.formatField((PsiField)resolve),
|
||||
memberString,
|
||||
HighlightUtil.formatClass((PsiClass)parent));
|
||||
HighlightInfo result =
|
||||
infos[0] =
|
||||
HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(expression).descriptionAndTooltip(description).create();
|
||||
infos[0] = result;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
@SomeAnnotation(<error descr="'Foo.Bar' has private access in 'Foo'">Foo.Bar.class</error>)
|
||||
public class Foo{
|
||||
private static class Bar {
|
||||
}
|
||||
}
|
||||
@interface SomeAnnotation {
|
||||
Class value();
|
||||
}
|
||||
+1
@@ -56,4 +56,5 @@ public class LightAdvHighlightingJdk6Test extends LightDaemonAnalyzerTestCase {
|
||||
public void testMethodReturnTypeSubstitutability() { setLanguageLevel(LanguageLevel.JDK_1_6); doTest(true, false); }
|
||||
public void testIDEADEV11877() throws Exception { setLanguageLevel(LanguageLevel.JDK_1_6); doTest(false, false); }
|
||||
public void testIDEA108285() throws Exception { setLanguageLevel(LanguageLevel.JDK_1_6); doTest(false, false); }
|
||||
public void testClassObjectAccessibility() throws Exception { setLanguageLevel(LanguageLevel.JDK_1_6); doTest(false, false); }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user