diff --git a/java/java-impl/src/com/intellij/refactoring/inline/InlineConstantFieldProcessor.java b/java/java-impl/src/com/intellij/refactoring/inline/InlineConstantFieldProcessor.java index ec722d291feb..a3c08d37e1c0 100644 --- a/java/java-impl/src/com/intellij/refactoring/inline/InlineConstantFieldProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/inline/InlineConstantFieldProcessor.java @@ -139,8 +139,9 @@ public class InlineConstantFieldProcessor extends BaseRefactoringProcessor { protected void performRefactoring(@NotNull UsageInfo[] usages) { PsiExpression initializer = InlineConstantFieldHandler.getInitializer(myField); LOG.assertTrue(initializer != null); + initializer = normalize (initializer); - initializer = normalize ((PsiExpression)initializer.copy()); + final Set assignments = new HashSet<>(); for (UsageInfo info : usages) { if (info instanceof UsageFromJavaDoc) continue; if (info instanceof NonCodeUsageInfo) continue; @@ -148,7 +149,7 @@ public class InlineConstantFieldProcessor extends BaseRefactoringProcessor { if (element == null) continue; try { if (element instanceof PsiExpression) { - inlineExpressionUsage((PsiExpression)element, initializer); + inlineExpressionUsage((PsiExpression)element, initializer, assignments); } else { PsiImportStaticStatement importStaticStatement = PsiTreeUtil.getParentOfType(element, PsiImportStaticStatement.class); @@ -161,6 +162,10 @@ public class InlineConstantFieldProcessor extends BaseRefactoringProcessor { } } + for (PsiAssignmentExpression assignment : assignments) { + assignment.delete(); + } + if (!myInlineThisOnly) { try { myField.delete(); @@ -186,7 +191,8 @@ public class InlineConstantFieldProcessor extends BaseRefactoringProcessor { } private void inlineExpressionUsage(PsiExpression expr, - PsiExpression initializer1) throws IncorrectOperationException { + PsiExpression initializer1, + Set assignments) throws IncorrectOperationException { if (myField.isWritable()) { myField.normalizeDeclaration(); } @@ -194,7 +200,7 @@ public class InlineConstantFieldProcessor extends BaseRefactoringProcessor { if (isAccessedForWriting(expr)) { PsiAssignmentExpression assignmentExpression = PsiTreeUtil.getParentOfType(expr, PsiAssignmentExpression.class); if (assignmentExpression != null) { - assignmentExpression.delete(); + assignments.add(assignmentExpression); } return; } diff --git a/java/java-tests/testData/refactoring/inlineConstantField/DiamondInitializer.java b/java/java-tests/testData/refactoring/inlineConstantField/DiamondInitializer.java new file mode 100644 index 000000000000..49f463105fb4 --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineConstantField/DiamondInitializer.java @@ -0,0 +1,10 @@ +import java.util.HashMap; +import java.util.Map; + +final class Foo { + private Map map = new HashMap<>(); + + private Map getMap() { + return map; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inlineConstantField/DiamondInitializer.java.after b/java/java-tests/testData/refactoring/inlineConstantField/DiamondInitializer.java.after new file mode 100644 index 000000000000..ff3f04578203 --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineConstantField/DiamondInitializer.java.after @@ -0,0 +1,9 @@ +import java.util.HashMap; +import java.util.Map; + +final class Foo { + + private Map getMap() { + return new HashMap<>(); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineConstantFieldTest.java b/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineConstantFieldTest.java index d9e1cc2e3e67..8bf3fc3f76f0 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineConstantFieldTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineConstantFieldTest.java @@ -42,6 +42,10 @@ public class InlineConstantFieldTest extends LightRefactoringTestCase { doTest(); } + public void testDiamondInitializer() throws Exception { + doTest(); + } + public void testMultipleInitializers() throws Exception { configureByFile("/refactoring/inlineConstantField/" + getTestName(false) + ".java"); PsiElement element = TargetElementUtil