From 2230adbe5c17e98bd6151b35d975143bb5f7bc10 Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Tue, 4 Oct 2011 12:35:01 +0400 Subject: [PATCH] derived xml languages becomes explicit dialects --- .../core-api/src/com/intellij/lang/Language.java | 13 +++++++++---- .../daemon/impl/LocalInspectionsPass.java | 15 +++++++++++---- .../src/com/intellij/lang/html/HTMLLanguage.java | 2 +- .../com/intellij/lang/xhtml/XHTMLLanguage.java | 2 +- .../src/com/intellij/lang/xml/XMLLanguage.java | 3 ++- 5 files changed, 24 insertions(+), 11 deletions(-) diff --git a/platform/core-api/src/com/intellij/lang/Language.java b/platform/core-api/src/com/intellij/lang/Language.java index 985004a5e1b8..f7b39847e8b5 100644 --- a/platform/core-api/src/com/intellij/lang/Language.java +++ b/platform/core-api/src/com/intellij/lang/Language.java @@ -26,10 +26,7 @@ import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Map; +import java.util.*; /** * The base class for all programming language support implementations. Specific language implementations should inherit from this class @@ -48,6 +45,7 @@ public abstract class Language extends UserDataHolderBase { private final Language myBaseLanguage; private final String myID; private final String[] myMimeTypes; + private List myDialects = new ArrayList(); public static final Language ANY = new Language("") { @Override public String toString() { @@ -78,6 +76,9 @@ public abstract class Language extends UserDataHolderBase { if (prev != null) { LOG.error("Language with ID '" + ID + "' is already registered: "+prev.getClass()); } + if (baseLanguage != null) { + baseLanguage.myDialects.add(this); + } } /** @@ -166,6 +167,10 @@ public abstract class Language extends UserDataHolderBase { return false; } + public List getDialects() { + return myDialects; + } + @Nullable public static Language findLanguageByID(String id) { final Collection languages = getRegisteredLanguages(); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java index 74e0059f0f86..9c16a1c7725e 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java @@ -218,16 +218,23 @@ public class LocalInspectionsPass extends ProgressableTextEditorHighlightingPass Divider.divideInsideAndOutside(myFile, myStartOffset, myEndOffset, myPriorityRange, inside, outside, HighlightLevelUtil.AnalysisLevel.HIGHLIGHT_AND_INSPECT,true); - Set languages = new HashSet(); + Set languages = new HashSet(); for (PsiElement element : inside) { - languages.add(element.getLanguage().getID()); + languages.add(element.getLanguage()); } for (PsiElement element : outside) { - languages.add(element.getLanguage().getID()); + languages.add(element.getLanguage()); + } + Set langIds = new HashSet(); + for (Language language : languages) { + langIds.add(language.getID()); + for (Language dialect : language.getDialects()) { + langIds.add(dialect.getID()); + } } List tools = new ArrayList(); for (LocalInspectionToolWrapper wrapper : toolWrappers) { - if (wrapper.getLanguage() == null || languages.contains(wrapper.getLanguage())) { + if (wrapper.getLanguage() == null || langIds.contains(wrapper.getLanguage())) { LocalInspectionTool tool = wrapper.getTool(); if (!checkDumbAwareness || tool instanceof DumbAware) { tools.add(tool); diff --git a/xml/impl/src/com/intellij/lang/html/HTMLLanguage.java b/xml/impl/src/com/intellij/lang/html/HTMLLanguage.java index 5aff18e2e88e..4c4cbca0d6d1 100644 --- a/xml/impl/src/com/intellij/lang/html/HTMLLanguage.java +++ b/xml/impl/src/com/intellij/lang/html/HTMLLanguage.java @@ -31,7 +31,7 @@ public class HTMLLanguage extends XMLLanguage { public static final HTMLLanguage INSTANCE = new HTMLLanguage(); private HTMLLanguage() { - super("HTML", "text/html", "text/htmlh"); + super(XMLLanguage.INSTANCE, "HTML", "text/html", "text/htmlh"); SyntaxHighlighterFactory.LANGUAGE_FACTORY.addExplicitExtension(this, new SingleLazyInstanceSyntaxHighlighterFactory() { @NotNull protected SyntaxHighlighter createHighlighter() { diff --git a/xml/impl/src/com/intellij/lang/xhtml/XHTMLLanguage.java b/xml/impl/src/com/intellij/lang/xhtml/XHTMLLanguage.java index 263d1efece5c..52bb56d9e3d0 100644 --- a/xml/impl/src/com/intellij/lang/xhtml/XHTMLLanguage.java +++ b/xml/impl/src/com/intellij/lang/xhtml/XHTMLLanguage.java @@ -31,7 +31,7 @@ public class XHTMLLanguage extends XMLLanguage { public static final XHTMLLanguage INSTANCE = new XHTMLLanguage(); private XHTMLLanguage() { - super("XHTML", "text/xhtml", "application/xhtml+xml"); + super(XMLLanguage.INSTANCE, "XHTML", "text/xhtml", "application/xhtml+xml"); SyntaxHighlighterFactory.LANGUAGE_FACTORY.addExplicitExtension(this, new SingleLazyInstanceSyntaxHighlighterFactory() { @NotNull protected SyntaxHighlighter createHighlighter() { diff --git a/xml/impl/src/com/intellij/lang/xml/XMLLanguage.java b/xml/impl/src/com/intellij/lang/xml/XMLLanguage.java index 6ac7beb60c4b..872cc7564883 100644 --- a/xml/impl/src/com/intellij/lang/xml/XMLLanguage.java +++ b/xml/impl/src/com/intellij/lang/xml/XMLLanguage.java @@ -38,7 +38,7 @@ public class XMLLanguage extends CompositeLanguage { protected static final EncodeEachSymbolPolicy ENCODE_EACH_SYMBOL_POLICY = new EncodeEachSymbolPolicy(); private XMLLanguage() { - this("XML", "text/xml"); + super("XML", "text/xml"); SyntaxHighlighterFactory.LANGUAGE_FACTORY.addExplicitExtension(this, new SingleLazyInstanceSyntaxHighlighterFactory() { @NotNull @@ -48,6 +48,7 @@ public class XMLLanguage extends CompositeLanguage { }); } + @Deprecated protected XMLLanguage(@NonNls String name, @NonNls String... mime) { super(name, mime); }