[spellchecker] migrate quick fixes creation to SpellCheckerQuickFixFactory

GitOrigin-RevId: dc14505126ac82d997bace928d0dea8bfc48d347
This commit is contained in:
Denis Mukhametianov
2024-05-05 12:24:29 +02:00
committed by intellij-monorepo-bot
parent 5a8efdfc97
commit 1339ccbc9a
2 changed files with 24 additions and 25 deletions

View File

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

View File

@@ -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<LocalQuickFix> 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) {