From bdf9fbcfd5901ccf419c37528ffe51574da2693b Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Thu, 26 Oct 2023 10:48:37 +0200 Subject: [PATCH] [regexp] Regexp plugin quick-fixes converted to ModCommand GitOrigin-RevId: 9734abefacb311efc2ba9c42008da783e725458e --- .../DuplicateAlternationBranchInspection.java | 10 ++++------ .../DuplicateCharacterInClassInspection.java | 10 ++++++---- .../inspection/EmptyAlternationBranchInspection.java | 8 ++++---- .../inspection/EscapedMetaCharacterInspection.java | 7 ++++--- .../regexp/inspection/OctalEscapeInspection.java | 11 ++++++----- .../RedundantNestedCharacterClassInspection.java | 10 +++++----- .../RegExpRedundantClassElementInspection.java | 10 ++++------ .../inspection/RegExpRedundantEscapeInspection.java | 11 ++++++----- .../inspection/RegExpSimplifiableInspection.java | 12 ++++++++---- .../regexp/inspection/RepeatedSpaceInspection.java | 10 ++++++---- .../inspection/SingleCharAlternationInspection.java | 9 +++++---- .../UnnecessaryNonCapturingGroupInspection.java | 8 +++++--- .../inspection/custom/CustomRegExpInspection.java | 8 +++++--- .../java/codeInsight/IntentionPreviewTest.java | 7 ++++++- .../intellij/lang/impl/modcommand/PsiUpdateImpl.java | 5 ++--- 15 files changed, 76 insertions(+), 60 deletions(-) diff --git a/RegExpSupport/src/org/intellij/lang/regexp/inspection/DuplicateAlternationBranchInspection.java b/RegExpSupport/src/org/intellij/lang/regexp/inspection/DuplicateAlternationBranchInspection.java index 2a948a27313d..76d7f855f74b 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/inspection/DuplicateAlternationBranchInspection.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/inspection/DuplicateAlternationBranchInspection.java @@ -2,9 +2,9 @@ package org.intellij.lang.regexp.inspection; import com.intellij.codeInspection.LocalInspectionTool; -import com.intellij.codeInspection.LocalQuickFix; -import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.codeInspection.ProblemsHolder; +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.PsiElementVisitor; @@ -70,8 +70,7 @@ public class DuplicateAlternationBranchInspection extends LocalInspectionTool { } } - private static class DuplicateAlternationBranchFix implements LocalQuickFix { - + private static class DuplicateAlternationBranchFix extends PsiUpdateModCommandQuickFix { @Nls @NotNull @Override @@ -80,8 +79,7 @@ public class DuplicateAlternationBranchInspection extends LocalInspectionTool { } @Override - public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) { - final PsiElement element = descriptor.getPsiElement(); + protected void applyFix(@NotNull Project project, @NotNull PsiElement element, @NotNull ModPsiUpdater updater) { if (!(element instanceof RegExpBranch)) { return; } diff --git a/RegExpSupport/src/org/intellij/lang/regexp/inspection/DuplicateCharacterInClassInspection.java b/RegExpSupport/src/org/intellij/lang/regexp/inspection/DuplicateCharacterInClassInspection.java index 5baedd25ebe6..e88d37bb693d 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/inspection/DuplicateCharacterInClassInspection.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/inspection/DuplicateCharacterInClassInspection.java @@ -2,10 +2,12 @@ package org.intellij.lang.regexp.inspection; import com.intellij.codeInspection.LocalInspectionTool; -import com.intellij.codeInspection.LocalQuickFix; import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.codeInspection.ProblemsHolder; +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.PsiElementVisitor; import com.intellij.psi.PsiFile; import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil; @@ -65,7 +67,7 @@ public class DuplicateCharacterInClassInspection extends LocalInspectionTool { } } - private static final class DuplicateCharacterInClassFix implements LocalQuickFix { + private static final class DuplicateCharacterInClassFix extends PsiUpdateModCommandQuickFix { private final String myText; @@ -84,8 +86,8 @@ public class DuplicateCharacterInClassInspection extends LocalInspectionTool { } @Override - public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) { - descriptor.getPsiElement().delete(); + protected void applyFix(@NotNull Project project, @NotNull PsiElement element, @NotNull ModPsiUpdater updater) { + element.delete(); } } } diff --git a/RegExpSupport/src/org/intellij/lang/regexp/inspection/EmptyAlternationBranchInspection.java b/RegExpSupport/src/org/intellij/lang/regexp/inspection/EmptyAlternationBranchInspection.java index 028f99c48b5d..52e34820d3a3 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/inspection/EmptyAlternationBranchInspection.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/inspection/EmptyAlternationBranchInspection.java @@ -2,6 +2,8 @@ package org.intellij.lang.regexp.inspection; import com.intellij.codeInspection.*; +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.PsiElementVisitor; @@ -58,8 +60,7 @@ public class EmptyAlternationBranchInspection extends LocalInspectionTool { } } - private static class EmptyAlternationBranchFix implements LocalQuickFix { - + private static class EmptyAlternationBranchFix extends PsiUpdateModCommandQuickFix { @Nls @NotNull @Override @@ -68,8 +69,7 @@ public class EmptyAlternationBranchInspection extends LocalInspectionTool { } @Override - public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) { - final PsiElement element = descriptor.getPsiElement(); + protected void applyFix(@NotNull Project project, @NotNull PsiElement element, @NotNull ModPsiUpdater updater) { if (!(element.getParent() instanceof RegExpPattern)) return; element.getNextSibling().delete(); element.delete(); diff --git a/RegExpSupport/src/org/intellij/lang/regexp/inspection/EscapedMetaCharacterInspection.java b/RegExpSupport/src/org/intellij/lang/regexp/inspection/EscapedMetaCharacterInspection.java index cc314cdfc452..0f141d92ae85 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/inspection/EscapedMetaCharacterInspection.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/inspection/EscapedMetaCharacterInspection.java @@ -3,6 +3,8 @@ package org.intellij.lang.regexp.inspection; import com.intellij.codeInspection.*; import com.intellij.lang.ASTNode; +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.PsiElementVisitor; @@ -53,7 +55,7 @@ public class EscapedMetaCharacterInspection extends LocalInspectionTool { } } - private static class EscapedMetaCharacterFix implements LocalQuickFix { + private static class EscapedMetaCharacterFix extends PsiUpdateModCommandQuickFix { private final char myC; @@ -76,8 +78,7 @@ public class EscapedMetaCharacterInspection extends LocalInspectionTool { } @Override - public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) { - final PsiElement element = descriptor.getPsiElement(); + protected void applyFix(@NotNull Project project, @NotNull PsiElement element, @NotNull ModPsiUpdater updater) { if (!(element instanceof RegExpChar)) { return; } diff --git a/RegExpSupport/src/org/intellij/lang/regexp/inspection/OctalEscapeInspection.java b/RegExpSupport/src/org/intellij/lang/regexp/inspection/OctalEscapeInspection.java index 9fc8eec4f38e..14dd3fbb3000 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/inspection/OctalEscapeInspection.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/inspection/OctalEscapeInspection.java @@ -2,6 +2,8 @@ package org.intellij.lang.regexp.inspection; import com.intellij.codeInspection.*; +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.PsiElementVisitor; @@ -46,7 +48,7 @@ public class OctalEscapeInspection extends LocalInspectionTool { return (hex.length() == 1 ? "\\x0" : "\\x") + hex; } - private static class ReplaceWithHexEscapeFix implements LocalQuickFix { + private static class ReplaceWithHexEscapeFix extends PsiUpdateModCommandQuickFix { private final String myHex; ReplaceWithHexEscapeFix(String hex) { @@ -68,12 +70,11 @@ public class OctalEscapeInspection extends LocalInspectionTool { } @Override - public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) { - final PsiElement element = descriptor.getPsiElement(); - if (!(element instanceof RegExpChar)) { + protected void applyFix(@NotNull Project project, @NotNull PsiElement element, @NotNull ModPsiUpdater updater) { + if (!(element instanceof RegExpChar regExpChar)) { return; } - RegExpReplacementUtil.replaceInContext(element, buildReplacementText((RegExpChar)element)); + RegExpReplacementUtil.replaceInContext(element, buildReplacementText(regExpChar)); } } } \ No newline at end of file diff --git a/RegExpSupport/src/org/intellij/lang/regexp/inspection/RedundantNestedCharacterClassInspection.java b/RegExpSupport/src/org/intellij/lang/regexp/inspection/RedundantNestedCharacterClassInspection.java index ce0856203909..8176c732feb6 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/inspection/RedundantNestedCharacterClassInspection.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/inspection/RedundantNestedCharacterClassInspection.java @@ -2,10 +2,10 @@ package org.intellij.lang.regexp.inspection; import com.intellij.codeInspection.LocalInspectionTool; -import com.intellij.codeInspection.LocalQuickFix; -import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.codeInspection.util.IntentionFamilyName; +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.PsiElementVisitor; @@ -60,7 +60,7 @@ public class RedundantNestedCharacterClassInspection extends LocalInspectionTool } } - private static class RedundantNestedCharacterClassFix implements LocalQuickFix { + private static class RedundantNestedCharacterClassFix extends PsiUpdateModCommandQuickFix { @Override public @IntentionFamilyName @NotNull String getFamilyName() { @@ -68,8 +68,8 @@ public class RedundantNestedCharacterClassInspection extends LocalInspectionTool } @Override - public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) { - final PsiElement element = descriptor.getPsiElement().getParent(); + protected void applyFix(@NotNull Project project, @NotNull PsiElement element, @NotNull ModPsiUpdater updater) { + element = element.getParent(); if (element instanceof RegExpClass regExpClass) { final RegExpClassElement[] elements = regExpClass.getElements(); final PsiElement parent = regExpClass.getParent(); diff --git a/RegExpSupport/src/org/intellij/lang/regexp/inspection/RegExpRedundantClassElementInspection.java b/RegExpSupport/src/org/intellij/lang/regexp/inspection/RegExpRedundantClassElementInspection.java index 8f9f16a3c541..54e5952884cf 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/inspection/RegExpRedundantClassElementInspection.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/inspection/RegExpRedundantClassElementInspection.java @@ -2,9 +2,9 @@ package org.intellij.lang.regexp.inspection; import com.intellij.codeInspection.LocalInspectionTool; -import com.intellij.codeInspection.LocalQuickFix; -import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.codeInspection.ProblemsHolder; +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.PsiElementVisitor; @@ -66,7 +66,7 @@ public class RegExpRedundantClassElementInspection extends LocalInspectionTool { return classElement instanceof RegExpSimpleClass && ((RegExpSimpleClass)classElement).getKind().equals(NON_WORD); } - private static class RemoveRedundantClassElement implements LocalQuickFix { + private static class RemoveRedundantClassElement extends PsiUpdateModCommandQuickFix { private final String myClassElementText; private RemoveRedundantClassElement(String text) { myClassElementText = text; } @@ -82,9 +82,7 @@ public class RegExpRedundantClassElementInspection extends LocalInspectionTool { } @Override - public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) { - PsiElement element = descriptor.getPsiElement(); - if (element == null) return; + protected void applyFix(@NotNull Project project, @NotNull PsiElement element, @NotNull ModPsiUpdater updater) { element.delete(); } } diff --git a/RegExpSupport/src/org/intellij/lang/regexp/inspection/RegExpRedundantEscapeInspection.java b/RegExpSupport/src/org/intellij/lang/regexp/inspection/RegExpRedundantEscapeInspection.java index 7e80f0d00541..5a1b6006ff5c 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/inspection/RegExpRedundantEscapeInspection.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/inspection/RegExpRedundantEscapeInspection.java @@ -8,6 +8,8 @@ import com.intellij.codeInspection.ProblemsHolder; import com.intellij.codeInspection.options.OptPane; import com.intellij.codeInspection.ui.SingleCheckboxOptionsPanel; import com.intellij.lang.ASTNode; +import com.intellij.modcommand.ModPsiUpdater; +import com.intellij.modcommand.PsiUpdateModCommandQuickFix; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiElement; import org.intellij.lang.regexp.RegExpBundle; @@ -72,7 +74,7 @@ public class RegExpRedundantEscapeInspection extends LocalInspectionTool { } } - private static class RemoveRedundantEscapeFix implements LocalQuickFix { + private static class RemoveRedundantEscapeFix extends PsiUpdateModCommandQuickFix { @Nls @NotNull @@ -82,12 +84,11 @@ public class RegExpRedundantEscapeInspection extends LocalInspectionTool { } @Override - public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) { - final PsiElement element = descriptor.getPsiElement(); - if (!(element instanceof RegExpChar)) { + protected void applyFix(@NotNull Project project, @NotNull PsiElement element, @NotNull ModPsiUpdater updater) { + if (!(element instanceof RegExpChar regExpChar)) { return; } - RegExpReplacementUtil.replaceInContext(element, replacement((RegExpChar)element)); + RegExpReplacementUtil.replaceInContext(element, replacement(regExpChar)); } @NotNull diff --git a/RegExpSupport/src/org/intellij/lang/regexp/inspection/RegExpSimplifiableInspection.java b/RegExpSupport/src/org/intellij/lang/regexp/inspection/RegExpSimplifiableInspection.java index 9257cb106623..14d0b614eefd 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/inspection/RegExpSimplifiableInspection.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/inspection/RegExpSimplifiableInspection.java @@ -3,6 +3,9 @@ package org.intellij.lang.regexp.inspection; import com.intellij.codeInspection.*; import com.intellij.lang.ASTNode; +import com.intellij.modcommand.ModCommand; +import com.intellij.modcommand.ModCommandQuickFix; +import com.intellij.modcommand.PsiUpdateModCommandQuickFix; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElement; @@ -166,7 +169,7 @@ public class RegExpSimplifiableInspection extends LocalInspectionTool { }; } - private static class RegExpSimplifiableFix implements LocalQuickFix { + private static class RegExpSimplifiableFix extends ModCommandQuickFix { private final String myExpression; private final boolean myDelete; @@ -192,12 +195,13 @@ public class RegExpSimplifiableInspection extends LocalInspectionTool { } @Override - public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) { + public @NotNull ModCommand perform(@NotNull Project project, @NotNull ProblemDescriptor descriptor) { final PsiElement element = descriptor.getPsiElement(); if (!(element instanceof RegExpElement)) { - return; + return ModCommand.nop(); } - RegExpReplacementUtil.replaceInContext(element, myDelete ? "" : myExpression, descriptor.getTextRangeInElement()); + return ModCommand.psiUpdate(element, e -> + RegExpReplacementUtil.replaceInContext(e, myDelete ? "" : myExpression, descriptor.getTextRangeInElement())); } } } diff --git a/RegExpSupport/src/org/intellij/lang/regexp/inspection/RepeatedSpaceInspection.java b/RegExpSupport/src/org/intellij/lang/regexp/inspection/RepeatedSpaceInspection.java index 8a5aa3e84778..cfb33978e1af 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/inspection/RepeatedSpaceInspection.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/inspection/RepeatedSpaceInspection.java @@ -3,6 +3,8 @@ package org.intellij.lang.regexp.inspection; import com.intellij.codeInspection.*; import com.intellij.lang.injection.InjectedLanguageManager; +import com.intellij.modcommand.ModCommand; +import com.intellij.modcommand.ModCommandQuickFix; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElement; @@ -86,7 +88,7 @@ public class RepeatedSpaceInspection extends LocalInspectionTool { } } - private static class RepeatedSpaceFix implements LocalQuickFix { + private static class RepeatedSpaceFix extends ModCommandQuickFix { private final int myCount; RepeatedSpaceFix(int count) { @@ -108,10 +110,10 @@ public class RepeatedSpaceInspection extends LocalInspectionTool { } @Override - public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) { + public @NotNull ModCommand perform(@NotNull Project project, @NotNull ProblemDescriptor descriptor) { final PsiElement element = descriptor.getPsiElement(); if (!(element instanceof RegExpBranch)) { - return; + return ModCommand.nop(); } final InjectedLanguageManager injectedLanguageManager = InjectedLanguageManager.getInstance(element.getProject()); final TextRange range = descriptor.getTextRangeInElement(); @@ -128,7 +130,7 @@ public class RepeatedSpaceInspection extends LocalInspectionTool { } child = child.getNextSibling(); } - RegExpReplacementUtil.replaceInContext(element, text.toString()); + return ModCommand.psiUpdate(element, e -> RegExpReplacementUtil.replaceInContext(e, text.toString())); } } } diff --git a/RegExpSupport/src/org/intellij/lang/regexp/inspection/SingleCharAlternationInspection.java b/RegExpSupport/src/org/intellij/lang/regexp/inspection/SingleCharAlternationInspection.java index b31af5a99f96..055f8dcb2746 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/inspection/SingleCharAlternationInspection.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/inspection/SingleCharAlternationInspection.java @@ -2,6 +2,8 @@ package org.intellij.lang.regexp.inspection; import com.intellij.codeInspection.*; +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.PsiElementVisitor; @@ -51,7 +53,7 @@ public class SingleCharAlternationInspection extends LocalInspectionTool { return atoms.length == 1 && atoms[0] instanceof RegExpChar; } - private static class SingleCharAlternationFix implements LocalQuickFix { + private static class SingleCharAlternationFix extends PsiUpdateModCommandQuickFix { private final String myText; @@ -74,14 +76,13 @@ public class SingleCharAlternationInspection extends LocalInspectionTool { } @Override - public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) { - final PsiElement element = descriptor.getPsiElement(); + protected void applyFix(@NotNull Project project, @NotNull PsiElement element, @NotNull ModPsiUpdater updater) { if (!(element instanceof RegExpPattern pattern)) { return; } final PsiElement parent = pattern.getParent(); final PsiElement victim = - (parent instanceof RegExpGroup && ((RegExpGroup)parent).getType() == RegExpGroup.Type.NON_CAPTURING) ? parent : pattern; + (parent instanceof RegExpGroup group && group.getType() == RegExpGroup.Type.NON_CAPTURING) ? parent : pattern; final String replacementText = buildReplacementText(pattern); if (replacementText == null) { return; diff --git a/RegExpSupport/src/org/intellij/lang/regexp/inspection/UnnecessaryNonCapturingGroupInspection.java b/RegExpSupport/src/org/intellij/lang/regexp/inspection/UnnecessaryNonCapturingGroupInspection.java index 8cee00f4dad5..552bf0be5725 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/inspection/UnnecessaryNonCapturingGroupInspection.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/inspection/UnnecessaryNonCapturingGroupInspection.java @@ -6,6 +6,8 @@ import com.intellij.codeInspection.LocalQuickFix; import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.codeInspection.util.IntentionFamilyName; +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.PsiElementVisitor; @@ -78,15 +80,15 @@ public class UnnecessaryNonCapturingGroupInspection extends LocalInspectionTool return atoms.length != 1 ? null : atoms[0]; } - private static class UnnecessaryNonCapturingGroupFix implements LocalQuickFix { + private static class UnnecessaryNonCapturingGroupFix extends PsiUpdateModCommandQuickFix { @Override public @IntentionFamilyName @NotNull String getFamilyName() { return RegExpBundle.message("inspection.quick.fix.remove.unnecessary.non.capturing.group"); } @Override - public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) { - final PsiElement element = descriptor.getPsiElement().getParent(); + protected void applyFix(@NotNull Project project, @NotNull PsiElement element, @NotNull ModPsiUpdater updater) { + element = element.getParent(); if (!(element instanceof RegExpGroup group)) { return; } diff --git a/RegExpSupport/src/org/intellij/lang/regexp/inspection/custom/CustomRegExpInspection.java b/RegExpSupport/src/org/intellij/lang/regexp/inspection/custom/CustomRegExpInspection.java index bda599a0302d..ee1717934f9b 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/inspection/custom/CustomRegExpInspection.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/inspection/custom/CustomRegExpInspection.java @@ -8,6 +8,8 @@ import com.intellij.codeInspection.ex.*; import com.intellij.find.FindManager; import com.intellij.find.FindModel; import com.intellij.find.FindResult; +import com.intellij.modcommand.ModPsiUpdater; +import com.intellij.modcommand.PsiUpdateModCommandQuickFix; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.editor.Document; @@ -203,7 +205,7 @@ public class CustomRegExpInspection extends LocalInspectionTool implements Dynam configuration.getProblemDescriptor(), configuration.getSuppressId()); } - private static class CustomRegExpQuickFix implements LocalQuickFix { + private static class CustomRegExpQuickFix extends PsiUpdateModCommandQuickFix { private final int myStartOffset; private final int myEndOffset; private final String myReplacement; @@ -232,8 +234,8 @@ public class CustomRegExpInspection extends LocalInspectionTool implements Dynam } @Override - public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) { - PsiFile file = descriptor.getPsiElement().getContainingFile(); + protected void applyFix(@NotNull Project project, @NotNull PsiElement element, @NotNull ModPsiUpdater updater) { + PsiFile file = element.getContainingFile(); final Document document = file.getViewProvider().getDocument(); if (myOriginal.equals(document.getText(TextRange.create(myStartOffset, myEndOffset)))) { document.replaceString(myStartOffset, myEndOffset, myReplacement); diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/IntentionPreviewTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/IntentionPreviewTest.java index 1964423ce7a4..1badef735e41 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/IntentionPreviewTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/IntentionPreviewTest.java @@ -118,7 +118,12 @@ public class IntentionPreviewTest extends LightJavaCodeInsightFixtureTestCase { }"""); myFixture.enableInspections(new DuplicateCharacterInClassInspection()); IntentionAction action = myFixture.findSingleIntention("Remove duplicate '1' from character class"); - assertEquals("[\"123]", myFixture.getIntentionPreviewText(action)); + assertEquals(""" + import java.util.regex.Pattern; + + class Test { + Pattern p = Pattern.compile("[\\"123]"); + }""", myFixture.getIntentionPreviewText(action)); } public void testBindFieldsFromParameters() { diff --git a/platform/analysis-impl/src/com/intellij/lang/impl/modcommand/PsiUpdateImpl.java b/platform/analysis-impl/src/com/intellij/lang/impl/modcommand/PsiUpdateImpl.java index 13cf601b0d67..60307db58368 100644 --- a/platform/analysis-impl/src/com/intellij/lang/impl/modcommand/PsiUpdateImpl.java +++ b/platform/analysis-impl/src/com/intellij/lang/impl/modcommand/PsiUpdateImpl.java @@ -25,7 +25,6 @@ import com.intellij.psi.impl.file.PsiFileImplUtil; import com.intellij.psi.impl.source.PostprocessReformattingAspect; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.testFramework.LightVirtualFile; -import com.intellij.util.LocalTimeCounter; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -204,8 +203,8 @@ final class PsiUpdateImpl { } else { return PsiFileFactory.getInstance(project).createFileFromText( - origFile.getName(), origFile.getFileType(), manager.getUnescapedText(origFile), - LocalTimeCounter.currentTime(), false); + origFile.getName(), origFile.getLanguage(), manager.getUnescapedText(origFile), + false, true, true, origFile.getVirtualFile()); } }