diff --git a/java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractMethodObjectProcessor.java b/java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractMethodObjectProcessor.java index 4445064de890..96532f8c8076 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractMethodObjectProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractMethodObjectProcessor.java @@ -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) { diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/RenameInInitializer.java b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/RenameInInitializer.java new file mode 100644 index 000000000000..4f1fa3457c20 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/RenameInInitializer.java @@ -0,0 +1,8 @@ +public class RenameInInitializer { + public static void main(String[] args) { + int aValue = 100; + int result = 1000; + int a = IntStream.of(aValue, result).peek(x -> {}).sum(); + System.out.println(aValue + result + a); + } +} diff --git a/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/RenameInInitializer.java.after b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/RenameInInitializer.java.after new file mode 100644 index 000000000000..9d4106c46485 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodObject/multipleExitPoints/RenameInInitializer.java.after @@ -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; + } + } +} diff --git a/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodObjectWithMultipleExitPointsTest.java b/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodObjectWithMultipleExitPointsTest.java index b2e56e5f756d..8deca9cc7e52 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodObjectWithMultipleExitPointsTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodObjectWithMultipleExitPointsTest.java @@ -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";