java: properly handle refs to protected inner classes in 'Suspicious package-private access' inspection (IDEA-200047)

This commit is contained in:
nik
2018-10-10 17:24:35 +03:00
parent ec3f07a594
commit df2dbf02f7
3 changed files with 15 additions and 3 deletions
@@ -149,10 +149,10 @@ public class SuspiciousPackagePrivateAccessInspection extends AbstractBaseUastLo
accessObjectType = (PsiClass)element;
}
UClass sourceClass = UastUtils.getParentOfType(sourceNode, UClass.class);
PsiElement sourcePsi = sourceNode.getSourcePsi();
PsiClass sourceClass = PsiTreeUtil.getParentOfType(sourcePsi, PsiClass.class);
if (sourceClass == null) return false;
PsiClass sourceClassJava = sourceClass.getJavaPsi();
return JavaResolveUtil.canAccessProtectedMember(member, memberClass, accessObjectType, sourceClassJava, member.hasModifierProperty(PsiModifier.STATIC));
return JavaResolveUtil.canAccessProtectedMember(member, memberClass, accessObjectType, sourceClass, member.hasModifierProperty(PsiModifier.STATIC));
}
private boolean isPackageLocalAccessSuspicious(Module sourceModule, Module targetModule) {
@@ -6,4 +6,7 @@ public class ProtectedMembers {
static protected void staticMethod() {
}
protected static class StaticInner {
}
}
@@ -18,5 +18,14 @@ class AccessingProtectedMembersFromSubclass extends ProtectedMembers {
aClass.<warning descr="Method ProtectedMembers.method() is protected and used not through a subclass here, but declared in a different module 'dep'">method</warning>();
AccessingProtectedMembersFromSubclass myInstance = new AccessingProtectedMembersFromSubclass();
myInstance.method();
ProtectedMembers.StaticInner inner1;
StaticInner inner2;
}
public static class StaticInnerImpl1 extends ProtectedMembers.StaticInner {
}
public static class StaticInnerImpl2 extends StaticInner {
}
}