deferred icons fix -- caches for different flags
[idea/community.git] / platform / lang-api / src / com / intellij / psi / impl / ElementBase.java
index bcd37512ea388c0756b360d5e3b2f9c49b24b2ac..facc3a9d86d530de519afc26891a0450118ef818 100644 (file)
@@ -20,7 +20,6 @@ import com.intellij.navigation.ItemPresentation;
 import com.intellij.openapi.diagnostic.Logger;
 import com.intellij.openapi.util.IconLoader;
 import com.intellij.openapi.util.Iconable;
-import com.intellij.openapi.util.Key;
 import com.intellij.openapi.util.UserDataHolderBase;
 import com.intellij.openapi.vfs.VirtualFile;
 import com.intellij.openapi.progress.ProcessCanceledException;
@@ -50,7 +49,9 @@ public abstract class ElementBase extends UserDataHolderBase implements Iconable
     if (!(this instanceof PsiElement)) return null;
 
     try {
-      return computeIcon(flags);
+      Icon icon = computeIcon(flags);
+      Iconable.LastComputedIcon.put(this, icon, flags);
+      return icon;
     }
     catch (ProcessCanceledException e) {
       throw e;
@@ -66,7 +67,7 @@ public abstract class ElementBase extends UserDataHolderBase implements Iconable
 
   private Icon computeIcon(final int flags) {
     PsiElement psiElement = (PsiElement)this;
-    Icon baseIcon = psiElement.getUserData(Iconable.LAST_COMPUTED_ICON);
+    Icon baseIcon = LastComputedIcon.get(psiElement, flags);
     if (baseIcon == null) {
       if (myBaseIcon == null) {
         myBaseIcon = computeBaseIcon();