[java-inspections] More ModCommands

GitOrigin-RevId: 2411bfe677ce7c4c3eba363df904429f00e35504
This commit is contained in:
Tagir Valeev
2023-06-18 10:48:29 +02:00
committed by intellij-monorepo-bot
parent b67b0a1eec
commit 88865252cd
17 changed files with 102 additions and 206 deletions

View File

@@ -2,7 +2,6 @@
package com.intellij.codeInspection;
import com.intellij.codeInsight.daemon.QuickFixBundle;
import com.intellij.codeInsight.intention.FileModifier;
import com.intellij.codeInspection.dataFlow.CommonDataflow;
import com.intellij.codeInspection.dataFlow.TypeConstraint;
import com.intellij.codeInspection.dataFlow.TypeConstraints;
@@ -25,7 +24,6 @@ import com.siyeh.ig.psiutils.ControlFlowUtils.InitializerUsageStatus;
import org.jdom.Element;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Collection;
import java.util.Collections;
@@ -223,7 +221,7 @@ public class CollectionAddAllCanBeReplacedWithConstructorInspection extends Abst
return isReplaceable[0];
}
private static class ReplaceAddAllWithConstructorFix implements LocalQuickFix {
private static class ReplaceAddAllWithConstructorFix extends PsiUpdateModCommandQuickFix {
private final SmartPsiElementPointer<PsiMethodCallExpression> myMethodCallExpression;
private final SmartPsiElementPointer<PsiNewExpression> myNewExpression;
private final String methodName;
@@ -235,16 +233,6 @@ public class CollectionAddAllCanBeReplacedWithConstructorInspection extends Abst
this.methodName = methodName;
}
@Override
public @Nullable FileModifier getFileModifierForPreview(@NotNull PsiFile target) {
PsiMethodCallExpression call = myMethodCallExpression.getElement();
PsiNewExpression newExpression = myNewExpression.getElement();
if (call == null || newExpression == null) return null;
return new ReplaceAddAllWithConstructorFix(PsiTreeUtil.findSameElementInCopy(newExpression, target),
PsiTreeUtil.findSameElementInCopy(call, target),
methodName);
}
@Nls
@NotNull
@Override
@@ -259,12 +247,12 @@ public class CollectionAddAllCanBeReplacedWithConstructorInspection extends Abst
}
@Override
public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) {
final PsiMethodCallExpression methodCallExpression = myMethodCallExpression.getElement();
protected void applyFix(@NotNull Project project, @NotNull PsiElement element, @NotNull EditorUpdater updater) {
final PsiMethodCallExpression methodCallExpression = updater.getWritable(myMethodCallExpression.getElement());
if (methodCallExpression == null) return;
PsiExpressionStatement expressionStatement = ObjectUtils.tryCast(methodCallExpression.getParent(), PsiExpressionStatement.class);
if (expressionStatement == null) return;
final PsiNewExpression newExpression = myNewExpression.getElement();
final PsiNewExpression newExpression = updater.getWritable(myNewExpression.getElement());
if (newExpression == null) return;
PsiElement parent = PsiUtil.skipParenthesizedExprUp(newExpression.getParent());
PsiVariable variable = null;

View File

@@ -18,7 +18,6 @@ import com.intellij.codeInspection.dataFlow.types.DfTypes;
import com.intellij.codeInspection.options.OptPane;
import com.intellij.java.analysis.JavaAnalysisBundle;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
import com.intellij.psi.controlFlow.DefUseUtil;
@@ -28,7 +27,6 @@ import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.psi.util.TypeConversionUtil;
import com.intellij.util.ArrayUtil;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.SmartList;
import com.intellij.util.containers.ContainerUtil;
import com.siyeh.ig.bugs.EqualsWithItselfInspection;
@@ -480,35 +478,9 @@ public class ConstantValueInspection extends AbstractBaseJavaLocalInspectionTool
}
private static @Nullable LocalQuickFix createSimplifyBooleanExpressionFix(PsiElement element, final boolean value) {
LocalQuickFixOnPsiElement fix = createSimplifyBooleanFix(element, value);
SimplifyBooleanExpressionFix fix = createSimplifyBooleanFix(element, value);
if (fix == null) return null;
final String text = fix.getText();
return new LocalQuickFix() {
@Override
public @NotNull String getName() {
return text;
}
@Override
public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) {
final PsiElement psiElement = descriptor.getPsiElement();
if (psiElement == null) return;
final LocalQuickFixOnPsiElement fix = createSimplifyBooleanFix(psiElement, value);
if (fix == null) return;
try {
LOG.assertTrue(psiElement.isValid());
fix.applyFix();
}
catch (IncorrectOperationException e) {
LOG.error(e);
}
}
@Override
public @NotNull String getFamilyName() {
return JavaAnalysisBundle.message("inspection.data.flow.simplify.boolean.expression.quickfix");
}
};
return fix.asQuickFix();
}
private static LocalQuickFix createReplaceWithNullCheckFix(PsiElement psiAnchor, boolean evaluatesToTrue) {
@@ -537,7 +509,7 @@ public class ConstantValueInspection extends AbstractBaseJavaLocalInspectionTool
return new LocalQuickFix[]{toRemove ? new RemoveAssignmentFix() : new SimplifyToAssignmentFix()};
}
private static LocalQuickFixOnPsiElement createSimplifyBooleanFix(PsiElement element, boolean value) {
private static SimplifyBooleanExpressionFix createSimplifyBooleanFix(PsiElement element, boolean value) {
if (!(element instanceof PsiExpression expression)) return null;
if (PsiTreeUtil.findChildOfType(element, PsiAssignmentExpression.class) != null) return null;
@@ -546,7 +518,7 @@ public class ConstantValueInspection extends AbstractBaseJavaLocalInspectionTool
}
final SimplifyBooleanExpressionFix fix = new SimplifyBooleanExpressionFix(expression, value);
// simplify intention already active
if (!fix.isAvailable() ||
if (!fix.isAvailable(expression) ||
(SimplifyBooleanExpressionFix.canBeSimplified((PsiExpression)element) && expression instanceof PsiLiteralExpression)) {
return null;
}

View File

@@ -1,4 +1,4 @@
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.codeInspection.dataFlow;
import com.intellij.codeInsight.daemon.impl.analysis.HighlightingFeature;
@@ -85,7 +85,7 @@ public class DataFlowInspection extends DataFlowInspectionBase {
if (assignment == null || assignment.getRExpression() == null || !(assignment.getParent() instanceof PsiExpressionStatement)) {
return null;
}
return new DeleteSideEffectsAwareFix((PsiStatement)assignment.getParent(), assignment.getRExpression(), true);
return new DeleteSideEffectsAwareFix((PsiStatement)assignment.getParent(), assignment.getRExpression(), true).asQuickFix();
}
@Override