DeleteSideEffectsAwareFix: handle comments

This commit is contained in:
Tagir Valeev
2018-02-20 17:04:54 +07:00
parent d638dc763f
commit 3b96a595b9
5 changed files with 20 additions and 3 deletions

View File

@@ -24,6 +24,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.siyeh.ig.psiutils.CommentTracker;
import com.siyeh.ig.psiutils.SideEffectChecker;
import com.siyeh.ig.psiutils.StatementExtractor;
import org.jetbrains.annotations.Nls;
@@ -95,6 +96,8 @@ public class DeleteSideEffectsAwareFix extends LocalQuickFixAndIntentionActionOn
PsiExpression expression = myExpressionPtr.getElement();
if (expression == null) return;
List<PsiExpression> sideEffects = SideEffectChecker.extractSideEffectExpressions(expression);
CommentTracker ct = new CommentTracker();
sideEffects.forEach(ct::markUnchanged);
PsiStatement[] statements = StatementExtractor.generateStatements(sideEffects, expression);
if (statements.length > 0) {
PsiStatement lastAdded = BlockUtils.addBefore(statement, statements);
@@ -102,9 +105,9 @@ public class DeleteSideEffectsAwareFix extends LocalQuickFixAndIntentionActionOn
}
PsiElement parent = statement.getParent();
if (parent instanceof PsiStatement && !(parent instanceof PsiIfStatement && ((PsiIfStatement)parent).getElseBranch() == statement)) {
statement.replace(JavaPsiFacade.getElementFactory(project).createStatementFromText("{}", statement));
ct.replaceAndRestoreComments(statement, "{}");
} else {
statement.delete();
ct.deleteAndRestoreComments(statement);
}
}
}

View File

@@ -1,5 +1,6 @@
// "Delete element" "true"
class Test {
void test(int x) {
//comment
}
}

View File

@@ -0,0 +1,6 @@
// "Extract side effect" "true"
class Test {
void test(int x) {
x/*2*/ =/*3*/2;/*1*//*4*//*5*/
}
}

View File

@@ -1,6 +1,7 @@
// "Delete element" "true"
class Test {
void test(int x) {
i<caret>f(x > 0) {}
i<caret>f(x > 0) //comment
{}
}
}

View File

@@ -0,0 +1,6 @@
// "Extract side effect" "true"
class Test {
void test(int x) {
s<caret>witch(/*1*/x/*2*/=/*3*/2/*4*/)/*5*/ {}
}
}