mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
instance method move: do not introduce additional params for base class of containing anonymous
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+5
-3
@@ -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;
|
||||
}
|
||||
}
|
||||
+2
@@ -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); }
|
||||
|
||||
Reference in New Issue
Block a user