From a5b3571df504e3ec817e7abf3137835f11eb7e97 Mon Sep 17 00:00:00 2001 From: Maxim Shafirov Date: Thu, 7 Jun 2012 14:08:46 +0400 Subject: [PATCH] @Presentation's icon to reference AllIcons too --- .../internal/UsedIconsListingAction.java | 69 ++++++++++++++++--- .../psi/impl/beanProperties/BeanProperty.java | 2 +- .../TestDataGroupVirtualFile.java | 2 +- .../maven/dom/model/MavenDomDependency.java | 2 +- .../editor/ResourceBundleAsVirtualFile.java | 4 +- 5 files changed, 64 insertions(+), 15 deletions(-) diff --git a/java/java-impl/src/com/intellij/internal/UsedIconsListingAction.java b/java/java-impl/src/com/intellij/internal/UsedIconsListingAction.java index 29b8702dc892..b1c4bb774349 100644 --- a/java/java-impl/src/com/intellij/internal/UsedIconsListingAction.java +++ b/java/java-impl/src/com/intellij/internal/UsedIconsListingAction.java @@ -35,6 +35,7 @@ import com.intellij.psi.codeStyle.JavaCodeStyleManager; import com.intellij.psi.search.DelegatingGlobalSearchScope; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.search.PsiSearchHelper; +import com.intellij.psi.search.searches.AnnotationTargetsSearch; import com.intellij.psi.search.searches.MethodReferencesSearch; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.xml.XmlAttribute; @@ -50,7 +51,7 @@ public class UsedIconsListingAction extends AnAction { final Project project = LangDataKeys.PROJECT.getData(e.getDataContext()); final Set answer = new HashSet(); - final MultiMap calls = new MultiMap(); + final MultiMap calls = new MultiMap(); Processor consumer = new Processor() { @@ -111,11 +112,13 @@ public class UsedIconsListingAction extends AnAction { MethodReferencesSearch.search(findIconMethod, false).forEach(consumer); } - PsiClass javaeeIcons = JavaPsiFacade.getInstance(project).findClass("com.intellij.javaee.oss.JavaeeIcons", GlobalSearchScope.allScope(project)); - MethodReferencesSearch.search(javaeeIcons.findMethodsByName("getIcon", false)[0], false).forEach(consumer); - final ProjectFileIndex index = ProjectRootManager.getInstance(project).getFileIndex(); - MethodReferencesSearch.search(findIconMethod, false).forEach(consumer); + if (false) { + PsiClass javaeeIcons = JavaPsiFacade.getInstance(project).findClass("com.intellij.javaee.oss.JavaeeIcons", GlobalSearchScope.allScope(project)); + MethodReferencesSearch.search(javaeeIcons.findMethodsByName("getIcon", false)[0], false).forEach(consumer); + + MethodReferencesSearch.search(findIconMethod, false).forEach(consumer); + } PsiClass allIcons = JavaPsiFacade.getInstance(project).findClass("com.intellij.icons.AllIcons", GlobalSearchScope.allScope(project)); @@ -171,6 +174,27 @@ public class UsedIconsListingAction extends AnAction { } } + PsiClass presentation = JavaPsiFacade.getInstance(project).findClass("com.intellij.ide.presentation.Presentation", + GlobalSearchScope.allScope(project)); + final MultiMap annotations = new MultiMap(); + AnnotationTargetsSearch.search(presentation).forEach(new Processor() { + @Override + public boolean process(PsiModifierListOwner owner) { + PsiAnnotation annotation = owner.getModifierList().findAnnotation("com.intellij.ide.presentation.Presentation"); + + PsiAnnotationMemberValue icon = annotation.findAttributeValue("icon"); + if (icon instanceof PsiLiteralExpression) { + Object value = ((PsiLiteralExpression)icon).getValue(); + if (value instanceof String) { + annotations.putValue((String)value, annotation); + } + } + + return true; + } + }); + + if (true /*do replacements*/) { ArrayList sorted = new ArrayList(answer); Collections.sort(sorted); @@ -180,17 +204,42 @@ public class UsedIconsListingAction extends AnAction { } final JVMElementFactory factory = JVMElementFactories.getFactory(JavaLanguage.INSTANCE, project); - for (Map.Entry> entry : calls.entrySet()) { + for (Map.Entry> entry : calls.entrySet()) { String path = entry.getKey(); final String replacement = mappings.get(path); if (replacement != null) { - for (final PsiCallExpression call : entry.getValue()) { + for (final PsiExpression call : entry.getValue()) { new WriteCommandAction(project, call.getContainingFile()) { @Override protected void run(Result result) throws Throwable { - JavaCodeStyleManager styleManager = JavaCodeStyleManager.getInstance(project); - PsiElement expr = factory.createExpressionFromText("com.intellij.icons." + replacement, call); - styleManager.shortenClassReferences(call.replace(expr)); + if (call instanceof PsiLiteralExpression) { + call.replace(factory.createExpressionFromText("\"" + replacement + "\"", call)); + } + else { + JavaCodeStyleManager styleManager = JavaCodeStyleManager.getInstance(project); + PsiElement expr = factory.createExpressionFromText("com.intellij.icons." + replacement, call); + styleManager.shortenClassReferences(call.replace(expr)); + } + } + }.execute(); + } + } + } + + for (Map.Entry> entry : annotations.entrySet()) { + String path = entry.getKey(); + final String replacement = mappings.get(path); + if (replacement != null) { + for (final PsiAnnotation annotation : entry.getValue()) { + if (annotation instanceof PsiCompiledElement) continue; + new WriteCommandAction(project, annotation.getContainingFile()) { + @Override + protected void run(Result result) throws Throwable { + annotation.getNode(); + annotation.setDeclaredAttributeValue( + "icon", + JavaPsiFacade.getInstance(annotation.getProject()).getElementFactory() + .createAnnotationFromText("@A(\"" + replacement + "\")", null).findDeclaredAttributeValue(null)); } }.execute(); } diff --git a/java/java-impl/src/com/intellij/psi/impl/beanProperties/BeanProperty.java b/java/java-impl/src/com/intellij/psi/impl/beanProperties/BeanProperty.java index 3826be4293b7..1fd0d8e03a8d 100644 --- a/java/java-impl/src/com/intellij/psi/impl/beanProperties/BeanProperty.java +++ b/java/java-impl/src/com/intellij/psi/impl/beanProperties/BeanProperty.java @@ -28,7 +28,7 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; -@Presentation(icon = "/nodes/property.png") +@Presentation(icon = "AllIcons.Nodes.Property") public class BeanProperty { public static final Icon ICON = AllIcons.Nodes.Property; diff --git a/plugins/IdeaTestAssistant/src/com/intellij/testAssistant/TestDataGroupVirtualFile.java b/plugins/IdeaTestAssistant/src/com/intellij/testAssistant/TestDataGroupVirtualFile.java index f27775d159c9..c44b49cd71b9 100644 --- a/plugins/IdeaTestAssistant/src/com/intellij/testAssistant/TestDataGroupVirtualFile.java +++ b/plugins/IdeaTestAssistant/src/com/intellij/testAssistant/TestDataGroupVirtualFile.java @@ -29,7 +29,7 @@ import java.io.OutputStream; /** * @author yole */ -@Presentation(icon = "/nodes/testSourceFolder.png") +@Presentation(icon = "AllIcons.Nodes.TestSourceFolder") public class TestDataGroupVirtualFile extends VirtualFile { private final VirtualFile myBeforeFile; private final VirtualFile myAfterFile; diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/model/MavenDomDependency.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/model/MavenDomDependency.java index 6886a5a6a705..0689d2cbe6f9 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/model/MavenDomDependency.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/model/MavenDomDependency.java @@ -37,7 +37,7 @@ import org.jetbrains.idea.maven.dom.converters.MavenDependencyTypeConverter; * 3.0.0+ * */ -@Presentation(typeName = "Dependency", icon = "/nodes/ppLib.png") +@Presentation(typeName = "Dependency", icon = "AllIcons.Nodes.PpLib") public interface MavenDomDependency extends MavenDomElement, MavenDomArtifactCoordinates { @Required(value = false, nonEmpty = true) GenericDomValue getVersion(); diff --git a/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleAsVirtualFile.java b/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleAsVirtualFile.java index be72b4ff69a4..c85a7f11b66a 100644 --- a/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleAsVirtualFile.java +++ b/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleAsVirtualFile.java @@ -30,7 +30,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -@Presentation(icon = "/nodes/resourceBundleClosed.png") +@Presentation(icon = "AllIcons.Nodes.ResourceBundleClosed") public class ResourceBundleAsVirtualFile extends VirtualFile { private final ResourceBundle myResourceBundle; @@ -139,4 +139,4 @@ public class ResourceBundleAsVirtualFile extends VirtualFile { public void refresh(boolean asynchronous, boolean recursive, Runnable postRunnable) { } -} \ No newline at end of file +}