instance method move: do not introduce additional params for base class of containing anonymous

This commit is contained in:
anna
2011-11-07 10:54:04 +01:00
parent 55579fc21d
commit 5516b03b1a
5 changed files with 82 additions and 5 deletions
@@ -53,8 +53,19 @@ public class MoveInstanceMembersUtil {
if (pair != null) {
PsiClass refClass = pair.getSecond();
PsiMember member = pair.getFirst();
if (refClass != null && !PsiTreeUtil.isAncestor(refMember, member, false)) {
addReferencedMember(map, refClass, member);
if (refClass != null) {
boolean inherited = false;
PsiClass parentClass = PsiTreeUtil.getParentOfType(scope, PsiClass.class, true);
while (parentClass != null && PsiTreeUtil.isAncestor(refMember, parentClass, false)) {
if (parentClass == refClass || parentClass.isInheritor(refClass, true)) {
inherited = true;
break;
}
parentClass = PsiTreeUtil.getParentOfType(parentClass, PsiClass.class, true);
}
if (!inherited && !PsiTreeUtil.isAncestor(refMember, member, false)) {
addReferencedMember(map, refClass, member);
}
}
}
@@ -413,9 +413,11 @@ public class MoveInstanceMethodProcessor extends BaseRefactoringProcessor{
PsiClass classReferencedByThis = MoveInstanceMembersUtil.getClassReferencedByThis(expression);
if (classReferencedByThis != null) {
final String paramName = getParameterNameToCreate(classReferencedByThis);
PsiReferenceExpression newQualifier = (PsiReferenceExpression)factory.createExpressionFromText(paramName, null);
expression.setQualifierExpression(newQualifier);
return;
if (paramName != null) {
PsiReferenceExpression newQualifier = (PsiReferenceExpression)factory.createExpressionFromText(paramName, null);
expression.setQualifierExpression(newQualifier);
return;
}
}
}
super.visitReferenceExpression(expression);
@@ -0,0 +1,31 @@
public class Test {
public boolean per<caret>form(Bar l) {
final Dialog dialog = new Dialog() {
protected void invokeRefactoring() {
doRefactor();
}
};
dialog.show();
return dialog.isOK();
}
}
class Bar {
}
class ID {
void doRefactor() {
}
}
class Dialog extends ID {
public void show() {
}
public boolean isOK() {
return false;
}
}
@@ -0,0 +1,31 @@
public class Test {
}
class Bar {
public boolean perform() {
final Dialog dialog = new Dialog() {
protected void invokeRefactoring() {
doRefactor();
}
};
dialog.show();
return dialog.isOK();
}
}
class ID {
void doRefactor() {
}
}
class Dialog extends ID {
public void show() {
}
public boolean isOK() {
return false;
}
}
@@ -33,6 +33,8 @@ public class MoveInstanceMethodTest extends LightCodeInsightTestCase {
public void testQualifyThisHierarchy() throws Exception {doTest(true, 0);}
public void testAnonymousHierarchy() throws Exception {doTest(true, 0);}
public void testTwoParams() throws Exception { doTest(true, 0); }
public void testNoThisParam() throws Exception { doTest(false, 0); }