mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-08 15:09:39 +07:00
DeleteReturnFix preview-friendly
GitOrigin-RevId: fba8f7799f4f45f3b30b4587f2135fe594da26c3
This commit is contained in:
committed by
intellij-monorepo-bot
parent
e39697d463
commit
542f40ff5c
@@ -178,12 +178,9 @@ public abstract class QuickFixFactory {
|
||||
*
|
||||
* @param method method with return statement
|
||||
* @param returnStatement statement to remove
|
||||
* @param returnValue statement value
|
||||
*/
|
||||
@NotNull
|
||||
public abstract IntentionAction createDeleteReturnFix(@NotNull PsiMethod method,
|
||||
@NotNull PsiReturnStatement returnStatement,
|
||||
@NotNull PsiExpression returnValue);
|
||||
public abstract IntentionAction createDeleteReturnFix(@NotNull PsiMethod method, @NotNull PsiReturnStatement returnStatement);
|
||||
|
||||
@NotNull
|
||||
public abstract IntentionAction createDeleteCatchFix(@NotNull PsiParameter parameter);
|
||||
|
||||
@@ -552,7 +552,7 @@ public class HighlightUtil {
|
||||
errorResult =
|
||||
HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(statement).descriptionAndTooltip(description).create();
|
||||
if (method != null && valueType != null && method.getBody() != null) {
|
||||
QuickFixAction.registerQuickFixAction(errorResult, getFixFactory().createDeleteReturnFix(method, statement, returnValue));
|
||||
QuickFixAction.registerQuickFixAction(errorResult, getFixFactory().createDeleteReturnFix(method, statement));
|
||||
QuickFixAction.registerQuickFixAction(errorResult, getFixFactory().createMethodReturnFix(method, valueType, true));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,9 @@ package com.intellij.codeInsight.daemon.impl.quickfix;
|
||||
|
||||
import com.intellij.codeInsight.BlockUtils;
|
||||
import com.intellij.codeInsight.daemon.QuickFixBundle;
|
||||
import com.intellij.codeInsight.intention.FileModifier;
|
||||
import com.intellij.codeInspection.LocalQuickFixAndIntentionActionOnPsiElement;
|
||||
import com.intellij.codeInspection.ex.QuickFixWrapper;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.*;
|
||||
@@ -15,21 +17,26 @@ import org.jetbrains.annotations.Nullable;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
public class DeleteReturnFix extends LocalQuickFixAndIntentionActionOnPsiElement {
|
||||
|
||||
public final class DeleteReturnFix extends LocalQuickFixAndIntentionActionOnPsiElement {
|
||||
private final SmartPsiElementPointer<PsiReturnStatement> myStatementPtr;
|
||||
private final SmartPsiElementPointer<PsiExpression> myValuePtr;
|
||||
private final boolean myIsLastStatement;
|
||||
private final boolean myHasSideEffects;
|
||||
|
||||
public DeleteReturnFix(@NotNull PsiMethod method, @NotNull PsiReturnStatement returnStatement, @NotNull PsiExpression returnValue) {
|
||||
public DeleteReturnFix(@NotNull PsiMethod method, @NotNull PsiReturnStatement returnStatement) {
|
||||
super(returnStatement);
|
||||
PsiCodeBlock codeBlock = Objects.requireNonNull(method.getBody());
|
||||
SmartPointerManager manager = SmartPointerManager.getInstance(returnStatement.getProject());
|
||||
myStatementPtr = manager.createSmartPsiElementPointer(returnStatement);
|
||||
myValuePtr = manager.createSmartPsiElementPointer(returnValue);
|
||||
myIsLastStatement = ControlFlowUtils.blockCompletesWithStatement(codeBlock, returnStatement);
|
||||
myHasSideEffects = SideEffectChecker.mayHaveSideEffects(returnValue);
|
||||
myHasSideEffects = SideEffectChecker.mayHaveSideEffects(Objects.requireNonNull(returnStatement.getReturnValue()));
|
||||
}
|
||||
|
||||
private DeleteReturnFix(@NotNull PsiReturnStatement returnStatement, boolean isLastStatement, boolean hasSideEffects) {
|
||||
super(returnStatement);
|
||||
SmartPointerManager manager = SmartPointerManager.getInstance(returnStatement.getProject());
|
||||
myStatementPtr = manager.createSmartPsiElementPointer(returnStatement);
|
||||
myIsLastStatement = isLastStatement;
|
||||
myHasSideEffects = hasSideEffects;
|
||||
}
|
||||
|
||||
@Nls(capitalization = Nls.Capitalization.Sentence)
|
||||
@@ -55,7 +62,7 @@ public class DeleteReturnFix extends LocalQuickFixAndIntentionActionOnPsiElement
|
||||
@NotNull PsiElement endElement) {
|
||||
PsiReturnStatement returnStatement = myStatementPtr.getElement();
|
||||
if (returnStatement == null) return;
|
||||
PsiExpression returnValue = myValuePtr.getElement();
|
||||
PsiExpression returnValue = returnStatement.getReturnValue();
|
||||
if (returnValue == null) return;
|
||||
CommentTracker ct = new CommentTracker();
|
||||
if (myHasSideEffects) {
|
||||
@@ -69,4 +76,11 @@ public class DeleteReturnFix extends LocalQuickFixAndIntentionActionOnPsiElement
|
||||
PsiElement toDelete = myIsLastStatement ? returnStatement : returnValue;
|
||||
ct.deleteAndRestoreComments(toDelete);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable FileModifier getFileModifierForPreview(@NotNull PsiFile target) {
|
||||
PsiReturnStatement returnStatement = myStatementPtr.getElement();
|
||||
if (returnStatement == null) return null;
|
||||
return new DeleteReturnFix(QuickFixWrapper.findSameElementInCopy(returnStatement, target), myIsLastStatement, myHasSideEffects);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -267,10 +267,8 @@ public class QuickFixFactoryImpl extends QuickFixFactory {
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public IntentionAction createDeleteReturnFix(@NotNull PsiMethod method,
|
||||
@NotNull PsiReturnStatement returnStatement,
|
||||
@NotNull PsiExpression returnValue) {
|
||||
return new DeleteReturnFix(method, returnStatement, returnValue);
|
||||
public IntentionAction createDeleteReturnFix(@NotNull PsiMethod method, @NotNull PsiReturnStatement returnStatement) {
|
||||
return new DeleteReturnFix(method, returnStatement);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
Reference in New Issue
Block a user