pull up: protect pulled class private members (IDEA-60729)

This commit is contained in:
anna
2010-11-10 19:02:25 +03:00
parent 92b0210e9f
commit 1e430d23b5
4 changed files with 61 additions and 0 deletions
@@ -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);
}
@@ -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 {
}
@@ -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),