side effects in for stmt declaration (IDEA-172700)

transformation should be added before for stmt
This commit is contained in:
Anna Kozlova
2017-06-28 16:10:43 +02:00
parent 352770463f
commit eb5c7ecb20
4 changed files with 38 additions and 2 deletions
@@ -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);
@@ -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);
}
}
});
@@ -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;
}}
@@ -0,0 +1,15 @@
// "Remove redundant initializer" "true"
class A {
void testFor() {
if (true)
for(int i = re<caret>ad();;i++) {
i = 10;
System.out.println("Hello!");
}
}
private static int read() {
System.out.println();
return 0;
}}