package com.dd; import com.intellij.icons.AllIcons; import com.intellij.ide.projectView.PresentationData; import com.intellij.ide.projectView.ProjectViewNode; import com.intellij.ide.projectView.ViewSettings; import com.intellij.ide.projectView.impl.nodes.PsiFileNode; import com.intellij.ide.util.PropertiesComponent; import com.intellij.ide.util.treeView.AbstractTreeNode; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.List; public class DirectoryNode extends ProjectViewNode<PsiFile> { private final String mName; private List<AbstractTreeNode> mChildNodeList; protected DirectoryNode(Project project, ViewSettings viewSettings, PsiFile directory, String name) { super(project, directory, viewSettings); mName = name; mChildNodeList = new ArrayList<AbstractTreeNode>(); } @Override public boolean contains(@NotNull VirtualFile file) { for (final AbstractTreeNode childNode : mChildNodeList) { ProjectViewNode treeNode = (ProjectViewNode) childNode; if (treeNode.contains(file)) { return true; } } return false; } public void addChildren(AbstractTreeNode treeNode) { mChildNodeList.add(treeNode); } public void addAllChildren(List<AbstractTreeNode> treeNodeList) { mChildNodeList.addAll(treeNodeList); } @NotNull @Override public List<AbstractTreeNode> getChildren() { if (PropertiesComponent.getInstance().getBoolean(SettingConfigurable.PREFIX_HIDE, false)) { final ArrayList<AbstractTreeNode> abstractTreeNodes = new ArrayList<>(); for (AbstractTreeNode fileNode : mChildNodeList) { PsiFile psiFile = (PsiFile) fileNode.getValue(); final ViewSettings settings = ((PsiFileNode) fileNode).getSettings(); String shortName = psiFile.getName().substring(mName.length()); final int beginIndex = shortName.indexOf(ProjectStructureProvider.COMPOSE_BY_CHAR); if (beginIndex != -1) { shortName = shortName.substring(beginIndex + 1); } abstractTreeNodes.add(new FoldingNode(fileNode.getProject(), psiFile, settings, shortName)); } return abstractTreeNodes; } else { return mChildNodeList; } } @Override protected void update(PresentationData presentation) { presentation.setPresentableText(mName); presentation.setIcon(AllIcons.Nodes.Folder); } }