Migrate ChangeTypeQuickFix and PyMoveAttributeToInitQuickFix to ModCommand

PY-65297

GitOrigin-RevId: 52f681116076ee12e18d24e19a6c1383a53b3d31
This commit is contained in:
Georgii Ustinov
2023-12-15 16:54:57 +00:00
committed by intellij-monorepo-bot
parent eb35f95a8d
commit 050cc32fec
2 changed files with 11 additions and 22 deletions
@@ -2,6 +2,8 @@
package com.jetbrains.python.inspections;
import com.intellij.codeInspection.*;
import com.intellij.modcommand.ModPsiUpdater;
import com.intellij.modcommand.PsiUpdateModCommandQuickFix;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.NlsSafe;
import com.intellij.psi.PsiElement;
@@ -121,9 +123,8 @@ public final class PyDocstringTypesInspection extends PyInspection {
}
private static final class ChangeTypeQuickFix implements LocalQuickFix {
private static final class ChangeTypeQuickFix extends PsiUpdateModCommandQuickFix {
private final String myParamName;
@SafeFieldForPreview
private final Substring myTypeSubstring;
private final String myNewType;
@@ -146,12 +147,12 @@ public final class PyDocstringTypesInspection extends PyInspection {
}
@Override
public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) {
public void applyFix(@NotNull Project project, @NotNull PsiElement element, @NotNull ModPsiUpdater updater) {
String newValue = myTypeSubstring.getTextRange().replace(myTypeSubstring.getSuperString(), myNewType);
PyElementGenerator elementGenerator = PyElementGenerator.getInstance(project);
final PyStringLiteralExpression stringLiteralExpression = as(descriptor.getPsiElement(), PyStringLiteralExpression.class);
final PyStringLiteralExpression stringLiteralExpression = as(updater, PyStringLiteralExpression.class);
if (stringLiteralExpression != null) {
stringLiteralExpression.replace(elementGenerator.createDocstring(newValue).getExpression());
}
@@ -1,10 +1,8 @@
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.jetbrains.python.inspections.quickfix;
import com.intellij.codeInsight.FileModificationService;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.codeInspection.ProblemDescriptor;
import com.intellij.openapi.application.WriteAction;
import com.intellij.modcommand.ModPsiUpdater;
import com.intellij.modcommand.PsiUpdateModCommandQuickFix;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement;
import com.intellij.psi.util.PsiTreeUtil;
@@ -15,7 +13,7 @@ import com.jetbrains.python.psi.PyStatementList;
import com.jetbrains.python.psi.PyTargetExpression;
import org.jetbrains.annotations.NotNull;
public class PyMoveAttributeToInitQuickFix implements LocalQuickFix {
public class PyMoveAttributeToInitQuickFix extends PsiUpdateModCommandQuickFix {
public PyMoveAttributeToInitQuickFix() {
}
@@ -27,25 +25,15 @@ public class PyMoveAttributeToInitQuickFix implements LocalQuickFix {
}
@Override
public void applyFix(@NotNull final Project project, @NotNull final ProblemDescriptor descriptor) {
final PsiElement element = descriptor.getPsiElement();
public void applyFix(@NotNull final Project project, @NotNull final PsiElement element, @NotNull ModPsiUpdater updater) {
if (!(element instanceof PyTargetExpression targetExpression)) return;
final PyClass containingClass = targetExpression.getContainingClass();
final PyAssignmentStatement assignment = PsiTreeUtil.getParentOfType(element, PyAssignmentStatement.class);
if (containingClass == null || assignment == null) return;
if (!FileModificationService.getInstance().preparePsiElementForWrite(containingClass)) return;
WriteAction.run(() -> {
AddFieldQuickFix.addFieldToInit(project, containingClass, ((PyTargetExpression)element).getName(), x -> assignment);
removeDefinition(assignment);
});
}
@Override
public boolean startInWriteAction() {
return false;
AddFieldQuickFix.addFieldToInit(project, containingClass, ((PyTargetExpression)element).getName(), x -> assignment);
removeDefinition(assignment);
}
private static void removeDefinition(PyAssignmentStatement assignment) {