diff --git a/java/java-impl/src/com/intellij/refactoring/inline/InlineToAnonymousConstructorProcessor.java b/java/java-impl/src/com/intellij/refactoring/inline/InlineToAnonymousConstructorProcessor.java index d826d9998d59..7ce79aef8a64 100644 --- a/java/java-impl/src/com/intellij/refactoring/inline/InlineToAnonymousConstructorProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/inline/InlineToAnonymousConstructorProcessor.java @@ -183,7 +183,7 @@ class InlineToAnonymousConstructorProcessor { ProcessingContext context = new ProcessingContext(); if (ourAssignmentPattern.accepts(stmt, context)) { PsiAssignmentExpression expression = context.get(ourAssignmentKey); - if (!processAssignmentInConstructor(expression)) { + if (processAssignmentInConstructor(expression)) { initializerBlock.addBefore(replaceParameterReferences(stmt, null, false), initializerBlock.getRBrace()); } } @@ -205,7 +205,7 @@ class InlineToAnonymousConstructorProcessor { if (expression.getLExpression() instanceof PsiReferenceExpression) { PsiReferenceExpression lExpr = (PsiReferenceExpression) expression.getLExpression(); final PsiExpression rExpr = expression.getRExpression(); - if (rExpr == null) return true; + if (rExpr == null) return false; final PsiElement psiElement = lExpr.resolve(); if (psiElement instanceof PsiField) { PsiField field = (PsiField) psiElement; @@ -217,25 +217,20 @@ class InlineToAnonymousConstructorProcessor { } catch (IncorrectOperationException e) { LOG.error(e); - return true; + return false; } if (!localVarRefs.isEmpty()) { - return false; + return true; } myFieldInitializers.put(field.getName(), initializer); } } else if (psiElement instanceof PsiVariable) { - try { - replaceParameterReferences(rExpr.copy(), new ArrayList(), false); - } - catch (IncorrectOperationException e) { - LOG.error(e); - } + return true; } } - return true; + return false; } public static boolean isConstant(final PsiExpression expr) { diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/MultipleAssignments.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/MultipleAssignments.java new file mode 100644 index 000000000000..2725dd79cd8c --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/MultipleAssignments.java @@ -0,0 +1,20 @@ +public class WithCtor { + private int myInt = 8; + private String myString = "Sashya"; + + public WithCtor() { + } + + public WithCtor(int anInt, String string) { + int i = 2; + i = 3; + myInt = i + anInt; + int j = 4; + j = 5; + myString = string.substring(j); + } +} + +class Usage { + private WithCtor wc1 = new WithCtor(17, "Sa"); +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/MultipleAssignments.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/MultipleAssignments.java.after new file mode 100644 index 000000000000..c7885a80e38d --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineToAnonymousClass/MultipleAssignments.java.after @@ -0,0 +1,15 @@ +class Usage { + private Object wc1 = new Object() { + private int myInt = 8; + private String myString = "Sashya"; + + { + int i = 2; + i = 3; + myInt = i + 17; + int j = 4; + j = 5; + myString = "Sa".substring(j); + } + }; +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineToAnonymousClassTest.java b/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineToAnonymousClassTest.java index 4cc25d09a6c7..61c8e144f56c 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineToAnonymousClassTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineToAnonymousClassTest.java @@ -218,6 +218,10 @@ public class InlineToAnonymousClassTest extends LightCodeInsightTestCase { doTest(false, true); } + public void testMultipleAssignments() throws Exception { + doTest(false, true); + } + public void testNoInlineAbstract() throws Exception { doTestNoInline("Abstract classes cannot be inlined"); }