mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
ExtractSideEffectsFix -> DeleteSideEffectsAwareFix; i18n
Now intention availability logic is moved from HighlightUtil to DeleteSideEffectsAwareFix Review: IDEA-CR-21623
This commit is contained in:
@@ -261,6 +261,9 @@ public abstract class QuickFixFactory {
|
||||
@NotNull public abstract LocalQuickFixAndIntentionActionOnPsiElement createDeleteFix(@NotNull PsiElement element);
|
||||
@NotNull public abstract LocalQuickFixAndIntentionActionOnPsiElement createDeleteFix(@NotNull PsiElement element, @NotNull @Nls String text);
|
||||
|
||||
@NotNull
|
||||
public abstract IntentionAction createDeleteSideEffectAwareFix(@NotNull PsiExpressionStatement statement);
|
||||
|
||||
@NotNull
|
||||
public abstract IntentionAction createSafeDeleteFix(@NotNull PsiElement element);
|
||||
|
||||
@@ -300,8 +303,4 @@ public abstract class QuickFixFactory {
|
||||
|
||||
@NotNull
|
||||
public abstract IntentionAction createWrapStringWithFileFix(@Nullable PsiType type, @NotNull PsiExpression expression);
|
||||
|
||||
@NotNull
|
||||
public abstract IntentionAction createExtractSideEffectsFix(@NotNull PsiExpressionStatement statement,
|
||||
@NotNull List<PsiExpression> sideEffects);
|
||||
}
|
||||
+2
-14
@@ -69,7 +69,6 @@ import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.containers.hash.HashSet;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import com.intellij.xml.util.XmlStringUtil;
|
||||
import com.siyeh.ig.psiutils.SideEffectChecker;
|
||||
import gnu.trove.THashMap;
|
||||
import org.intellij.lang.annotations.Language;
|
||||
import org.jetbrains.annotations.*;
|
||||
@@ -1421,19 +1420,8 @@ public class HighlightUtil extends HighlightUtilBase {
|
||||
HighlightInfo error =
|
||||
HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(statement).descriptionAndTooltip(description).create();
|
||||
if (statement instanceof PsiExpressionStatement) {
|
||||
PsiExpressionStatement expressionStatement = (PsiExpressionStatement)statement;
|
||||
PsiExpression expression = expressionStatement.getExpression();
|
||||
List<PsiExpression> sideEffects = SideEffectChecker.extractSideEffectExpressions(expression);
|
||||
if (sideEffects.isEmpty()) {
|
||||
QuickFixAction.registerQuickFixAction(error, QuickFixFactory.getInstance().createDeleteFix(statement));
|
||||
}
|
||||
else {
|
||||
// "Remove unnecessary parentheses" action is already present which will do the same
|
||||
if(sideEffects.size() != 1 || sideEffects.get(0) != PsiUtil.skipParenthesizedExprDown(expression)) {
|
||||
QuickFixAction
|
||||
.registerQuickFixAction(error, QuickFixFactory.getInstance().createExtractSideEffectsFix(expressionStatement, sideEffects));
|
||||
}
|
||||
}
|
||||
QuickFixAction
|
||||
.registerQuickFixAction(error, QuickFixFactory.getInstance().createDeleteSideEffectAwareFix((PsiExpressionStatement)statement));
|
||||
}
|
||||
return error;
|
||||
}
|
||||
|
||||
+1
-1
@@ -696,7 +696,7 @@ public class EmptyQuickFixFactory extends QuickFixFactory {
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public IntentionAction createExtractSideEffectsFix(@NotNull PsiExpressionStatement statement, @NotNull List<PsiExpression> sideEffects) {
|
||||
public IntentionAction createDeleteSideEffectAwareFix(@NotNull PsiExpressionStatement statement) {
|
||||
return QuickFixes.EMPTY_FIX;
|
||||
}
|
||||
}
|
||||
|
||||
+26
-12
@@ -15,11 +15,13 @@
|
||||
*/
|
||||
package com.intellij.codeInsight.daemon.impl.quickfix;
|
||||
|
||||
import com.intellij.codeInsight.daemon.QuickFixBundle;
|
||||
import com.intellij.codeInsight.intention.IntentionAction;
|
||||
import com.intellij.codeInsight.intention.LowPriorityAction;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.siyeh.ig.psiutils.BlockUtils;
|
||||
import com.siyeh.ig.psiutils.SideEffectChecker;
|
||||
@@ -29,22 +31,34 @@ import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ExtractSideEffectsFix implements IntentionAction, LowPriorityAction {
|
||||
public class DeleteSideEffectsAwareFix implements IntentionAction, LowPriorityAction {
|
||||
private final SmartPsiElementPointer<PsiExpressionStatement> myPointer;
|
||||
private final String myMessage;
|
||||
|
||||
public ExtractSideEffectsFix(PsiExpressionStatement statement, List<PsiExpression> effects) {
|
||||
public DeleteSideEffectsAwareFix(PsiExpressionStatement statement) {
|
||||
myPointer = SmartPointerManager.getInstance(statement.getProject()).createSmartPsiElementPointer(statement);
|
||||
PsiExpression expression = statement.getExpression();
|
||||
PsiStatement[] statements = StatementExtractor.generateStatements(effects, expression);
|
||||
if (statements.length == 1) {
|
||||
if(statements[0] instanceof PsiIfStatement) {
|
||||
myMessage = "Convert to 'if' statement";
|
||||
} else {
|
||||
myMessage = "Extract side effect";
|
||||
List<PsiExpression> sideEffects = SideEffectChecker.extractSideEffectExpressions(expression);
|
||||
if (sideEffects.isEmpty()) {
|
||||
myMessage = QuickFixBundle.message("delete.element.fix.text");
|
||||
}
|
||||
else if (sideEffects.size() == 1 && sideEffects.get(0) == PsiUtil.skipParenthesizedExprDown(expression)) {
|
||||
// "Remove unnecessary parentheses" action is already present which will do the same
|
||||
myMessage = "";
|
||||
}
|
||||
else {
|
||||
PsiStatement[] statements = StatementExtractor.generateStatements(sideEffects, expression);
|
||||
if (statements.length == 1) {
|
||||
if (statements[0] instanceof PsiIfStatement) {
|
||||
myMessage = QuickFixBundle.message("extract.side.effects.convert.to.if");
|
||||
}
|
||||
else {
|
||||
myMessage = QuickFixBundle.message("extract.side.effects.single");
|
||||
}
|
||||
}
|
||||
else {
|
||||
myMessage = QuickFixBundle.message("extract.side.effects.multiple");
|
||||
}
|
||||
} else {
|
||||
myMessage = "Extract side effects";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,12 +73,12 @@ public class ExtractSideEffectsFix implements IntentionAction, LowPriorityAction
|
||||
@NotNull
|
||||
@Override
|
||||
public String getFamilyName() {
|
||||
return "Extract side effects";
|
||||
return QuickFixBundle.message("extract.side.effects.family.name");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) {
|
||||
return true;
|
||||
return !myMessage.isEmpty();
|
||||
}
|
||||
|
||||
@Override
|
||||
+2
-2
@@ -879,7 +879,7 @@ public class QuickFixFactoryImpl extends QuickFixFactory {
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public IntentionAction createExtractSideEffectsFix(@NotNull PsiExpressionStatement statement, @NotNull List<PsiExpression> sideEffects) {
|
||||
return new ExtractSideEffectsFix(statement, sideEffects);
|
||||
public IntentionAction createDeleteSideEffectAwareFix(@NotNull PsiExpressionStatement statement) {
|
||||
return new DeleteSideEffectsAwareFix(statement);
|
||||
}
|
||||
}
|
||||
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
// "Delete element" "true"
|
||||
public class Main {
|
||||
public void test() {
|
||||
}
|
||||
}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
// "Delete element" "true"
|
||||
public class Main {
|
||||
public void test() {
|
||||
2 <caret>+ 2;
|
||||
}
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
// "Extract side effect" "false"
|
||||
import java.io.File;
|
||||
|
||||
public class Main {
|
||||
public void test(File f) {
|
||||
(f.mkd<caret>irs());
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -17,11 +17,11 @@ package com.intellij.java.codeInsight.daemon.quickFix;
|
||||
|
||||
import com.intellij.codeInsight.daemon.quickFix.LightQuickFixParameterizedTestCase;
|
||||
|
||||
public class ExtractSideEffectsTest extends LightQuickFixParameterizedTestCase {
|
||||
public class DeleteSideEffectsAwareTest extends LightQuickFixParameterizedTestCase {
|
||||
public void test() throws Exception { doAllTests(); }
|
||||
|
||||
@Override
|
||||
protected String getBasePath() {
|
||||
return "/codeInsight/daemonCodeAnalyzer/quickFix/extractSideEffects";
|
||||
return "/codeInsight/daemonCodeAnalyzer/quickFix/deleteSideEffectsAware";
|
||||
}
|
||||
}
|
||||
@@ -299,6 +299,11 @@ delete.element.fix.text=Delete element
|
||||
delete.reference.fix.text=Delete reference
|
||||
delete.unreachable.statement.fix.text=Delete unreachable statement
|
||||
|
||||
extract.side.effects.convert.to.if=Convert to 'if' statement
|
||||
extract.side.effects.single=Extract side effect
|
||||
extract.side.effects.multiple=Extract side effects
|
||||
extract.side.effects.family.name=Delete statement extracting side effects
|
||||
|
||||
module.info.add.requires.family.name=Add 'requires' statement to module-info.java
|
||||
module.info.add.requires.name=Add ''requires {0}'' statement to module-info.java
|
||||
|
||||
|
||||
Reference in New Issue
Block a user