From eb5c7ecb20ab03f8b081d68adee2ca16e6f913ea Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Wed, 28 Jun 2017 15:41:52 +0200 Subject: [PATCH] side effects in for stmt declaration (IDEA-172700) transformation should be added before for stmt --- .../quickfix/AccessStaticViaInstanceFix.java | 4 +++- .../codeInspection/RemoveInitializerFix.java | 4 +++- .../unusedAssignment/afterInForDeclaration.java | 17 +++++++++++++++++ .../beforeInForDeclaration.java | 15 +++++++++++++++ 4 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/afterInForDeclaration.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/beforeInForDeclaration.java diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AccessStaticViaInstanceFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AccessStaticViaInstanceFix.java index 38aee1178682..98b5914a61b7 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AccessStaticViaInstanceFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AccessStaticViaInstanceFix.java @@ -32,6 +32,7 @@ import com.intellij.openapi.project.Project; import com.intellij.psi.*; import com.intellij.psi.util.*; import com.intellij.util.IncorrectOperationException; +import com.siyeh.ig.psiutils.BlockUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -166,7 +167,8 @@ public class AccessStaticViaInstanceFix extends LocalQuickFixAndIntentionActionO LOG.assertTrue(statement != null); WriteAction.run(() -> { try { - statement.getParent().addBefore(statementFromText, statement); + PsiElement parent = statement.getParent(); + BlockUtils.addBefore(parent instanceof PsiForStatement ? (PsiStatement)parent : statement, statementFromText); } catch (IncorrectOperationException e) { LOG.error(e); diff --git a/java/java-impl/src/com/intellij/codeInspection/RemoveInitializerFix.java b/java/java-impl/src/com/intellij/codeInspection/RemoveInitializerFix.java index d0c47a6fe825..15c6cb42ff46 100644 --- a/java/java-impl/src/com/intellij/codeInspection/RemoveInitializerFix.java +++ b/java/java-impl/src/com/intellij/codeInspection/RemoveInitializerFix.java @@ -25,6 +25,7 @@ import com.intellij.openapi.project.Project; import com.intellij.psi.*; import com.intellij.psi.util.PsiExpressionTrimRenderer; import com.intellij.psi.util.PsiUtil; +import com.siyeh.ig.psiutils.BlockUtils; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; @@ -90,8 +91,9 @@ public class RemoveInitializerFix implements LocalQuickFix { parent.replace(statementFromText); } else { - declaration.getParent().addBefore(statementFromText, declaration); elementToDelete.delete(); + PsiElement grandParent = declaration.getParent(); + BlockUtils.addBefore(((PsiStatement) (grandParent instanceof PsiForStatement ? grandParent : declaration)), statementFromText); } } }); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/afterInForDeclaration.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/afterInForDeclaration.java new file mode 100644 index 000000000000..d78df1809597 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/afterInForDeclaration.java @@ -0,0 +1,17 @@ +// "Remove redundant initializer" "true" +class A { +void testFor() { + if (true) { + read(); + for(int i;; i++) { + i = 10; + System.out.println("Hello!"); + } + } + + } + + private static int read() { + System.out.println(); + return 0; + }} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/beforeInForDeclaration.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/beforeInForDeclaration.java new file mode 100644 index 000000000000..98797ecf45f3 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/beforeInForDeclaration.java @@ -0,0 +1,15 @@ +// "Remove redundant initializer" "true" +class A { +void testFor() { + if (true) + for(int i = read();;i++) { + i = 10; + System.out.println("Hello!"); + } + + } + + private static int read() { + System.out.println(); + return 0; + }} \ No newline at end of file