DeleteReturnFix preview-friendly

GitOrigin-RevId: fba8f7799f4f45f3b30b4587f2135fe594da26c3
This commit is contained in:
Tagir Valeev
2020-04-10 13:18:23 +07:00
committed by intellij-monorepo-bot
parent e39697d463
commit 542f40ff5c
4 changed files with 25 additions and 16 deletions

View File

@@ -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);

View File

@@ -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));
}
}

View File

@@ -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);
}
}

View File

@@ -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