From 3e37ba3466a06ada2a2f68acfa6d8bb45c677eb9 Mon Sep 17 00:00:00 2001 From: anna Date: Fri, 29 Jan 2010 19:34:13 +0300 Subject: [PATCH] Inline inner: assignments to local vars and params in constructor body fixed (IDEA-39285) --- ...InlineToAnonymousConstructorProcessor.java | 17 ++++++---------- .../MultipleAssignments.java | 20 +++++++++++++++++++ .../MultipleAssignments.java.after | 15 ++++++++++++++ .../inline/InlineToAnonymousClassTest.java | 4 ++++ 4 files changed, 45 insertions(+), 11 deletions(-) create mode 100644 java/java-tests/testData/refactoring/inlineToAnonymousClass/MultipleAssignments.java create mode 100644 java/java-tests/testData/refactoring/inlineToAnonymousClass/MultipleAssignments.java.after 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"); }