move inner: avoid suspicious warnings (IDEA-234943)

GitOrigin-RevId: 4d1a7e3d829649e5ab4c6225ece1608db0614d03
This commit is contained in:
Anna Kozlova
2020-03-16 09:15:50 +01:00
committed by intellij-monorepo-bot
parent 3e3f251e55
commit 986ac7d7fc
6 changed files with 42 additions and 19 deletions

View File

@@ -411,9 +411,14 @@ public class MoveInnerProcessor extends BaseRefactoringProcessor {
final String visibilityModifier = VisibilityUtil.getVisibilityModifier(element.getModifierList());
if (PsiModifier.PRIVATE.equals(visibilityModifier)) return true;
if (PsiModifier.PUBLIC.equals(visibilityModifier)) return false;
if (PsiModifier.PROTECTED.equals(visibilityModifier) &&
InheritanceUtil.isInheritorOrSelf(myInnerClass, myOuterClass, true)) {
return false;
if (PsiModifier.PROTECTED.equals(visibilityModifier)) {
if (InheritanceUtil.isInheritorOrSelf(myInnerClass, myOuterClass, true)) {
return false;
}
PsiClass memberClass = element.getContainingClass();
if (memberClass != null && InheritanceUtil.hasEnclosingInstanceInScope(memberClass, myInnerClass, true, false)) {
return false;
}
}
final JavaPsiFacade psiFacade = JavaPsiFacade.getInstance(myProject);
if (myTargetContainer instanceof PsiDirectory) {

View File

@@ -0,0 +1,12 @@
package package1;
import package2.InnerClass;
public class AnotherPublic {
protected void foo(){}
}
class OuterClass {
private InnerClass instance = new InnerClass();
}

View File

@@ -1,8 +0,0 @@
package package1;
import package2.InnerClass;
public class OuterClass {
private InnerClass instance = new InnerClass();
}

View File

@@ -1,3 +1,9 @@
package package2;
public class InnerClass { }
import package1.AnotherPublic;
public class InnerClass extends AnotherPublic {
{
foo();
}
}

View File

@@ -0,0 +1,15 @@
package package1;
public class AnotherPublic {
protected void foo(){}
}
class OuterClass {
private InnerClass instance = new InnerClass();
private static class InnerClass extends AnotherPublic {
{
foo();
}
}
}

View File

@@ -1,7 +0,0 @@
package package1;
public class OuterClass {
private InnerClass instance = new InnerClass();
private static class InnerClass { }
}