1 package com
.intellij
.ide
.projectView
.impl
.nodes
;
3 import com
.intellij
.ide
.IconProvider
;
4 import com
.intellij
.ide
.projectView
.PresentationData
;
5 import com
.intellij
.ide
.projectView
.ViewSettings
;
6 import com
.intellij
.ide
.projectView
.impl
.ProjectRootsUtil
;
7 import com
.intellij
.ide
.util
.treeView
.AbstractTreeNode
;
8 import com
.intellij
.openapi
.extensions
.Extensions
;
9 import com
.intellij
.openapi
.module
.Module
;
10 import com
.intellij
.openapi
.module
.ModuleUtil
;
11 import com
.intellij
.openapi
.project
.Project
;
12 import com
.intellij
.openapi
.roots
.ModuleFileIndex
;
13 import com
.intellij
.openapi
.roots
.ModuleRootManager
;
14 import com
.intellij
.openapi
.roots
.ProjectFileIndex
;
15 import com
.intellij
.openapi
.roots
.ProjectRootManager
;
16 import com
.intellij
.openapi
.roots
.ui
.configuration
.ProjectSettingsService
;
17 import com
.intellij
.openapi
.util
.Iconable
;
18 import com
.intellij
.openapi
.vfs
.VfsUtil
;
19 import com
.intellij
.openapi
.vfs
.VirtualFile
;
20 import com
.intellij
.psi
.PsiDirectory
;
21 import com
.intellij
.psi
.impl
.file
.PsiDirectoryFactory
;
22 import com
.intellij
.ui
.LayeredIcon
;
23 import com
.intellij
.util
.Icons
;
24 import org
.jetbrains
.annotations
.NotNull
;
27 import java
.util
.Collection
;
29 public class PsiDirectoryNode
extends BasePsiNode
<PsiDirectory
> {
30 public PsiDirectoryNode(Project project
, PsiDirectory value
, ViewSettings viewSettings
) {
31 super(project
, value
, viewSettings
);
34 protected void updateImpl(PresentationData data
) {
35 final Project project
= getProject();
36 final PsiDirectory psiDirectory
= getValue();
37 final VirtualFile directoryFile
= psiDirectory
.getVirtualFile();
38 final String name
= getParentValue() instanceof Project
39 ? psiDirectory
.getVirtualFile().getPresentableUrl()
40 : ProjectViewDirectoryHelper
.getInstance(psiDirectory
.getProject()).getNodeName(getSettings(), getParentValue(), psiDirectory
);
46 final VirtualFile virtualFile
= psiDirectory
.getVirtualFile();
47 final boolean isWritable
= virtualFile
.isWritable();
49 data
.setPresentableText(name
);
50 if (ProjectRootsUtil
.isModuleContentRoot(directoryFile
, project
) || ProjectRootsUtil
.isLibraryRoot(directoryFile
, project
)) {
51 final String locationString
= directoryFile
.getPresentableUrl();
52 if (!locationString
.equals(name
)) {
53 data
.setLocationString(locationString
);
57 if (!ProjectRootsUtil
.isInTestSource(directoryFile
, project
)) {
58 data
.setLocationString(ProjectViewDirectoryHelper
.getInstance(project
).getLocationString(psiDirectory
, false));
62 for (final IconProvider provider
: Extensions
.getExtensions(IconProvider
.EXTENSION_POINT_NAME
)) {
63 final Icon openIcon
= provider
.getIcon(psiDirectory
, Iconable
.ICON_FLAG_OPEN
);
64 if (openIcon
!= null) {
65 final Icon closedIcon
= provider
.getIcon(psiDirectory
, Iconable
.ICON_FLAG_CLOSED
);
66 if (closedIcon
!= null) {
67 data
.setOpenIcon(addReadMark(openIcon
, isWritable
));
68 data
.setClosedIcon(addReadMark(closedIcon
, isWritable
));
76 public Collection
<AbstractTreeNode
> getChildrenImpl() {
77 return ProjectViewDirectoryHelper
.getInstance(myProject
).getDirectoryChildren(getValue(), getSettings(), true);
80 public String
getTestPresentation() {
81 return "PsiDirectory: " + getValue().getName();
84 public boolean isFQNameShown() {
85 return ProjectViewDirectoryHelper
.getInstance(getProject()).isShowFQName(getSettings(), getParentValue(), getValue());
88 public boolean contains(@NotNull VirtualFile file
) {
89 final PsiDirectory value
= getValue();
94 if (!VfsUtil
.isAncestor(value
.getVirtualFile(), file
, false)) {
97 final Project project
= value
.getProject();
98 final ProjectFileIndex fileIndex
= ProjectRootManager
.getInstance(project
).getFileIndex();
99 final Module module
= fileIndex
.getModuleForFile(value
.getVirtualFile());
100 if (module
== null) {
101 return fileIndex
.getModuleForFile(file
) == null;
103 final ModuleFileIndex moduleFileIndex
= ModuleRootManager
.getInstance(module
).getFileIndex();
105 return moduleFileIndex
.isInContent(file
);
108 public VirtualFile
getVirtualFile() {
109 PsiDirectory directory
= getValue();
110 if (directory
== null) return null;
111 return directory
.getVirtualFile();
114 public boolean canRepresent(final Object element
) {
115 if (super.canRepresent(element
)) return true;
116 PsiDirectory directory
= getValue();
117 if (directory
== null) return false;
118 return ProjectViewDirectoryHelper
.getInstance(getProject()).canRepresent(element
, directory
);
121 public boolean canNavigate() {
122 VirtualFile virtualFile
= getVirtualFile();
123 return virtualFile
!= null && (ProjectRootsUtil
.isSourceOrTestRoot(virtualFile
, getProject()) || ProjectRootsUtil
.isLibraryRoot(virtualFile
, getProject()));
126 public boolean canNavigateToSource() {
130 public void navigate(final boolean requestFocus
) {
131 Module module
= ModuleUtil
.findModuleForPsiElement(getValue());
132 if (module
!= null) {
133 ProjectSettingsService
.getInstance(myProject
).openContentEntriesSettings(module
);
137 public int getWeight() {
138 return isFQNameShown() ?
70 : 0;
141 public String
getTitle() {
142 final PsiDirectory directory
= getValue();
143 if (directory
!= null) {
144 return PsiDirectoryFactory
.getInstance(getProject()).getQualifiedName(directory
, true);
146 return super.getTitle();
149 private static Icon
addReadMark(Icon originalIcon
, boolean isWritable
) {
154 return LayeredIcon
.create(originalIcon
, Icons
.LOCKED_ICON
);
158 public String
getQualifiedNameSortKey() {
159 final PsiDirectoryFactory factory
= PsiDirectoryFactory
.getInstance(getProject());
160 return factory
.getQualifiedName(getValue(), true);
163 public int getTypeSortWeight(final boolean sortByType
) {
168 public boolean shouldDrillDownOnEmptyElement() {