mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[java-inspections] DeleteRepeatedInterfaceFix, AddTypeArgumentsConditionalFix: preview-friendly
GitOrigin-RevId: b8dc793c45a508402f15d8c48bc654caf0bef10d
This commit is contained in:
committed by
intellij-monorepo-bot
parent
b6747215db
commit
63dac115ae
+1
-1
@@ -274,7 +274,7 @@ public final class HighlightUtil {
|
||||
HighlightInfo highlightInfo = HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR)
|
||||
.range(conjunct)
|
||||
.descriptionAndTooltip(JavaErrorBundle.message("repeated.interface")).create();
|
||||
QuickFixAction.registerQuickFixAction(highlightInfo, new DeleteRepeatedInterfaceFix(conjunct, conjList), null);
|
||||
QuickFixAction.registerQuickFixAction(highlightInfo, new DeleteRepeatedInterfaceFix(conjunct), null);
|
||||
return highlightInfo;
|
||||
}
|
||||
}
|
||||
|
||||
+7
@@ -16,6 +16,7 @@
|
||||
package com.intellij.codeInsight.daemon.impl.quickfix;
|
||||
|
||||
import com.intellij.codeInsight.daemon.impl.HighlightInfo;
|
||||
import com.intellij.codeInsight.intention.FileModifier;
|
||||
import com.intellij.codeInsight.intention.HighPriorityAction;
|
||||
import com.intellij.codeInsight.intention.IntentionAction;
|
||||
import com.intellij.java.analysis.JavaAnalysisBundle;
|
||||
@@ -25,6 +26,7 @@ import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.source.resolve.DefaultParameterTypeInferencePolicy;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.psi.util.TypeConversionUtil;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
@@ -44,6 +46,11 @@ public class AddTypeArgumentsConditionalFix implements IntentionAction, HighPrio
|
||||
myMethod = method;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable FileModifier getFileModifierForPreview(@NotNull PsiFile target) {
|
||||
return new AddTypeArgumentsConditionalFix(mySubstitutor, PsiTreeUtil.findSameElementInCopy(myExpression, target), myMethod);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getText() {
|
||||
|
||||
+18
-9
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.intellij.codeInsight.daemon.impl.quickfix;
|
||||
|
||||
import com.intellij.codeInsight.intention.FileModifier;
|
||||
import com.intellij.codeInsight.intention.IntentionAction;
|
||||
import com.intellij.java.analysis.JavaAnalysisBundle;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
@@ -25,17 +26,27 @@ import com.intellij.psi.codeStyle.CodeStyleManager;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import one.util.streamex.StreamEx;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
public class DeleteRepeatedInterfaceFix implements IntentionAction {
|
||||
private final PsiTypeElement myConjunct;
|
||||
private final List<? extends PsiTypeElement> myConjList;
|
||||
private final PsiTypeElement[] myConjList;
|
||||
|
||||
public DeleteRepeatedInterfaceFix(PsiTypeElement conjunct, List<? extends PsiTypeElement> conjList) {
|
||||
public DeleteRepeatedInterfaceFix(PsiTypeElement conjunct) {
|
||||
myConjunct = conjunct;
|
||||
myConjList = conjList;
|
||||
PsiTypeElement[] elements = PsiTreeUtil.getChildrenOfType(myConjunct.getParent(), PsiTypeElement.class);
|
||||
myConjList = elements == null ? PsiTypeElement.EMPTY_ARRAY : elements;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable FileModifier getFileModifierForPreview(@NotNull PsiFile target) {
|
||||
return new DeleteRepeatedInterfaceFix(PsiTreeUtil.findSameElementInCopy(myConjunct, target));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -52,10 +63,8 @@ public class DeleteRepeatedInterfaceFix implements IntentionAction {
|
||||
|
||||
@Override
|
||||
public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) {
|
||||
for (PsiTypeElement element : myConjList) {
|
||||
if (!element.isValid()) return false;
|
||||
}
|
||||
return true;
|
||||
if (myConjList.length == 0) return false;
|
||||
return ContainerUtil.and(myConjList, PsiElement::isValid);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -66,10 +75,10 @@ public class DeleteRepeatedInterfaceFix implements IntentionAction {
|
||||
if (castType != null) {
|
||||
final PsiType type = castType.getType();
|
||||
if (type instanceof PsiIntersectionType) {
|
||||
final String typeText = StringUtil.join(ContainerUtil.filter(myConjList, element -> element != myConjunct), element -> element.getText(), " & ");
|
||||
final String typeText = StreamEx.of(myConjList).without(myConjunct).map(PsiElement::getText).joining(" & ");
|
||||
final PsiTypeCastExpression newCastExpr =
|
||||
(PsiTypeCastExpression)JavaPsiFacade.getElementFactory(project).createExpressionFromText("(" + typeText + ")a", castType);
|
||||
CodeStyleManager.getInstance(project).reformat(castType.replace(newCastExpr.getCastType()));
|
||||
CodeStyleManager.getInstance(project).reformat(castType.replace(Objects.requireNonNull(newCastExpr.getCastType())));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user