From aff844a25a79d072bb332cc185de52d98461fe3f Mon Sep 17 00:00:00 2001 From: Eugene Kudelevsky Date: Fri, 30 Aug 2013 21:09:53 +0400 Subject: [PATCH] IDEA-112979 spellchecker inspection should be suppressed for symbols user cannot edit --- .../src/META-INF/SpellCheckerPlugin.xml | 2 +- .../inspections/SpellCheckingInspection.java | 24 +++++++++++-------- .../tokenizer/SpellcheckingStrategy.java | 6 ++++- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/spellchecker/src/META-INF/SpellCheckerPlugin.xml b/spellchecker/src/META-INF/SpellCheckerPlugin.xml index e9ad782766e9..a6108edac1ff 100644 --- a/spellchecker/src/META-INF/SpellCheckerPlugin.xml +++ b/spellchecker/src/META-INF/SpellCheckerPlugin.xml @@ -35,7 +35,7 @@ - + diff --git a/spellchecker/src/com/intellij/spellchecker/inspections/SpellCheckingInspection.java b/spellchecker/src/com/intellij/spellchecker/inspections/SpellCheckingInspection.java index f6f0d88fa775..c27047c96308 100644 --- a/spellchecker/src/com/intellij/spellchecker/inspections/SpellCheckingInspection.java +++ b/spellchecker/src/com/intellij/spellchecker/inspections/SpellCheckingInspection.java @@ -61,7 +61,7 @@ public class SpellCheckingInspection extends LocalInspectionTool implements Batc @Override public SuppressQuickFix[] getBatchSuppressActions(@Nullable PsiElement element) { if (element != null) { - SpellcheckingStrategy strategy = LanguageSpellchecking.INSTANCE.forLanguage(element.getLanguage()); + SpellcheckingStrategy strategy = getSpellcheckingStrategy(element, element.getLanguage()); if(strategy instanceof SuppressibleSpellcheckingStrategy) { return ((SuppressibleSpellcheckingStrategy)strategy).getSuppressActions(element, getShortName()); } @@ -69,9 +69,18 @@ public class SpellCheckingInspection extends LocalInspectionTool implements Batc return SuppressQuickFix.EMPTY_ARRAY; } + private static SpellcheckingStrategy getSpellcheckingStrategy(@NotNull PsiElement element, @NotNull Language language) { + for (SpellcheckingStrategy strategy : LanguageSpellchecking.INSTANCE.allForLanguage(language)) { + if (strategy.isMyContext(element)) { + return strategy; + } + } + return null; + } + @Override public boolean isSuppressedFor(@NotNull PsiElement element) { - SpellcheckingStrategy strategy = LanguageSpellchecking.INSTANCE.forLanguage(element.getLanguage()); + SpellcheckingStrategy strategy = getSpellcheckingStrategy(element, element.getLanguage()); return strategy instanceof SuppressibleSpellcheckingStrategy && ((SuppressibleSpellcheckingStrategy)strategy).isSuppressedFor(element, getShortName()); } @@ -94,11 +103,6 @@ public class SpellCheckingInspection extends LocalInspectionTool implements Batc return SpellCheckerManager.getHighlightDisplayLevel(); } - @Nullable - private static SpellcheckingStrategy getFactoryByLanguage(@NotNull Language lang) { - return LanguageSpellchecking.INSTANCE.forLanguage(lang); - } - @Override @NotNull public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, final boolean isOnTheFly) { @@ -146,7 +150,7 @@ public class SpellCheckingInspection extends LocalInspectionTool implements Batc * @param consumer the consumer of tokens */ public static void tokenize(@NotNull final PsiElement element, @NotNull final Language language, TokenConsumer consumer) { - final SpellcheckingStrategy factoryByLanguage = getFactoryByLanguage(language); + final SpellcheckingStrategy factoryByLanguage = getSpellcheckingStrategy(element, language); if(factoryByLanguage==null) return; Tokenizer tokenizer = factoryByLanguage.getTokenizer(element); //noinspection unchecked @@ -155,7 +159,7 @@ public class SpellCheckingInspection extends LocalInspectionTool implements Batc private static void addBatchDescriptor(PsiElement element, int offset, @NotNull TextRange textRange, @NotNull ProblemsHolder holder) { - final SpellcheckingStrategy strategy = getFactoryByLanguage(element.getLanguage()); + final SpellcheckingStrategy strategy = getSpellcheckingStrategy(element, element.getLanguage()); SpellCheckerQuickFix[] fixes = strategy != null ? strategy.getBatchFixes(element, offset, textRange) @@ -166,7 +170,7 @@ public class SpellCheckingInspection extends LocalInspectionTool implements Batc private static void addRegularDescriptor(PsiElement element, int offset, @NotNull TextRange textRange, @NotNull ProblemsHolder holder, boolean useRename, String wordWithTypo) { - SpellcheckingStrategy strategy = getFactoryByLanguage(element.getLanguage()); + SpellcheckingStrategy strategy = getSpellcheckingStrategy(element, element.getLanguage()); SpellCheckerQuickFix[] fixes = strategy != null ? strategy.getRegularFixes(element, offset, textRange, useRename, wordWithTypo) diff --git a/spellchecker/src/com/intellij/spellchecker/tokenizer/SpellcheckingStrategy.java b/spellchecker/src/com/intellij/spellchecker/tokenizer/SpellcheckingStrategy.java index cc70a7daf351..95cd1e0f0f4c 100644 --- a/spellchecker/src/com/intellij/spellchecker/tokenizer/SpellcheckingStrategy.java +++ b/spellchecker/src/com/intellij/spellchecker/tokenizer/SpellcheckingStrategy.java @@ -85,7 +85,7 @@ public class SpellcheckingStrategy { return BATCH_FIXES; } - private static class XmlAttributeValueTokenizer extends Tokenizer { + protected static class XmlAttributeValueTokenizer extends Tokenizer { public void tokenize(@NotNull final XmlAttributeValue element, final TokenConsumer consumer) { if (element instanceof PsiLanguageInjectionHost && InjectedLanguageUtil.hasInjections((PsiLanguageInjectionHost)element)) return; @@ -107,4 +107,8 @@ public class SpellcheckingStrategy { return true; } } + + public boolean isMyContext(@NotNull PsiElement element) { + return true; + } }