diff --git a/java/java-impl/src/com/intellij/spellchecker/JavaSpellcheckingStrategy.java b/java/java-impl/src/com/intellij/spellchecker/JavaSpellcheckingStrategy.java
index 94b7c873fc18..4c195ab45679 100644
--- a/java/java-impl/src/com/intellij/spellchecker/JavaSpellcheckingStrategy.java
+++ b/java/java-impl/src/com/intellij/spellchecker/JavaSpellcheckingStrategy.java
@@ -4,6 +4,7 @@ package com.intellij.spellchecker;
import com.intellij.codeInspection.SuppressManager;
import com.intellij.codeInspection.util.ChronoUtil;
import com.intellij.openapi.project.DumbAware;
+import com.intellij.openapi.util.registry.Registry;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiLiteralExpression;
import com.intellij.psi.PsiMethod;
@@ -42,4 +43,9 @@ public final class JavaSpellcheckingStrategy extends SpellcheckingStrategy imple
return super.getTokenizer(element);
}
+
+ @Override
+ public boolean useTextLevelSpellchecking() {
+ return Registry.is("spellchecker.grazie.enabled");
+ }
}
diff --git a/plugins/grazie/src/test/testData/ide/language/markdown/Spellcheck.md b/plugins/grazie/src/test/testData/ide/language/markdown/Spellcheck.md
index c1dabe073c94..969ec76be6c3 100644
--- a/plugins/grazie/src/test/testData/ide/language/markdown/Spellcheck.md
+++ b/plugins/grazie/src/test/testData/ide/language/markdown/Spellcheck.md
@@ -1,46 +1,46 @@
-**C**orrect, **Pro**blem, **Pr**oblem, **Co**rrect
+**C**orrect, **Pro**blem, **Pr**oblem, **Co**rrect
-bc5ebcd0_1a55_484d_aadc_198faeb50db0
+bc5ebcd0_1a55_484d_aadc_198faeb50db0
-password: VxBFMd9YCKjq6PBFG54FIY3V
+password: VxBFMd9YCKjq6PBFG54FIY3V
-PostgreSQL
+PostgreSQL
-cherry-picked from cafebabe3690498eecb45dfedba4
+cherry-picked from cafebabe3690498eecb45dfedba4
-Xlint
Mindest- oder Regelstudienzeit,
-Eignungs- und Sprachtests,
-Hochschul- oder Fachhochschulreife,
-Ausbildungs- oder Praxisaufstieg
+Eignungs- und Sprachtests,
+Hochschul- oder Fachhochschulreife,
+Ausbildungs- oder Praxisaufstieg
-/Users/Olga.Doroshko/Library/Java
+/Users/Olga.Doroshko/Library/Java
-----BEGIN PUBLIC KEY-----
-MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALPwh7JEV7KNuZ0JGIoXz5XWv4bUkCMF
-HTZ8ZG50urBdSMBZmtW75AdKHv5qvXt5Q+cb6N3FOqOhPVQjBM5+iAMCAwEAAQ==
+MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALPwh7JEV7KNuZ0JGIoXz5XWv4bUkCMF
+HTZ8ZG50urBdSMBZmtW75AdKHv5qvXt5Q+cb6N3FOqOhPVQjBM5+iAMCAwEAAQ==
-----END PUBLIC KEY-----
-----BEGIN RSA PRIVATE KEY-----
-MIIBOgIBAAJBALPwh7JEV7KNuZ0JGIoXz5XWv4bUkCMFHTZ8ZG50urBdSMBZmtW7
-5AdKHv5qvXt5Q+cb6N3FOqOhPVQjBM5+iAMCAwEAAQJAD8dqv0gUVBbA6U62tuFD
-PNU7qxD9rN3aW2xldlYV7XErHX8iWW+zA0M+aiOE+mOEotTYPF2+zMyW4mHkxNRj
+MIIBOgIBAAJBALPwh7JEV7KNuZ0JGIoXz5XWv4bUkCMFHTZ8ZG50urBdSMBZmtW7
+5AdKHv5qvXt5Q+cb6N3FOqOhPVQjBM5+iAMCAwEAAQJAD8dqv0gUVBbA6U62tuFD
+PNU7qxD9rN3aW2xldlYV7XErHX8iWW+zA0M+aiOE+mOEotTYPF2+zMyW4mHkxNRj
cQIhAPO6KReZCUz3KgyJf88EO8z+2CkeRrbOkqU51daGS8VbAiEAuTPOQgAVe0WR
-bQ26FQWwyoCR7uEehhXImzuvYRehWpsCIQCn52h+1YdHgVzFy7rhTvU8r03KgyjD
-tzX0S0fNcPhUQQIgRF7dwimkIv4iKU+BM3AYbsvuhcMdvYId+yLaIHytdPECIATh
-iIRnMZOGZTqZZ2Ku9wz2F1vKln97vth3FwbO2qgn
+bQ26FQWwyoCR7uEehhXImzuvYRehWpsCIQCn52h+1YdHgVzFy7rhTvU8r03KgyjD
+tzX0S0fNcPhUQQIgRF7dwimkIv4iKU+BM3AYbsvuhcMdvYId+yLaIHytdPECIATh
+iIRnMZOGZTqZZ2Ku9wz2F1vKln97vth3FwbO2qgn
-----END RSA PRIVATE KEY-----
-LqAgHd9TFasfVYIgFxWHgoS1eq4xGvR+gSGZL0v8ZMk=
-1QkUKfW9XDLO+YxZwQbL1Vnx5rUThCJHeX8ClcT1X6DeY+gQyukcHizHkS+6HR0nTxmQWknFj6D9z/U8kdXsEA==
+LqAgHd9TFasfVYIgFxWHgoS1eq4xGvR+gSGZL0v8ZMk=
+1QkUKfW9XDLO+YxZwQbL1Vnx5rUThCJHeX8ClcT1X6DeY+gQyukcHizHkS+6HR0nTxmQWknFj6D9z/U8kdXsEA==
Random words:
-- RESTful
-- CAPM3
+- RESTful
+- CAPM3
- iDRAC
dafür // u + Unicode Combining Diaeresis Mark
diff --git a/plugins/grazie/src/test/testData/ide/language/xml/Spellcheck.html b/plugins/grazie/src/test/testData/ide/language/xml/Spellcheck.html
index e1ebfcc2702b..03c0eb4be70f 100644
--- a/plugins/grazie/src/test/testData/ide/language/xml/Spellcheck.html
+++ b/plugins/grazie/src/test/testData/ide/language/xml/Spellcheck.html
@@ -1 +1 @@
-amasons.com"/>
\ No newline at end of file
+
\ No newline at end of file
diff --git a/plugins/java-i18n/testData/inspections/spellchecker/Japanese.java b/plugins/java-i18n/testData/inspections/spellchecker/Japanese.java
index 950ca38dd81f..a0ce223b59f0 100644
--- a/plugins/java-i18n/testData/inspections/spellchecker/Japanese.java
+++ b/plugins/java-i18n/testData/inspections/spellchecker/Japanese.java
@@ -1,7 +1,7 @@
-/** Half width Katakana variants (FF00 - FFEF)
+/** Half width Katakana variants (FF00 - FFEF)
* ワタシハジャバガスキデス。
*/
-/** Full width ASCII variants (FF00 - FFEF)
+/** Full width ASCII variants (FF00 - FFEF)
* I LOVE JAVA
*/
/** Hiragana (3040 - 309F)
diff --git a/plugins/markdown/spellchecker/src/main/kotlin/org/intellij/plugins/markdown/spellchecker/MarkdownSpellcheckingStrategy.java b/plugins/markdown/spellchecker/src/main/kotlin/org/intellij/plugins/markdown/spellchecker/MarkdownSpellcheckingStrategy.java
index ca01af53dd12..92023669bf2a 100644
--- a/plugins/markdown/spellchecker/src/main/kotlin/org/intellij/plugins/markdown/spellchecker/MarkdownSpellcheckingStrategy.java
+++ b/plugins/markdown/spellchecker/src/main/kotlin/org/intellij/plugins/markdown/spellchecker/MarkdownSpellcheckingStrategy.java
@@ -2,6 +2,7 @@ package org.intellij.plugins.markdown.spellchecker;
import com.intellij.lang.ASTNode;
import com.intellij.openapi.project.DumbAware;
+import com.intellij.openapi.util.registry.Registry;
import com.intellij.psi.PsiElement;
import com.intellij.psi.impl.source.tree.TreeUtil;
import com.intellij.psi.tree.TokenSet;
@@ -12,21 +13,28 @@ import org.intellij.plugins.markdown.lang.MarkdownTokenTypes;
import org.jetbrains.annotations.NotNull;
final class MarkdownSpellcheckingStrategy extends SpellcheckingStrategy implements DumbAware {
- public static final TokenSet NO_SPELLCHECKING_TYPES = TokenSet.create(MarkdownElementTypes.CODE_BLOCK,
- MarkdownElementTypes.CODE_FENCE,
- MarkdownElementTypes.CODE_SPAN,
- MarkdownElementTypes.LINK_DESTINATION);
+ public static final TokenSet NO_SPELLCHECKING_TYPES = TokenSet.create(
+ MarkdownElementTypes.CODE_BLOCK,
+ MarkdownElementTypes.CODE_FENCE,
+ MarkdownElementTypes.CODE_SPAN,
+ MarkdownElementTypes.LINK_DESTINATION
+ );
@Override
public @NotNull Tokenizer getTokenizer(PsiElement element) {
final ASTNode node = element.getNode();
if (node == null || node.getElementType() != MarkdownTokenTypes.TEXT) {
- return SpellcheckingStrategy.EMPTY_TOKENIZER;
+ return EMPTY_TOKENIZER;
}
if (TreeUtil.findParent(node, NO_SPELLCHECKING_TYPES) != null) {
- return SpellcheckingStrategy.EMPTY_TOKENIZER;
+ return EMPTY_TOKENIZER;
}
- return SpellcheckingStrategy.TEXT_TOKENIZER;
+ return TEXT_TOKENIZER;
+ }
+
+ @Override
+ public boolean useTextLevelSpellchecking() {
+ return Registry.is("spellchecker.grazie.enabled");
}
}
diff --git a/spellchecker/src/com/intellij/spellchecker/inspections/SpellCheckingInspection.java b/spellchecker/src/com/intellij/spellchecker/inspections/SpellCheckingInspection.java
index 2252adafb6fb..3fd29283a34b 100644
--- a/spellchecker/src/com/intellij/spellchecker/inspections/SpellCheckingInspection.java
+++ b/spellchecker/src/com/intellij/spellchecker/inspections/SpellCheckingInspection.java
@@ -24,7 +24,10 @@ import com.intellij.spellchecker.SpellCheckerManager;
import com.intellij.spellchecker.grazie.diacritic.Diacritics;
import com.intellij.spellchecker.inspections.SpellcheckingExtension.SpellCheckingResult;
import com.intellij.spellchecker.inspections.SpellcheckingExtension.SpellingTypo;
-import com.intellij.spellchecker.tokenizer.*;
+import com.intellij.spellchecker.tokenizer.LanguageSpellchecking;
+import com.intellij.spellchecker.tokenizer.SpellcheckingStrategy;
+import com.intellij.spellchecker.tokenizer.SuppressibleSpellcheckingStrategy;
+import com.intellij.spellchecker.tokenizer.TokenConsumer;
import com.intellij.spellchecker.util.SpellCheckerBundle;
import com.intellij.util.Consumer;
import com.intellij.util.containers.CollectionFactory;
@@ -94,6 +97,7 @@ public final class SpellCheckingInspection extends LocalInspectionTool implement
return PsiElementVisitor.EMPTY_VISITOR;
}
var scopes = buildAllowedScopes();
+ SpellCheckerManager manager = SpellCheckerManager.getInstance(holder.getProject());
return new PsiElementVisitor() {
@Override
public void visitElement(final @NotNull PsiElement element) {
@@ -118,12 +122,13 @@ public final class SpellCheckingInspection extends LocalInspectionTool implement
return;
}
- inspect(element, session, strategy, holder);
+ inspect(manager, element, session, strategy, holder);
}
};
}
- private void inspect(@NotNull PsiElement element,
+ private void inspect(@NotNull SpellCheckerManager manager,
+ @NotNull PsiElement element,
@NotNull LocalInspectionToolSession session,
@NotNull SpellcheckingStrategy strategy,
@NotNull ProblemsHolder holder) {
@@ -137,7 +142,6 @@ public final class SpellCheckingInspection extends LocalInspectionTool implement
);
if (result == SpellCheckingResult.Checked) return;
- SpellCheckerManager manager = SpellCheckerManager.getInstance(holder.getProject());
Set scopes = buildAllowedScopes();
tokenize(
strategy, element,
diff --git a/spellchecker/src/com/intellij/spellchecker/quickfixes/ChangeTo.kt b/spellchecker/src/com/intellij/spellchecker/quickfixes/ChangeTo.kt
index 1256dd70dd21..03d2be6f79ff 100644
--- a/spellchecker/src/com/intellij/spellchecker/quickfixes/ChangeTo.kt
+++ b/spellchecker/src/com/intellij/spellchecker/quickfixes/ChangeTo.kt
@@ -8,7 +8,6 @@ import com.intellij.codeInsight.intention.choice.ChoiceTitleIntentionAction
import com.intellij.codeInsight.intention.choice.ChoiceVariantIntentionAction
import com.intellij.codeInsight.intention.choice.DefaultIntentionActionWithChoice
import com.intellij.codeInsight.intention.preview.IntentionPreviewUtils
-import com.intellij.codeInspection.util.IntentionName
import com.intellij.openapi.editor.Document
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.editor.impl.DocumentMarkupModel
@@ -27,19 +26,12 @@ import com.intellij.spellchecker.statistics.SpellcheckerRateTracker
import com.intellij.spellchecker.util.SpellCheckerBundle
import com.intellij.util.concurrency.ThreadingAssertions
-internal class ChangeTo(
+internal class ChangeTo @JvmOverloads constructor(
typo: String,
element: PsiElement,
private val range: TextRange,
- private val tracker: SpellcheckerRateTracker?,
+ private val tracker: SpellcheckerRateTracker? = null,
) : DefaultIntentionActionWithChoice, LazySuggestions(typo) {
- // To prevent API breakage
- constructor(typo: String, element: PsiElement, range: TextRange) : this(
- typo,
- element,
- range,
- null,
- )
private val pointer = SmartPointerManager.getInstance(element.project).createSmartPsiElementPointer(element, element.containingFile)
diff --git a/spellchecker/src/com/intellij/spellchecker/tokenizer/PlainTextSpellcheckingStrategy.kt b/spellchecker/src/com/intellij/spellchecker/tokenizer/PlainTextSpellcheckingStrategy.kt
index 6c9dcf73705e..d5cbeb7b59b4 100644
--- a/spellchecker/src/com/intellij/spellchecker/tokenizer/PlainTextSpellcheckingStrategy.kt
+++ b/spellchecker/src/com/intellij/spellchecker/tokenizer/PlainTextSpellcheckingStrategy.kt
@@ -1,4 +1,10 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.spellchecker.tokenizer
-class PlainTextSpellcheckingStrategy: SpellcheckingStrategy()
\ No newline at end of file
+import com.intellij.openapi.util.registry.Registry
+
+class PlainTextSpellcheckingStrategy: SpellcheckingStrategy() {
+ override fun useTextLevelSpellchecking(): Boolean {
+ return Registry.`is`("spellchecker.grazie.enabled")
+ }
+}
\ No newline at end of file
diff --git a/spellchecker/testData/inspection/commentsWithMistakes/longTest.txt b/spellchecker/testData/inspection/commentsWithMistakes/longTest.txt
index 3b33878f7abb..8075aec1a506 100644
--- a/spellchecker/testData/inspection/commentsWithMistakes/longTest.txt
+++ b/spellchecker/testData/inspection/commentsWithMistakes/longTest.txt
@@ -1 +1 @@
-YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEK
\ No newline at end of file
+YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEK
\ No newline at end of file
diff --git a/spellchecker/testData/inspection/quickfixes/joinedWordsChangeTo.after.txt b/spellchecker/testData/inspection/quickfixes/joinedWordsChangeTo.after.txt
index 97151ec9e1f8..105c9eae80d9 100644
--- a/spellchecker/testData/inspection/quickfixes/joinedWordsChangeTo.after.txt
+++ b/spellchecker/testData/inspection/quickfixes/joinedWordsChangeTo.after.txt
@@ -1 +1 @@
-someСorrectWordsAndTypo
\ No newline at end of file
+someCorrectWordsAndTypo
\ No newline at end of file
diff --git a/spellchecker/testData/inspection/quickfixes/severalJoinedTyposChangeTo.after.txt b/spellchecker/testData/inspection/quickfixes/severalJoinedTyposChangeTo.after.txt
index 891c2b1828da..36d1ca86105a 100644
--- a/spellchecker/testData/inspection/quickfixes/severalJoinedTyposChangeTo.after.txt
+++ b/spellchecker/testData/inspection/quickfixes/severalJoinedTyposChangeTo.after.txt
@@ -1 +1 @@
-SoomeTypoJooinedTogeether
\ No newline at end of file
+SomeTypoJoinedTogether
\ No newline at end of file
diff --git a/spellchecker/testData/inspection/quickfixes/typoInsideJoinedWordsChangeTo.after.txt b/spellchecker/testData/inspection/quickfixes/typoInsideJoinedWordsChangeTo.after.txt
index d718102a5279..8638c0b0029d 100644
--- a/spellchecker/testData/inspection/quickfixes/typoInsideJoinedWordsChangeTo.after.txt
+++ b/spellchecker/testData/inspection/quickfixes/typoInsideJoinedWordsChangeTo.after.txt
@@ -1 +1 @@
-someTypoAndСorrectWords
\ No newline at end of file
+someTypoAndCorrectWords
\ No newline at end of file
diff --git a/spellchecker/xml/src/XmlSpellcheckingStrategy.java b/spellchecker/xml/src/XmlSpellcheckingStrategy.java
index 912eb48bb139..61e44926aebe 100644
--- a/spellchecker/xml/src/XmlSpellcheckingStrategy.java
+++ b/spellchecker/xml/src/XmlSpellcheckingStrategy.java
@@ -4,6 +4,7 @@ package com.intellij.spellchecker.xml;
import com.intellij.codeInspection.SuppressQuickFix;
import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.util.TextRange;
+import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
import com.intellij.psi.impl.source.tree.LeafPsiElement;
@@ -94,6 +95,11 @@ public class XmlSpellcheckingStrategy extends SuppressibleSpellcheckingStrategy
return file == null || file.getLanguage() instanceof TemplateLanguage;
}
+ @Override
+ public boolean useTextLevelSpellchecking() {
+ return Registry.is("spellchecker.grazie.enabled");
+ }
+
@Override
protected boolean isLiteral(@NotNull PsiElement element) {
return element instanceof XmlAttributeValue || element instanceof XmlText;