replaced <code></code> with more concise {@code}
[idea/community.git] / platform / editor-ui-api / src / com / intellij / ide / projectView / TreeStructureProvider.java
1 /*
2  * Copyright 2000-2017 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.ide.projectView;
17
18 import com.intellij.ide.util.treeView.AbstractTreeNode;
19 import com.intellij.openapi.extensions.ExtensionPointName;
20 import org.jetbrains.annotations.NotNull;
21 import org.jetbrains.annotations.Nullable;
22
23 import java.util.Collection;
24
25 /**
26  * Allows a plugin to modify the structure of a project as displayed in the project view.
27  */
28 public interface TreeStructureProvider {
29   ExtensionPointName<TreeStructureProvider> EP_NAME = ExtensionPointName.create("com.intellij.treeStructureProvider");
30
31   /**
32    * Allows a plugin to modify the list of children displayed for the specified node in the
33    * project view.
34    *
35    * @param parent   the parent node.
36    * @param children the list of child nodes according to the default project structure.
37    *                 Elements of the collection are of type {@link ProjectViewNode}.
38    * @param settings the current project view settings.
39    * @return the modified collection of child nodes, or {@code children} if no modifications
40    *         are required.
41    */
42   @NotNull
43   Collection<AbstractTreeNode> modify(@NotNull AbstractTreeNode parent, @NotNull Collection<AbstractTreeNode> children, ViewSettings settings);
44
45   /**
46    * Returns a user data object of the specified type for the specified selection in the
47    * project view.
48    *
49    * @param selected the list of nodes currently selected in the project view.
50    * @param dataName the identifier of the requested data object (for example, as defined in
51    *                 {@link com.intellij.openapi.actionSystem.PlatformDataKeys})
52    * @return the data object, or null if no data object can be returned by this provider.
53    * @see com.intellij.openapi.actionSystem.DataProvider
54    */
55   @Nullable
56   default Object getData(Collection<AbstractTreeNode> selected, String dataName) {
57     return null;
58   }
59 }