package com.intellij.lang.javascript.flex.presentation; import com.intellij.ide.IconProvider; import com.intellij.lang.javascript.JavaScriptSupportLoader; import com.intellij.lang.javascript.psi.ecmal4.XmlBackedJSClassFactory; import com.intellij.lang.javascript.psi.JSNamedElement; import com.intellij.lang.javascript.psi.ecmal4.JSClass; import com.intellij.lang.javascript.psi.impl.JSFileImpl; import com.intellij.lang.javascript.psi.resolve.ActionScriptResolveUtil; import com.intellij.openapi.compiler.CompilerManager; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.impl.ElementBase; import com.intellij.psi.xml.XmlFile; import com.intellij.ui.LayeredIcon; import com.intellij.util.PlatformIcons; import org.jetbrains.annotations.NotNull; import javax.swing.*; public class FlexIconProvider extends IconProvider { @Override public Icon getIcon(@NotNull PsiElement element, int flags) { int transformedFlags = ElementBase.transformFlags(element, flags); Icon icon = null; if (element instanceof XmlFile) { if (JavaScriptSupportLoader.isFlexMxmFile((PsiFile)element)) { final JSClass jsClass = XmlBackedJSClassFactory.getXmlBackedClass((XmlFile)element); if (jsClass != null) { icon = jsClass.getIcon(flags); } } } else if (element instanceof JSFileImpl) { final JSNamedElement mainDeclaredElement = ActionScriptResolveUtil.findMainDeclaredElement((JSFileImpl)element); if (mainDeclaredElement != null) { icon = mainDeclaredElement.getIcon(transformedFlags); } } if (icon != null) { final PsiFile psiFile = element.getContainingFile(); final VirtualFile vFile = psiFile == null ? null : psiFile.getVirtualFile(); CompilerManager compilerManager = CompilerManager.getInstance(element.getProject()); if (vFile != null && compilerManager != null && compilerManager.isExcludedFromCompilation(vFile)) { icon = new LayeredIcon(icon, PlatformIcons.EXCLUDED_FROM_COMPILE_ICON); } } return icon; } }