IDEA-171094 Extract method object fails

This commit is contained in:
Egor.Ushakov
2017-04-07 16:41:58 +03:00
parent 2928517370
commit 59a2c555ca
4 changed files with 58 additions and 12 deletions
@@ -339,15 +339,7 @@ public class ExtractMethodObjectProcessor extends BaseRefactoringProcessor {
for (PsiVariable variable : outputVariables) {
PsiVariable var = (PsiVariable)declaredElement;
if (Comparing.strEqual(var.getName(), variable.getName())) {
PsiExpression initializer = var.getInitializer();
if (initializer == null) {
replacementMap.put(var, null);
}
else {
PsiStatement assignmentStatement = myElementFactory
.createStatementFromText(var2FieldNames.get(variable.getName()) + " = " + initializer.getText() + ";", statement);
replacementMap.put(var, assignmentStatement);
}
replacementMap.put(var, var.getInitializer());
}
}
}
@@ -412,11 +404,14 @@ public class ExtractMethodObjectProcessor extends BaseRefactoringProcessor {
}
}
else if (statement instanceof PsiLocalVariable) {
PsiLocalVariable variable = (PsiLocalVariable)statement;
final PsiLocalVariable variable = (PsiLocalVariable)statement;
variable.normalizeDeclaration();
PsiDeclarationStatement declaration = PsiTreeUtil.getParentOfType(statement, PsiDeclarationStatement.class);
final PsiExpression initializer = variable.getInitializer();
LOG.assertTrue(initializer != null);
final PsiStatement assignmentStatement = myElementFactory.createStatementFromText(var2FieldNames.get(variable.getName()) + " = " + initializer.getText() + ";", statement);
final PsiDeclarationStatement declaration = PsiTreeUtil.getParentOfType(statement, PsiDeclarationStatement.class);
LOG.assertTrue(declaration != null);
declaration.replace(replacement);
declaration.replace(assignmentStatement);
}
else {
if (statement instanceof PsiReturnStatement) {
@@ -0,0 +1,8 @@
public class RenameInInitializer {
public static void main(String[] args) {
<selection>int aValue = 100;
int result = 1000;
int a = IntStream.of(aValue, result).peek(x -> {}).sum();</selection>
System.out.println(aValue + result + a);
}
}
@@ -0,0 +1,35 @@
public class RenameInInitializer {
public static void main(String[] args) {
Inner inner = new Inner().invoke();
int aValue = inner.getValue();
int result = inner.getResult();
int a = inner.getA();
System.out.println(aValue + result + a);
}
private static class Inner {
private int myValue;
private int myResult;
private int myA;
public int getValue() {
return myValue;
}
public int getResult() {
return myResult;
}
public int getA() {
return myA;
}
public Inner invoke() {
myValue = 100;
myResult = 1000;
myA = IntStream.of(myValue, myResult).peek(x -> {
}).sum();
return this;
}
}
}
@@ -152,7 +152,15 @@ public class ExtractMethodObjectWithMultipleExitPointsTest extends LightRefactor
doTest();
}
public void testRenameInInitializer() throws Exception {
doTestWithIdeaCodeStyleSettings();
}
public void testSameFieldsWithPrefix() throws Exception {
doTestWithIdeaCodeStyleSettings();
}
private void doTestWithIdeaCodeStyleSettings() throws Exception {
final CodeStyleSettings settings = CodeStyleSettingsManager.getSettings(getProject());
String oldPrefix = settings.FIELD_NAME_PREFIX;
settings.FIELD_NAME_PREFIX = "my";