package com.intellij.javascript.flex.mxml;
import com.intellij.codeHighlighting.Pass;
import com.intellij.codeInsight.daemon.LineMarkerInfo;
import com.intellij.codeInsight.daemon.LineMarkerProvider;
import com.intellij.icons.AllIcons;
import com.intellij.lang.javascript.JavaScriptSupportLoader;
import com.intellij.lang.javascript.highlighting.JavaScriptLineMarkerProvider;
import com.intellij.lang.javascript.psi.ecmal4.JSClass;
import com.intellij.lang.javascript.psi.ecmal4.XmlBackedJSClass;
import com.intellij.lang.javascript.psi.ecmal4.XmlBackedJSClassFactory;
import com.intellij.lang.javascript.search.JSClassSearch;
import com.intellij.openapi.editor.markup.GutterIconRenderer;
import com.intellij.openapi.progress.ProgressManager;
import com.intellij.psi.PsiElement;
import com.intellij.psi.xml.XmlDocument;
import com.intellij.psi.xml.XmlTag;
import com.intellij.psi.xml.XmlToken;
import com.intellij.util.Query;
import com.intellij.xml.util.XmlTagUtil;
import org.jetbrains.annotations.NotNull;
import java.util.Collection;
import java.util.List;
public class XmlBackedClassLineMarkerProvider implements LineMarkerProvider {
public LineMarkerInfo getLineMarkerInfo(@NotNull PsiElement element) {
return null;
}
public void collectSlowLineMarkers(@NotNull List<PsiElement> elements, @NotNull Collection<LineMarkerInfo> result) {
for (PsiElement element : elements) {
ProgressManager.checkCanceled();
if (element instanceof XmlTag &&
element.getParent() instanceof XmlDocument &&
element.getContainingFile() != null &&
JavaScriptSupportLoader.isFlexMxmFile(element.getContainingFile())) {
final XmlBackedJSClass clazz = XmlBackedJSClassFactory.getInstance().getXmlBackedClass((XmlTag)element);
Query<JSClass> classQuery = JSClassSearch.searchClassInheritors(clazz, true);
XmlToken nameElement = XmlTagUtil.getStartTagNameElement((XmlTag)element);
if (classQuery.findFirst() != null && nameElement != null) {
result.add(new LineMarkerInfo<>(clazz, nameElement.getTextRange(), AllIcons.Gutter.OverridenMethod,
Pass.LINE_MARKERS,
JavaScriptLineMarkerProvider.ourClassInheritorsTooltipProvider,
JavaScriptLineMarkerProvider.ourClassInheritorsNavHandler, GutterIconRenderer.Alignment.RIGHT));
}
}
}
}
}