mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
move instance method: resolve conflict local var/field in target class
IDEA-174017
This commit is contained in:
+8
-5
@@ -147,7 +147,7 @@ public class MoveInstanceMethodProcessor extends BaseRefactoringProcessor{
|
||||
try {
|
||||
ConflictsUtil.checkMethodConflicts(myTargetClass, myMethod, getPatternMethod(), conflicts);
|
||||
}
|
||||
catch (IncorrectOperationException e) {}
|
||||
catch (IncorrectOperationException ignored) {}
|
||||
|
||||
return showConflicts(conflicts, usages);
|
||||
}
|
||||
@@ -455,16 +455,16 @@ public class MoveInstanceMethodProcessor extends BaseRefactoringProcessor{
|
||||
}
|
||||
catch (IncorrectOperationException e) {
|
||||
LOG.error(e);
|
||||
return null;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private PsiMethod createMethodToAdd () {
|
||||
ChangeContextUtil.encodeContextInfo(myMethod, true);
|
||||
try {
|
||||
final PsiManager manager = myMethod.getManager();
|
||||
final PsiElementFactory factory = JavaPsiFacade.getInstance(manager.getProject()).getElementFactory();
|
||||
JavaPsiFacade facade = JavaPsiFacade.getInstance(manager.getProject());
|
||||
final PsiElementFactory factory = facade.getElementFactory();
|
||||
|
||||
//correct internal references
|
||||
final PsiCodeBlock body = myMethod.getBody();
|
||||
@@ -492,8 +492,11 @@ public class MoveInstanceMethodProcessor extends BaseRefactoringProcessor{
|
||||
final PsiElement resolved = expression.resolve();
|
||||
if (ExpressionUtils.isReferenceTo(qualifier, myTargetVariable)) {
|
||||
if (resolved instanceof PsiField) {
|
||||
String fieldName = ((PsiField)resolved).getName();
|
||||
LOG.assertTrue(fieldName != null);
|
||||
for (PsiParameter parameter : myMethod.getParameterList().getParameters()) {
|
||||
if (Comparing.strEqual(parameter.getName(), ((PsiField)resolved).getName())) {
|
||||
if (Comparing.strEqual(parameter.getName(), fieldName) ||
|
||||
facade.getResolveHelper().resolveReferencedVariable(fieldName, expression) != null) {
|
||||
qualifier.replace(factory.createExpressionFromText("this", null));
|
||||
return;
|
||||
}
|
||||
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
class Data {
|
||||
final List<Datum> datums;
|
||||
|
||||
Data(List<Datum> datums) {
|
||||
this.datums = datums;
|
||||
}
|
||||
|
||||
static class Datum { }
|
||||
}
|
||||
|
||||
class DataUser {
|
||||
public List<Data.Datum> fi<caret>lter(Data data) {
|
||||
List<Data.Datum> datums = new ArrayList<>();
|
||||
for (Data.Datum datum : data.datums) {
|
||||
if (datum != null) datums.add(datum);
|
||||
}
|
||||
return datums;
|
||||
}
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
class Data {
|
||||
final List<Datum> datums;
|
||||
|
||||
Data(List<Datum> datums) {
|
||||
this.datums = datums;
|
||||
}
|
||||
|
||||
public List<Datum> filter() {
|
||||
List<Datum> datums = new ArrayList<>();
|
||||
for (Datum datum : this.datums) {
|
||||
if (datum != null) datums.add(datum);
|
||||
}
|
||||
return datums;
|
||||
}
|
||||
|
||||
static class Datum { }
|
||||
}
|
||||
|
||||
class DataUser {
|
||||
}
|
||||
+4
@@ -104,6 +104,10 @@ public class MoveInstanceMethodTest extends LightRefactoringTestCase {
|
||||
doTest(true, 0);
|
||||
}
|
||||
|
||||
public void testConflictingLocalVariableAndTargetClassField() throws Exception {
|
||||
doTest(true, 0);
|
||||
}
|
||||
|
||||
public void testMethodReference() throws Exception {
|
||||
BaseRefactoringProcessor.ConflictsInTestsException.withIgnoredConflicts(() -> doTest(true, 0));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user