mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
kotlin: fix false positives for 'suspicious package-private access' inspection in object literal expressions in Kotlin
(IDEA-210216)
This commit is contained in:
+28
-1
@@ -24,13 +24,40 @@ class AccessingProtectedMembersFromSubclass : ProtectedMembers() {
|
||||
|
||||
var inner1: ProtectedMembers.StaticInner
|
||||
var inner2: StaticInner
|
||||
|
||||
val runnable = object : Runnable {
|
||||
override fun run() {
|
||||
method()
|
||||
staticMethod()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private val runnable = object : Runnable {
|
||||
override fun run() {
|
||||
method()
|
||||
staticMethod()
|
||||
}
|
||||
}
|
||||
|
||||
private val obj = object : StaticInner() {}
|
||||
|
||||
private class StaticInnerImpl1 : ProtectedMembers.StaticInner()
|
||||
|
||||
private class StaticInnerImpl2 : StaticInner()
|
||||
|
||||
private inner class OwnInnerClass {
|
||||
fun bar() {
|
||||
method()
|
||||
staticMethod()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class AccessingDefaultProtectedConstructorFromSubclass : ProtectedConstructors()
|
||||
|
||||
class AccessingProtectedConstructorFromSubclass : ProtectedConstructors(1)
|
||||
class AccessingProtectedConstructorFromSubclass : ProtectedConstructors(1)
|
||||
|
||||
val objectAccessingDefaultProtectedConstructorFromSubclass = object : ProtectedConstructors() {}
|
||||
|
||||
val objectAccessingProtectedConstructorFromSubclass = object : ProtectedConstructors(1) {}
|
||||
|
||||
+20
-1
@@ -228,7 +228,26 @@ public class SuspiciousPackagePrivateAccessInspection extends AbstractBaseUastLo
|
||||
PsiElement sourcePsi = sourceNode.getSourcePsi();
|
||||
UClass sourceClass = UastUtils.findContaining(sourcePsi, UClass.class);
|
||||
if (sourceClass == null) return false;
|
||||
return JavaResolveUtil.canAccessProtectedMember(member, memberClass, accessObjectType, sourceClass.getJavaPsi(), member.hasModifierProperty(PsiModifier.STATIC));
|
||||
return canAccessProtectedMember(member, memberClass, accessObjectType, member.hasModifierProperty(PsiModifier.STATIC),
|
||||
sourceClass);
|
||||
}
|
||||
|
||||
private static boolean canAccessProtectedMember(PsiMember member, PsiClass memberClass, PsiClass accessObjectType,
|
||||
boolean isMemberStatic, UClass sourceClass) {
|
||||
if (JavaResolveUtil.canAccessProtectedMember(member, memberClass, accessObjectType, sourceClass.getJavaPsi(), isMemberStatic)) {
|
||||
return true;
|
||||
}
|
||||
if (sourceClass instanceof UAnonymousClass && sourceClass.getJavaPsi().getContext() == null) {
|
||||
//workaround for KT-30752: KtLightClassForAnonymousDeclaration::getContext returns null for object literal expressions in some member initializers
|
||||
UElement uastParent = sourceClass.getUastParent();
|
||||
if (uastParent != null) {
|
||||
UClass parentClass = UastUtils.findContaining(uastParent.getSourcePsi(), UClass.class);
|
||||
if (parentClass != null) {
|
||||
return canAccessProtectedMember(member, memberClass, accessObjectType, isMemberStatic, parentClass);
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean isPackageLocalAccessSuspicious(Module sourceModule, Module targetModule) {
|
||||
|
||||
Reference in New Issue
Block a user