From df2dbf02f7d20cb013492f284e81168db42e8237 Mon Sep 17 00:00:00 2001 From: nik Date: Wed, 10 Oct 2018 17:24:19 +0300 Subject: [PATCH] java: properly handle refs to protected inner classes in 'Suspicious package-private access' inspection (IDEA-200047) --- .../SuspiciousPackagePrivateAccessInspection.java | 6 +++--- .../dep/xxx/ProtectedMembers.java | 3 +++ .../src/AccessingProtectedMembers.java | 9 +++++++++ 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/dependency/SuspiciousPackagePrivateAccessInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/dependency/SuspiciousPackagePrivateAccessInspection.java index 779d5536f5f0..6821f79df882 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/dependency/SuspiciousPackagePrivateAccessInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/dependency/SuspiciousPackagePrivateAccessInspection.java @@ -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) { diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/dependency/suspicious_package_private_access/dep/xxx/ProtectedMembers.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/dependency/suspicious_package_private_access/dep/xxx/ProtectedMembers.java index fb80552024e0..3bae60a51cf9 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/dependency/suspicious_package_private_access/dep/xxx/ProtectedMembers.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/dependency/suspicious_package_private_access/dep/xxx/ProtectedMembers.java @@ -6,4 +6,7 @@ public class ProtectedMembers { static protected void staticMethod() { } + + protected static class StaticInner { + } } \ No newline at end of file diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/dependency/suspicious_package_private_access/src/AccessingProtectedMembers.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/dependency/suspicious_package_private_access/src/AccessingProtectedMembers.java index 23f339873cf3..09d2a28d15d4 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/dependency/suspicious_package_private_access/src/AccessingProtectedMembers.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/dependency/suspicious_package_private_access/src/AccessingProtectedMembers.java @@ -18,5 +18,14 @@ class AccessingProtectedMembersFromSubclass extends ProtectedMembers { aClass.method(); AccessingProtectedMembersFromSubclass myInstance = new AccessingProtectedMembersFromSubclass(); myInstance.method(); + + ProtectedMembers.StaticInner inner1; + StaticInner inner2; + } + + public static class StaticInnerImpl1 extends ProtectedMembers.StaticInner { + } + + public static class StaticInnerImpl2 extends StaticInner { } } \ No newline at end of file