From cf1ace779dd78b1a01850b7f4817b710f77c56fe Mon Sep 17 00:00:00 2001 From: Anton Makeev Date: Tue, 22 Dec 2015 12:26:33 +0100 Subject: [PATCH] IDEA-149666 Bookmark icons are not shown for files in Project View OC-3630 Files View: bookmarks are not shown for files --- .../ide/bookmarks/BookmarkManager.java | 10 +++--- .../impl/nodes/AbstractPsiBasedNode.java | 33 +++++++++++++++++++ .../impl/nodes/PsiDirectoryNode.java | 32 ++---------------- .../intellij/ide/todo/nodes/TodoDirNode.java | 2 +- 4 files changed, 42 insertions(+), 35 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/ide/bookmarks/BookmarkManager.java b/platform/lang-impl/src/com/intellij/ide/bookmarks/BookmarkManager.java index c7c169a323b9..923a5c140a09 100644 --- a/platform/lang-impl/src/com/intellij/ide/bookmarks/BookmarkManager.java +++ b/platform/lang-impl/src/com/intellij/ide/bookmarks/BookmarkManager.java @@ -157,7 +157,7 @@ public class BookmarkManager extends AbstractProjectComponent implements Persist return "BookmarkManager"; } - public void addEditorBookmark(Editor editor, int lineIndex) { + public void addEditorBookmark(@NotNull Editor editor, int lineIndex) { Document document = editor.getDocument(); PsiFile psiFile = PsiDocumentManager.getInstance(myProject).getPsiFile(document); if (psiFile == null) return; @@ -168,14 +168,16 @@ public class BookmarkManager extends AbstractProjectComponent implements Persist addTextBookmark(virtualFile, lineIndex, getAutoDescription(editor, lineIndex)); } - public Bookmark addTextBookmark(VirtualFile file, int lineIndex, String description) { + @NotNull + public Bookmark addTextBookmark(@NotNull VirtualFile file, int lineIndex, @NotNull String description) { Bookmark b = new Bookmark(myProject, file, lineIndex, description); myBookmarks.add(0, b); myBus.syncPublisher(BookmarksListener.TOPIC).bookmarkAdded(b); return b; } - public static String getAutoDescription(final Editor editor, final int lineIndex) { + @NotNull + public static String getAutoDescription(@NotNull final Editor editor, final int lineIndex) { String autoDescription = editor.getSelectionModel().getSelectedText(); if ( autoDescription == null ) { Document document = editor.getDocument(); @@ -189,7 +191,7 @@ public class BookmarkManager extends AbstractProjectComponent implements Persist } @Nullable - public Bookmark addFileBookmark(VirtualFile file, String description) { + public Bookmark addFileBookmark(@Nullable VirtualFile file, @NotNull String description) { if (file == null) return null; if (findFileBookmark(file) != null) return null; diff --git a/platform/lang-impl/src/com/intellij/ide/projectView/impl/nodes/AbstractPsiBasedNode.java b/platform/lang-impl/src/com/intellij/ide/projectView/impl/nodes/AbstractPsiBasedNode.java index 1b80535a5122..cdec93f4c650 100644 --- a/platform/lang-impl/src/com/intellij/ide/projectView/impl/nodes/AbstractPsiBasedNode.java +++ b/platform/lang-impl/src/com/intellij/ide/projectView/impl/nodes/AbstractPsiBasedNode.java @@ -17,6 +17,8 @@ package com.intellij.ide.projectView.impl.nodes; import com.intellij.codeInsight.navigation.NavigationUtil; +import com.intellij.ide.bookmarks.Bookmark; +import com.intellij.ide.bookmarks.BookmarkManager; import com.intellij.ide.projectView.PresentationData; import com.intellij.ide.projectView.ProjectViewNode; import com.intellij.ide.projectView.ProjectViewNodeDecorator; @@ -34,12 +36,16 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Iconable; import com.intellij.openapi.vcs.FileStatus; import com.intellij.openapi.vcs.FileStatusManager; +import com.intellij.openapi.vfs.VFileProperty; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.pom.StatePreservingNavigatable; import com.intellij.psi.PsiDirectory; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.util.PsiUtilBase; +import com.intellij.ui.LayeredIcon; +import com.intellij.ui.RowIcon; +import com.intellij.util.PlatformIcons; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -157,6 +163,8 @@ public abstract class AbstractPsiBasedNode extends ProjectViewNode catch (IndexNotReadyException ignored) { } updateImpl(data); + data.setIcon(patchIcon(myProject, data.getIcon(true), getVirtualFile())); + for (ProjectViewNodeDecorator decorator : Extensions.getExtensions(ProjectViewNodeDecorator.EP_NAME, myProject)) { decorator.decorate(AbstractPsiBasedNode.this, data); } @@ -173,6 +181,31 @@ public abstract class AbstractPsiBasedNode extends ProjectViewNode return flags; } + @Nullable + public static Icon patchIcon(@NotNull Project project, @Nullable Icon original, @Nullable VirtualFile file) { + if (file == null || original == null) return null; + + Icon icon = original; + + final Bookmark bookmarkAtFile = BookmarkManager.getInstance(project).findFileBookmark(file); + if (bookmarkAtFile != null) { + final RowIcon composite = new RowIcon(2, RowIcon.Alignment.CENTER); + composite.setIcon(icon, 0); + composite.setIcon(bookmarkAtFile.getIcon(), 1); + icon = composite; + } + + if (!file.isWritable()) { + icon = LayeredIcon.create(icon, PlatformIcons.LOCKED_ICON); + } + + if (file.is(VFileProperty.SYMLINK)) { + icon = LayeredIcon.create(icon, PlatformIcons.SYMLINK_ICON); + } + + return icon; + } + protected boolean isDeprecated() { return false; } diff --git a/platform/lang-impl/src/com/intellij/ide/projectView/impl/nodes/PsiDirectoryNode.java b/platform/lang-impl/src/com/intellij/ide/projectView/impl/nodes/PsiDirectoryNode.java index b5bdc41a3bf0..a869465f64bf 100644 --- a/platform/lang-impl/src/com/intellij/ide/projectView/impl/nodes/PsiDirectoryNode.java +++ b/platform/lang-impl/src/com/intellij/ide/projectView/impl/nodes/PsiDirectoryNode.java @@ -16,8 +16,6 @@ package com.intellij.ide.projectView.impl.nodes; import com.intellij.ide.IconProvider; -import com.intellij.ide.bookmarks.Bookmark; -import com.intellij.ide.bookmarks.BookmarkManager; import com.intellij.ide.projectView.PresentationData; import com.intellij.ide.projectView.ProjectView; import com.intellij.ide.projectView.ViewSettings; @@ -38,19 +36,15 @@ import com.intellij.openapi.roots.ui.configuration.ProjectSettingsService; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.vfs.LocalFileSystem; -import com.intellij.openapi.vfs.VFileProperty; import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.pom.NavigatableWithText; import com.intellij.projectImport.ProjectAttachProcessor; import com.intellij.psi.PsiDirectory; import com.intellij.psi.impl.file.PsiDirectoryFactory; -import com.intellij.ui.LayeredIcon; -import com.intellij.ui.RowIcon; import com.intellij.ui.SimpleTextAttributes; import com.intellij.util.IconUtil; import com.intellij.util.PathUtil; -import com.intellij.util.PlatformIcons; import com.intellij.util.PlatformUtils; import org.jetbrains.annotations.NotNull; @@ -130,14 +124,14 @@ public class PsiDirectoryNode extends BasePsiNode implements Navig if (PlatformUtils.isAppCode()) { final Icon icon = IconUtil.getIcon(virtualFile, 0, myProject); if (icon != null) { - data.setIcon(patchIcon(icon, virtualFile)); + data.setIcon(icon); } } else { for (final IconProvider provider : Extensions.getExtensions(IconProvider.EXTENSION_POINT_NAME)) { final Icon icon = provider.getIcon(psiDirectory, 0); if (icon != null) { - data.setIcon(patchIcon(icon, virtualFile)); + data.setIcon(icon); return; } } @@ -273,28 +267,6 @@ public class PsiDirectoryNode extends BasePsiNode implements Navig return super.getTitle(); } - protected Icon patchIcon(Icon original, VirtualFile file) { - Icon icon = original; - - final Bookmark bookmarkAtFile = BookmarkManager.getInstance(myProject).findFileBookmark(file); - if (bookmarkAtFile != null) { - final RowIcon composite = new RowIcon(2, RowIcon.Alignment.CENTER); - composite.setIcon(icon, 0); - composite.setIcon(bookmarkAtFile.getIcon(), 1); - icon = composite; - } - - if (!file.isWritable()) { - icon = LayeredIcon.create(icon, PlatformIcons.LOCKED_ICON); - } - - if (file.is(VFileProperty.SYMLINK)) { - icon = LayeredIcon.create(icon, PlatformIcons.SYMLINK_ICON); - } - - return icon; - } - @Override public Comparable getSortKey() { if (ProjectAttachProcessor.canAttachToProject()) { diff --git a/platform/lang-impl/src/com/intellij/ide/todo/nodes/TodoDirNode.java b/platform/lang-impl/src/com/intellij/ide/todo/nodes/TodoDirNode.java index 36df4d391638..576147555eab 100644 --- a/platform/lang-impl/src/com/intellij/ide/todo/nodes/TodoDirNode.java +++ b/platform/lang-impl/src/com/intellij/ide/todo/nodes/TodoDirNode.java @@ -102,7 +102,7 @@ public final class TodoDirNode extends PsiDirectoryNode implements HighlightedRe protected void setupIcon(PresentationData data, PsiDirectory psiDirectory) { final VirtualFile virtualFile = psiDirectory.getVirtualFile(); if (ProjectRootsUtil.isModuleContentRoot(virtualFile, psiDirectory.getProject())) { - data.setIcon(patchIcon(new DirectoryIconProvider().getIcon(psiDirectory, 0), virtualFile)); + data.setIcon(new DirectoryIconProvider().getIcon(psiDirectory, 0)); } else { super.setupIcon(data, psiDirectory); }