IDEA-112979 spellchecker inspection should be suppressed for symbols user cannot edit

This commit is contained in:
Eugene Kudelevsky
2013-08-30 22:42:44 +04:00
parent 584c7321a8
commit aff844a25a
3 changed files with 20 additions and 12 deletions
@@ -35,7 +35,7 @@
<spellchecker.support language="TEXT" implementationClass="com.intellij.spellchecker.tokenizer.SpellcheckingStrategy"/>
<spellchecker.support language="HTML" implementationClass="com.intellij.spellchecker.tokenizer.HtmlSpellcheckingStrategy"/>
<spellchecker.support language="XML" implementationClass="com.intellij.spellchecker.xml.XmlSpellcheckingStrategy"/>
<spellchecker.support language="XML" implementationClass="com.intellij.spellchecker.xml.XmlSpellcheckingStrategy" id="xml"/>
<spellchecker.bundledDictionaryProvider implementation="com.intellij.spellchecker.DefaultBundledDictionariesProvider"/>
<projectService serviceImplementation="com.intellij.spellchecker.state.ProjectDictionaryState"/>
@@ -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)
@@ -85,7 +85,7 @@ public class SpellcheckingStrategy {
return BATCH_FIXES;
}
private static class XmlAttributeValueTokenizer extends Tokenizer<XmlAttributeValue> {
protected static class XmlAttributeValueTokenizer extends Tokenizer<XmlAttributeValue> {
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;
}
}