IDEA-52453 No Icon for .xsd files that are read locked in Project View
authorMaxim.Mossienko <Maxim.Mossienko@jetbrains.com>
Wed, 24 Feb 2010 18:04:35 +0000 (21:04 +0300)
committerMaxim.Mossienko <Maxim.Mossienko@jetbrains.com>
Wed, 24 Feb 2010 18:04:35 +0000 (21:04 +0300)
platform/lang-api/src/com/intellij/psi/impl/ElementBase.java
xml/impl/src/com/intellij/xml/util/XmlIconProvider.java

index ae98df7f30514da7c873521efc03af86c08f7fb4..05ab50fed5d42e3055894ad2209868bb4f7fed05 100644 (file)
@@ -116,6 +116,13 @@ public abstract class ElementBase extends UserDataHolderBase implements Iconable
     return baseIcon;
   }
 
+  public static int transformFlags(PsiElement element, int _flags) {
+    int flags = 0;
+    final boolean isLocked = (_flags & ICON_FLAG_READ_STATUS) != 0 && !element.isWritable();
+    if (isLocked) flags |= FLAGS_LOCKED;
+    return flags;
+  }
+
   private static class IconLayer {
     int flagMask;
     Icon icon;
index e2dfba741e076d217aacac58f4a60f2f2f948d1a..34d7b70e5269f8ce7a6eec436c8904b6574fcabc 100644 (file)
@@ -20,6 +20,7 @@ import com.intellij.openapi.project.DumbAware;
 import com.intellij.openapi.util.IconLoader;
 import com.intellij.openapi.vfs.VirtualFile;
 import com.intellij.psi.PsiElement;
+import com.intellij.psi.impl.ElementBase;
 import com.intellij.psi.xml.XmlFile;
 import org.jetbrains.annotations.NonNls;
 import org.jetbrains.annotations.NotNull;
@@ -37,13 +38,18 @@ public class XmlIconProvider extends IconProvider implements DumbAware {
   @NonNls private static final String WSDL_FILE_EXTENSION = "wsdl";
 
   @Nullable
-  public Icon getIcon(@NotNull final PsiElement element, final int flags) {
+  public Icon getIcon(@NotNull final PsiElement element, final int _flags) {
     if (element instanceof XmlFile) {
       final VirtualFile vf = ((XmlFile)element).getVirtualFile();
       if (vf != null) {
         final String extension = vf.getExtension();
-        if (XSD_FILE_EXTENSION.equals(extension)) return ourXsdIcon;
-        if (WSDL_FILE_EXTENSION.equals(extension)) return ourWsdlIcon;
+        
+        if (XSD_FILE_EXTENSION.equals(extension)) {
+          return ElementBase.createLayeredIcon(ourXsdIcon, ElementBase.transformFlags(element, _flags));
+        }
+        if (WSDL_FILE_EXTENSION.equals(extension)) {
+          return ElementBase.createLayeredIcon(ourWsdlIcon, ElementBase.transformFlags(element, _flags));
+        }
       }
     }
     return null;