optimization
[fedora-idea.git] / platform / lang-impl / src / com / intellij / ide / util / treeView / AbstractTreeStructureBase.java
blob7df9313f92d3fd4e64f680853daa2a81a110dfb5
1 package com.intellij.ide.util.treeView;
3 import com.intellij.ide.projectView.TreeStructureProvider;
4 import com.intellij.ide.projectView.ViewSettings;
5 import com.intellij.openapi.diagnostic.Logger;
6 import com.intellij.openapi.project.Project;
7 import com.intellij.openapi.project.DumbService;
8 import com.intellij.util.ArrayUtil;
9 import org.jetbrains.annotations.NotNull;
10 import org.jetbrains.annotations.Nullable;
12 import java.util.ArrayList;
13 import java.util.Collection;
14 import java.util.List;
16 public abstract class AbstractTreeStructureBase extends AbstractTreeStructure {
17 protected final Project myProject;
19 private static final Logger LOG = Logger.getInstance("#com.intellij.ide.util.treeView.AbstractTreeStructureBase");
22 protected AbstractTreeStructureBase(Project project) {
23 myProject = project;
26 public Object[] getChildElements(Object element) {
27 LOG.assertTrue(element instanceof AbstractTreeNode, element.getClass().getName());
28 AbstractTreeNode<?> treeNode = (AbstractTreeNode)element;
29 Collection<? extends AbstractTreeNode> elements = treeNode.getChildren();
30 List<TreeStructureProvider> providers = getProvidersDumbAware();
31 if (providers != null && !providers.isEmpty()) {
32 for (TreeStructureProvider provider : providers) {
33 elements = provider.modify(treeNode, (Collection<AbstractTreeNode>)elements, ViewSettings.DEFAULT);
36 for (AbstractTreeNode node : elements) {
37 node.setParent(treeNode);
40 return ArrayUtil.toObjectArray(elements);
43 public Object getParentElement(Object element) {
44 if (element instanceof AbstractTreeNode){
45 return ((AbstractTreeNode)element).getParent();
47 return null;
50 @NotNull
51 public NodeDescriptor createDescriptor(final Object element, final NodeDescriptor parentDescriptor) {
52 return (NodeDescriptor)element;
55 @Nullable
56 public abstract List<TreeStructureProvider> getProviders();
58 public Object getDataFromProviders(final List<AbstractTreeNode> selectedNodes, final String dataId) {
59 final List<TreeStructureProvider> providers = getProvidersDumbAware();
60 if (providers != null) {
61 for (TreeStructureProvider treeStructureProvider : providers) {
62 final Object fromProvider = treeStructureProvider.getData(selectedNodes, dataId);
63 if (fromProvider != null) {
64 return fromProvider;
68 return null;
71 private List<TreeStructureProvider> getProvidersDumbAware() {
72 if (myProject == null) {
73 return new ArrayList<TreeStructureProvider>();
76 return DumbService.getInstance(myProject).filterByDumbAwareness(getProviders());