From 44764bd6d78f11181d4eeecaf73db5aba0b3756b Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 16 Aug 2011 13:48:32 +0200 Subject: [PATCH] use TypePresentationService instead of VirtualFile.getIcon() --- .../impl/ui/FileCopyPresentation.java | 3 ++- .../sourceItems/LibrarySourceItem.java | 3 ++- .../ModuleDependenciesAnalyzer.java | 3 ++- .../src/com/intellij/ui/ComputableIcon.java | 3 ++- .../vcs/CommitCompletionContributor.java | 3 ++- .../presentation/VirtualFilePresentation.java | 23 +++++++++++++++++++ .../roots/ui/util/CellAppearanceUtils.java | 5 ++-- .../com/intellij/openapi/vfs/VirtualFile.java | 9 -------- .../src/com/intellij/util/IconUtil.java | 5 ++-- .../ide/diff/VirtualFileDiffElement.java | 3 ++- .../openapi/fileChooser/ex/LocalFsFinder.java | 3 ++- .../vcs/readOnlyHandler/FileListRenderer.java | 3 ++- .../vcs/merge/MultipleFileMergeDialog.java | 3 ++- .../ui/grouping/XBreakpointFileGroup.java | 3 ++- .../TestDataGroupVirtualFile.java | 9 ++------ .../git4idea/ui/GitConvertFilesDialog.java | 3 ++- .../editor/ResourceBundleAsVirtualFile.java | 7 ++---- 17 files changed, 55 insertions(+), 36 deletions(-) create mode 100644 platform/platform-api/src/com/intellij/ide/presentation/VirtualFilePresentation.java diff --git a/java/compiler/impl/src/com/intellij/packaging/impl/ui/FileCopyPresentation.java b/java/compiler/impl/src/com/intellij/packaging/impl/ui/FileCopyPresentation.java index a48648ddf913..b5e4af50e436 100644 --- a/java/compiler/impl/src/com/intellij/packaging/impl/ui/FileCopyPresentation.java +++ b/java/compiler/impl/src/com/intellij/packaging/impl/ui/FileCopyPresentation.java @@ -15,6 +15,7 @@ */ package com.intellij.packaging.impl.ui; +import com.intellij.ide.presentation.VirtualFilePresentation; import com.intellij.ide.projectView.PresentationData; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.LocalFileSystem; @@ -62,7 +63,7 @@ public class FileCopyPresentation extends PackagingElementPresentation { public void render(@NotNull PresentationData presentationData, SimpleTextAttributes mainAttributes, SimpleTextAttributes commentAttributes) { if (myFile != null && !myFile.isDirectory()) { - presentationData.setIcons(myFile.getIcon()); + presentationData.setIcons(VirtualFilePresentation.getIcon(myFile)); presentationData.addText(myOutputFileName, mainAttributes); presentationData.addText(" (" + mySourcePath + ")", commentAttributes); } diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/sourceItems/LibrarySourceItem.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/sourceItems/LibrarySourceItem.java index 39dd97669de5..9390d50c33f4 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/sourceItems/LibrarySourceItem.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/sourceItems/LibrarySourceItem.java @@ -15,6 +15,7 @@ */ package com.intellij.openapi.roots.ui.configuration.artifacts.sourceItems; +import com.intellij.ide.presentation.VirtualFilePresentation; import com.intellij.ide.projectView.PresentationData; import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.roots.impl.libraries.LibraryEx; @@ -121,7 +122,7 @@ public class LibrarySourceItem extends PackagingSourceItem { final VirtualFile[] files = myLibrary.getFiles(OrderRootType.CLASSES); if (files.length > 0) { final VirtualFile file = files[0]; - presentationData.setIcons(file.getIcon()); + presentationData.setIcons(VirtualFilePresentation.getIcon(file)); presentationData.addText(file.getName(), mainAttributes); } else { diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/dependencyAnalysis/ModuleDependenciesAnalyzer.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/dependencyAnalysis/ModuleDependenciesAnalyzer.java index f5d52f2f0976..72a8f647d746 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/dependencyAnalysis/ModuleDependenciesAnalyzer.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/dependencyAnalysis/ModuleDependenciesAnalyzer.java @@ -15,6 +15,7 @@ */ package com.intellij.openapi.roots.ui.configuration.dependencyAnalysis; +import com.intellij.ide.presentation.VirtualFilePresentation; import com.intellij.openapi.module.Module; import com.intellij.openapi.roots.*; import com.intellij.openapi.roots.ui.util.CellAppearance; @@ -464,7 +465,7 @@ public class ModuleDependenciesAnalyzer { @Nullable public Icon getIcon() { VirtualFile file = getLocalFile(); - return file == null ? MISSING_ICON : file.getIcon(); + return file == null ? MISSING_ICON : VirtualFilePresentation.getIcon(file); } /** diff --git a/platform/lang-api/src/com/intellij/ui/ComputableIcon.java b/platform/lang-api/src/com/intellij/ui/ComputableIcon.java index 1bcf2a365f9b..8f7b6cc576d5 100644 --- a/platform/lang-api/src/com/intellij/ui/ComputableIcon.java +++ b/platform/lang-api/src/com/intellij/ui/ComputableIcon.java @@ -15,6 +15,7 @@ */ package com.intellij.ui; +import com.intellij.ide.presentation.VirtualFilePresentation; import com.intellij.navigation.ItemPresentation; import com.intellij.openapi.util.Computable; import com.intellij.openapi.vfs.VirtualFile; @@ -73,7 +74,7 @@ public class ComputableIcon { return new ComputableIcon(new Computable() { @Override public Icon compute() { - return file.getIcon(); + return VirtualFilePresentation.getIcon(file); } }); } diff --git a/platform/lang-impl/src/com/intellij/openapi/vcs/CommitCompletionContributor.java b/platform/lang-impl/src/com/intellij/openapi/vcs/CommitCompletionContributor.java index b57e97e77692..b8318cca77db 100644 --- a/platform/lang-impl/src/com/intellij/openapi/vcs/CommitCompletionContributor.java +++ b/platform/lang-impl/src/com/intellij/openapi/vcs/CommitCompletionContributor.java @@ -19,6 +19,7 @@ import com.intellij.codeInsight.completion.CompletionContributor; import com.intellij.codeInsight.completion.CompletionParameters; import com.intellij.codeInsight.completion.CompletionResultSet; import com.intellij.codeInsight.lookup.LookupElementBuilder; +import com.intellij.ide.presentation.VirtualFilePresentation; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.editor.Document; import com.intellij.openapi.vcs.changes.Change; @@ -49,7 +50,7 @@ public class CommitCompletionContributor extends CompletionContributor { VirtualFile virtualFile = change.getVirtualFile(); if (virtualFile != null) { insensitive.addElement(LookupElementBuilder.create(virtualFile.getName()). - setIcon(virtualFile.getIcon())); + setIcon(VirtualFilePresentation.getIcon(virtualFile))); } } } diff --git a/platform/platform-api/src/com/intellij/ide/presentation/VirtualFilePresentation.java b/platform/platform-api/src/com/intellij/ide/presentation/VirtualFilePresentation.java new file mode 100644 index 000000000000..50fe04372a9a --- /dev/null +++ b/platform/platform-api/src/com/intellij/ide/presentation/VirtualFilePresentation.java @@ -0,0 +1,23 @@ +package com.intellij.ide.presentation; + +import com.intellij.ide.TypePresentationService; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.util.PlatformIcons; + +import javax.swing.*; + +/** + * @author yole + */ +public class VirtualFilePresentation { + public static Icon getIcon(VirtualFile vFile) { + Icon icon = TypePresentationService.getService().getIcon(vFile); + if (icon != null) { + return icon; + } + if (vFile.isDirectory() && vFile.isInLocalFileSystem()) { + return PlatformIcons.FOLDER_ICON; + } + return vFile.getFileType().getIcon(); + } +} diff --git a/platform/platform-api/src/com/intellij/openapi/roots/ui/util/CellAppearanceUtils.java b/platform/platform-api/src/com/intellij/openapi/roots/ui/util/CellAppearanceUtils.java index 8043d7646bbd..a87618d4ff3c 100644 --- a/platform/platform-api/src/com/intellij/openapi/roots/ui/util/CellAppearanceUtils.java +++ b/platform/platform-api/src/com/intellij/openapi/roots/ui/util/CellAppearanceUtils.java @@ -15,6 +15,7 @@ */ package com.intellij.openapi.roots.ui.util; +import com.intellij.ide.presentation.VirtualFilePresentation; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.fileTypes.FileTypeManager; import com.intellij.openapi.util.IconLoader; @@ -65,10 +66,10 @@ public class CellAppearanceUtils { public static Icon iconForFile(VirtualFile file) { if (file.getFileSystem().getProtocol().equals(JarFileSystem.PROTOCOL) && file.getParent() == null) { - return file.getIcon(); + return VirtualFilePresentation.getIcon(file); } if (file.isDirectory()) return PlatformIcons.FOLDER_ICON; - return file.getIcon(); + return VirtualFilePresentation.getIcon(file); } public static Icon excludeIcon(Icon icon) { diff --git a/platform/platform-api/src/com/intellij/openapi/vfs/VirtualFile.java b/platform/platform-api/src/com/intellij/openapi/vfs/VirtualFile.java index 2ee77b1fb3b9..38cce6f4a870 100644 --- a/platform/platform-api/src/com/intellij/openapi/vfs/VirtualFile.java +++ b/platform/platform-api/src/com/intellij/openapi/vfs/VirtualFile.java @@ -26,12 +26,10 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.encoding.EncodingManager; import com.intellij.openapi.vfs.newvfs.BulkFileListener; import com.intellij.openapi.vfs.newvfs.events.VFilePropertyChangeEvent; -import com.intellij.util.PlatformIcons; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import javax.swing.*; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -263,13 +261,6 @@ public abstract class VirtualFile extends UserDataHolderBase implements Modifica return createChildData(requestor, name); } - public Icon getIcon() { - if (isDirectory() && isInLocalFileSystem()) { - return PlatformIcons.FOLDER_ICON; - } - return getFileType().getIcon(); - } - /** * @return the {@link FileType} of this file. * When IDEA has no idea what the file type is (i.e. file type is not registered via {@link FileTypeManager}), diff --git a/platform/platform-api/src/com/intellij/util/IconUtil.java b/platform/platform-api/src/com/intellij/util/IconUtil.java index 6316783149a7..1753a1700ae6 100644 --- a/platform/platform-api/src/com/intellij/util/IconUtil.java +++ b/platform/platform-api/src/com/intellij/util/IconUtil.java @@ -17,6 +17,7 @@ package com.intellij.util; import com.intellij.ide.FileIconPatcher; import com.intellij.ide.FileIconProvider; +import com.intellij.ide.presentation.VirtualFilePresentation; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; @@ -109,7 +110,7 @@ public class IconUtil { Icon lastIcon = Iconable.LastComputedIcon.get(file, flags); return IconDeferrer.getInstance() - .defer(lastIcon != null ? lastIcon : file.getIcon(), new FileIconKey(file, project, flags), new Function() { + .defer(lastIcon != null ? lastIcon : VirtualFilePresentation.getIcon(file), new FileIconKey(file, project, flags), new Function() { public Icon fun(final FileIconKey key) { VirtualFile file = key.getFile(); int flags = key.getFlags(); @@ -118,7 +119,7 @@ public class IconUtil { if (!file.isValid() || project != null && (project.isDisposed() || !wasEverInitialized(project))) return null; Icon providersIcon = getProvidersIcon(file, flags, project); - Icon icon = providersIcon == null ? file.getIcon() : providersIcon; + Icon icon = providersIcon == null ? VirtualFilePresentation.getIcon(file) : providersIcon; final boolean dumb = project != null && DumbService.getInstance(project).isDumb(); for (FileIconPatcher patcher : getPatchers()) { diff --git a/platform/platform-impl/src/com/intellij/ide/diff/VirtualFileDiffElement.java b/platform/platform-impl/src/com/intellij/ide/diff/VirtualFileDiffElement.java index ce98d66580bd..c0eac988066c 100644 --- a/platform/platform-impl/src/com/intellij/ide/diff/VirtualFileDiffElement.java +++ b/platform/platform-impl/src/com/intellij/ide/diff/VirtualFileDiffElement.java @@ -15,6 +15,7 @@ */ package com.intellij.ide.diff; +import com.intellij.ide.presentation.VirtualFilePresentation; import com.intellij.openapi.actionSystem.DataProvider; import com.intellij.openapi.actionSystem.PlatformDataKeys; import com.intellij.openapi.diff.DiffRequest; @@ -102,7 +103,7 @@ public class VirtualFileDiffElement extends DiffElement { @Override public Icon getIcon() { - return isContainer() ? PlatformIcons.FOLDER_ICON : myFile.getIcon(); + return isContainer() ? PlatformIcons.FOLDER_ICON : VirtualFilePresentation.getIcon(myFile); } @Override diff --git a/platform/platform-impl/src/com/intellij/openapi/fileChooser/ex/LocalFsFinder.java b/platform/platform-impl/src/com/intellij/openapi/fileChooser/ex/LocalFsFinder.java index a43f147e20e5..d136ac4aeffa 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileChooser/ex/LocalFsFinder.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileChooser/ex/LocalFsFinder.java @@ -15,6 +15,7 @@ */ package com.intellij.openapi.fileChooser.ex; +import com.intellij.ide.presentation.VirtualFilePresentation; import com.intellij.openapi.fileChooser.FileChooserDescriptor; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.LocalFileSystem; @@ -148,7 +149,7 @@ public class LocalFsFinder implements FileLookup.Finder, FileLookup { @Nullable public Icon getIcon() { - return myFile != null ? (myFile.isDirectory() ? PlatformIcons.DIRECTORY_CLOSED_ICON : myFile.getIcon()) : null; + return myFile != null ? (myFile.isDirectory() ? PlatformIcons.DIRECTORY_CLOSED_ICON : VirtualFilePresentation.getIcon(myFile)) : null; } public boolean equals(final Object o) { diff --git a/platform/platform-impl/src/com/intellij/openapi/vcs/readOnlyHandler/FileListRenderer.java b/platform/platform-impl/src/com/intellij/openapi/vcs/readOnlyHandler/FileListRenderer.java index a58c24a4a719..e2777ac5454e 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vcs/readOnlyHandler/FileListRenderer.java +++ b/platform/platform-impl/src/com/intellij/openapi/vcs/readOnlyHandler/FileListRenderer.java @@ -15,6 +15,7 @@ */ package com.intellij.openapi.vcs.readOnlyHandler; +import com.intellij.ide.presentation.VirtualFilePresentation; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.ColoredListCellRenderer; @@ -28,7 +29,7 @@ public class FileListRenderer extends ColoredListCellRenderer { mySelected = false; setBackground(null); VirtualFile vf = (VirtualFile) value; - setIcon(vf.getIcon()); + setIcon(VirtualFilePresentation.getIcon(vf)); append(vf.getName(), SimpleTextAttributes.REGULAR_ATTRIBUTES); VirtualFile parent = vf.getParent(); if (parent != null) { diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/merge/MultipleFileMergeDialog.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/merge/MultipleFileMergeDialog.java index 9ed2bc910fb6..b559b0ec16b7 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/merge/MultipleFileMergeDialog.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/merge/MultipleFileMergeDialog.java @@ -17,6 +17,7 @@ package com.intellij.openapi.vcs.merge; import com.intellij.CommonBundle; +import com.intellij.ide.presentation.VirtualFilePresentation; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diff.ActionButtonPresentation; import com.intellij.openapi.diff.DiffManager; @@ -346,7 +347,7 @@ public class MultipleFileMergeDialog extends DialogWrapper { private static class VirtualFileRenderer extends ColoredTableCellRenderer { protected void customizeCellRenderer(JTable table, Object value, boolean selected, boolean hasFocus, int row, int column) { VirtualFile vf = (VirtualFile)value; - setIcon(vf.getIcon()); + setIcon(VirtualFilePresentation.getIcon(vf)); append(FileUtil.toSystemDependentName(vf.getPresentableUrl()), SimpleTextAttributes.REGULAR_ATTRIBUTES); } } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/grouping/XBreakpointFileGroup.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/grouping/XBreakpointFileGroup.java index e87f39e4b575..f7ae89a202a9 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/grouping/XBreakpointFileGroup.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/grouping/XBreakpointFileGroup.java @@ -15,6 +15,7 @@ */ package com.intellij.xdebugger.impl.breakpoints.ui.grouping; +import com.intellij.ide.presentation.VirtualFilePresentation; import com.intellij.xdebugger.breakpoints.ui.XBreakpointGroup; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; @@ -34,7 +35,7 @@ public class XBreakpointFileGroup extends XBreakpointGroup { @Nullable public Icon getIcon(final boolean isOpen) { - return myFile.getIcon(); + return VirtualFilePresentation.getIcon(myFile); } @NotNull diff --git a/plugins/IdeaTestAssistant/src/com/intellij/testAssistant/TestDataGroupVirtualFile.java b/plugins/IdeaTestAssistant/src/com/intellij/testAssistant/TestDataGroupVirtualFile.java index a79195b00f19..7d8546e01444 100644 --- a/plugins/IdeaTestAssistant/src/com/intellij/testAssistant/TestDataGroupVirtualFile.java +++ b/plugins/IdeaTestAssistant/src/com/intellij/testAssistant/TestDataGroupVirtualFile.java @@ -15,15 +15,14 @@ */ package com.intellij.testAssistant; +import com.intellij.ide.presentation.Presentation; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.DeprecatedVirtualFile; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileSystem; -import com.intellij.util.PlatformIcons; import org.jetbrains.annotations.NotNull; -import javax.swing.*; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -31,6 +30,7 @@ import java.io.OutputStream; /** * @author yole */ +@Presentation(icon = "/nodes/testSourceFolder.png") public class TestDataGroupVirtualFile extends DeprecatedVirtualFile { private final VirtualFile myBeforeFile; private final VirtualFile myAfterFile; @@ -58,11 +58,6 @@ public class TestDataGroupVirtualFile extends DeprecatedVirtualFile { return myAfterFile; } - @Override - public Icon getIcon() { - return PlatformIcons.TEST_SOURCE_FOLDER; - } - @NotNull @Override public VirtualFileSystem getFileSystem() { diff --git a/plugins/git4idea/src/git4idea/ui/GitConvertFilesDialog.java b/plugins/git4idea/src/git4idea/ui/GitConvertFilesDialog.java index fc892552a60b..8880d86b2cc0 100644 --- a/plugins/git4idea/src/git4idea/ui/GitConvertFilesDialog.java +++ b/plugins/git4idea/src/git4idea/ui/GitConvertFilesDialog.java @@ -15,6 +15,7 @@ */ package git4idea.ui; +import com.intellij.ide.presentation.VirtualFilePresentation; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.DialogWrapper; @@ -162,7 +163,7 @@ public class GitConvertFilesDialog extends DialogWrapper { if (leaf) { VirtualFile parent = (VirtualFile)((CheckedTreeNode)node.getParent()).getUserObject(); // the real file - Icon i = file.getIcon(); + Icon i = VirtualFilePresentation.getIcon(file); if (i != null) { r.setIcon(i); } 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 2089779a5042..fe9a6ae4ee7b 100644 --- a/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleAsVirtualFile.java +++ b/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleAsVirtualFile.java @@ -19,6 +19,7 @@ */ package com.intellij.lang.properties.editor; +import com.intellij.ide.presentation.Presentation; import com.intellij.lang.properties.ResourceBundle; import com.intellij.openapi.vfs.DeprecatedVirtualFile; import com.intellij.openapi.vfs.LocalFileSystem; @@ -26,11 +27,11 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileSystem; import org.jetbrains.annotations.NotNull; -import javax.swing.*; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +@Presentation(icon = "/nodes/resourceBundleClosed.png") public class ResourceBundleAsVirtualFile extends DeprecatedVirtualFile { private final ResourceBundle myResourceBundle; @@ -42,10 +43,6 @@ public class ResourceBundleAsVirtualFile extends DeprecatedVirtualFile { return myResourceBundle; } - public Icon getIcon() { - return ResourceBundle.ICON_CLOSED; - } - @NotNull public VirtualFileSystem getFileSystem() { return LocalFileSystem.getInstance();