mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
pull up: protect pulled class private members (IDEA-60729)
This commit is contained in:
@@ -124,6 +124,33 @@ public class PullUpHelper extends BaseRefactoringProcessor{
|
||||
if (info.isToAbstract() || willBeUsedInSubclass(modifierListOwner, movedMembers, myTargetSuperClass, mySourceClass)) {
|
||||
PsiUtil.setModifierProperty(modifierListOwner, PsiModifier.PROTECTED, true);
|
||||
}
|
||||
if (modifierListOwner instanceof PsiClass) {
|
||||
modifierListOwner.accept(new JavaRecursiveElementWalkingVisitor() {
|
||||
@Override
|
||||
public void visitMethod(PsiMethod method) {
|
||||
check(method);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitField(PsiField field) {
|
||||
check(field);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitClass(PsiClass aClass) {
|
||||
check(aClass);
|
||||
super.visitClass(aClass);
|
||||
}
|
||||
|
||||
private void check(PsiMember member) {
|
||||
if (member.hasModifierProperty(PsiModifier.PRIVATE)) {
|
||||
if (willBeUsedInSubclass(member, movedMembers, myTargetSuperClass, mySourceClass)) {
|
||||
PsiUtil.setModifierProperty(member, PsiModifier.PROTECTED, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
ChangeContextUtil.encodeContextInfo(info.getMember(), true);
|
||||
}
|
||||
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
public class B extends A {
|
||||
private void f(){
|
||||
new C();
|
||||
}
|
||||
<caret>
|
||||
private static class C{
|
||||
private C(){
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//A.java
|
||||
class A {
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
public class B extends A {
|
||||
private void f(){
|
||||
new C();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//A.java
|
||||
class A {
|
||||
protected static class C{
|
||||
protected C(){
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -42,6 +42,10 @@ public class PullUpTest extends LightCodeInsightTestCase {
|
||||
doTest(new RefactoringTestUtil.MemberDescriptor("C", PsiClass.class),
|
||||
new RefactoringTestUtil.MemberDescriptor("D", PsiClass.class));
|
||||
}
|
||||
|
||||
public void testPullUpPrivateInnerClassWithPrivateConstructor() throws Exception {
|
||||
doTest(new RefactoringTestUtil.MemberDescriptor("C", PsiClass.class));
|
||||
}
|
||||
|
||||
public void testPullUpAndAbstractize() throws Exception {
|
||||
doTest(new RefactoringTestUtil.MemberDescriptor("a", PsiMethod.class),
|
||||
|
||||
Reference in New Issue
Block a user