From 1339ccbc9a3b11e7ffb7dd5797f372aed892aa8d Mon Sep 17 00:00:00 2001 From: Denis Mukhametianov Date: Sun, 5 May 2024 12:24:29 +0200 Subject: [PATCH] [spellchecker] migrate quick fixes creation to SpellCheckerQuickFixFactory GitOrigin-RevId: dc14505126ac82d997bace928d0dea8bfc48d347 --- .../inspections/SpellCheckingInspection.java | 10 ++--- .../tokenizer/SpellcheckingStrategy.java | 39 +++++++++---------- 2 files changed, 24 insertions(+), 25 deletions(-) diff --git a/spellchecker/src/com/intellij/spellchecker/inspections/SpellCheckingInspection.java b/spellchecker/src/com/intellij/spellchecker/inspections/SpellCheckingInspection.java index 615fc3f544db..40df512c4632 100644 --- a/spellchecker/src/com/intellij/spellchecker/inspections/SpellCheckingInspection.java +++ b/spellchecker/src/com/intellij/spellchecker/inspections/SpellCheckingInspection.java @@ -15,7 +15,6 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElementVisitor; import com.intellij.psi.PsiFile; import com.intellij.spellchecker.SpellCheckerManager; -import com.intellij.spellchecker.quickfixes.SpellCheckerQuickFix; import com.intellij.spellchecker.tokenizer.*; import com.intellij.spellchecker.util.SpellCheckerBundle; import com.intellij.util.Consumer; @@ -139,15 +138,16 @@ public final class SpellCheckingInspection extends LocalInspectionTool { tokenizer.tokenize(element, consumer); } - private static void addBatchDescriptor(PsiElement element, + private static void addBatchDescriptor(@NotNull PsiElement element, @NotNull TextRange textRange, + @NotNull String word, @NotNull ProblemsHolder holder) { - SpellCheckerQuickFix[] fixes = SpellcheckingStrategy.getDefaultBatchFixes(element); + var fixes = SpellcheckingStrategy.getDefaultBatchFixes(element, textRange, word); ProblemDescriptor problemDescriptor = createProblemDescriptor(element, textRange, fixes, false); holder.registerProblem(problemDescriptor); } - private static void addRegularDescriptor(PsiElement element, @NotNull TextRange textRange, @NotNull ProblemsHolder holder, + private static void addRegularDescriptor(@NotNull PsiElement element, @NotNull TextRange textRange, @NotNull ProblemsHolder holder, boolean useRename, String wordWithTypo) { SpellcheckingStrategy strategy = getSpellcheckingStrategy(element, element.getLanguage()); @@ -240,7 +240,7 @@ public final class SpellCheckingInspection extends LocalInspectionTool { } else { myAlreadyChecked.add(word); - addBatchDescriptor(myElement, range, myHolder); + addBatchDescriptor(myElement, range, word, myHolder); } } } diff --git a/spellchecker/src/com/intellij/spellchecker/tokenizer/SpellcheckingStrategy.java b/spellchecker/src/com/intellij/spellchecker/tokenizer/SpellcheckingStrategy.java index 4bddde125cf1..6905e0880b64 100644 --- a/spellchecker/src/com/intellij/spellchecker/tokenizer/SpellcheckingStrategy.java +++ b/spellchecker/src/com/intellij/spellchecker/tokenizer/SpellcheckingStrategy.java @@ -14,20 +14,17 @@ import com.intellij.psi.*; import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil; import com.intellij.psi.tree.IElementType; import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.spellchecker.DictionaryLayer; import com.intellij.spellchecker.DictionaryLayersProvider; import com.intellij.spellchecker.inspections.PlainTextSplitter; import com.intellij.spellchecker.inspections.SpellCheckingInspection; -import com.intellij.spellchecker.quickfixes.ChangeTo; -import com.intellij.spellchecker.quickfixes.RenameTo; -import com.intellij.spellchecker.quickfixes.SaveTo; -import com.intellij.spellchecker.quickfixes.SpellCheckerQuickFix; +import com.intellij.spellchecker.quickfixes.*; import com.intellij.spellchecker.settings.SpellCheckerSettings; import com.intellij.util.KeyedLazyInstance; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; -import java.util.Objects; import java.util.Set; /** @@ -119,42 +116,44 @@ public class SpellcheckingStrategy { && InjectedLanguageUtil.hasInjections((PsiLanguageInjectionHost)element); } - public LocalQuickFix[] getRegularFixes(PsiElement element, + public LocalQuickFix[] getRegularFixes(@NotNull PsiElement element, @NotNull TextRange textRange, boolean useRename, String typo) { return getDefaultRegularFixes(useRename, typo, element, textRange); } - public static LocalQuickFix[] getDefaultRegularFixes(boolean useRename, String typo, @Nullable PsiElement element, + public static LocalQuickFix[] getDefaultRegularFixes(boolean useRename, + String typo, + @NotNull PsiElement element, @NotNull TextRange range) { ArrayList result = new ArrayList<>(); if (useRename && PsiTreeUtil.getNonStrictParentOfType(element, PsiNamedElement.class) != null) { - result.add(new RenameTo()); - } else if (element != null) { - result.addAll(new ChangeTo(typo, element, range).getAllAsFixes()); - } - - if (element == null) { - result.add(new SaveTo(typo)); - return result.toArray(LocalQuickFix.EMPTY_ARRAY); + result.add(SpellCheckerQuickFixFactory.rename(element)); + } else { + result.addAll(SpellCheckerQuickFixFactory.changeToVariants(element, range, typo)); } final SpellCheckerSettings settings = SpellCheckerSettings.getInstance(element.getProject()); if (settings.isUseSingleDictionaryToSave()) { - result.add(new SaveTo(typo, DictionaryLayersProvider.getLayer(element.getProject(), settings.getDictionaryToSave()))); + DictionaryLayer layer = DictionaryLayersProvider.getLayer(element.getProject(), settings.getDictionaryToSave()); + result.add(SpellCheckerQuickFixFactory.saveTo(element, range, typo, layer)); return result.toArray(LocalQuickFix.EMPTY_ARRAY); } - result.add(new SaveTo(typo)); + result.add(SpellCheckerQuickFixFactory.saveTo(element, range, typo)); return result.toArray(LocalQuickFix.EMPTY_ARRAY); } - public static SpellCheckerQuickFix[] getDefaultBatchFixes(PsiElement element) { + public static LocalQuickFix[] getDefaultBatchFixes( + @NotNull PsiElement element, + @NotNull TextRange textRange, + @NotNull String word + ) { return DictionaryLayersProvider.getAllLayers(element.getProject()) - .stream().map(it -> new SaveTo(it)) - .toArray(SpellCheckerQuickFix[]::new); + .stream().map(it -> SpellCheckerQuickFixFactory.saveTo(element, textRange, word, it)) + .toArray(LocalQuickFix[]::new); } public boolean isMyContext(@NotNull PsiElement element) {