derived xml languages becomes explicit dialects

This commit is contained in:
Dmitry Avdeev
2011-10-04 12:37:40 +04:00
parent 3fe1ce5623
commit 2230adbe5c
5 changed files with 24 additions and 11 deletions
@@ -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<Language> myDialects = new ArrayList<Language>();
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<Language> getDialects() {
return myDialects;
}
@Nullable
public static Language findLanguageByID(String id) {
final Collection<Language> languages = getRegisteredLanguages();
@@ -218,16 +218,23 @@ public class LocalInspectionsPass extends ProgressableTextEditorHighlightingPass
Divider.divideInsideAndOutside(myFile, myStartOffset, myEndOffset, myPriorityRange, inside, outside,
HighlightLevelUtil.AnalysisLevel.HIGHLIGHT_AND_INSPECT,true);
Set<String> languages = new HashSet<String>();
Set<Language> languages = new HashSet<Language>();
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<String> langIds = new HashSet<String>();
for (Language language : languages) {
langIds.add(language.getID());
for (Language dialect : language.getDialects()) {
langIds.add(dialect.getID());
}
}
List<LocalInspectionTool> tools = new ArrayList<LocalInspectionTool>();
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);
@@ -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() {
@@ -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() {
@@ -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);
}