Modifying Project View Structure
This tutorial is meant to illustrate how the project tree structure view appearance can be modified programmatically.
This topic describes the treeStructureProvider sample plugin.
The steps below show how to filter out and keep visible only text files and directories in the Project View Panel.
Other use cases include:
grouping/nesting related entries, e.g., GUI Designer .form file and related bound class (
FormMergerTreeStructureProvider
).provide additional "nested" nodes, e.g., contents of custom archive file
To provide custom Structure View behaviour, implement TreeStructureProvider
with the nodes filtering logic in modify()
method. If access to indexes is not required, it can be marked dumb aware.
The example below shows how to filter out all the Project View nodes except those which correspond to text files and directories.
final class TextOnlyTreeStructureProvider implements TreeStructureProvider {
@NotNull
@Override
public Collection<AbstractTreeNode<?>> modify(@NotNull AbstractTreeNode<?> parent,
@NotNull Collection<AbstractTreeNode<?>> children,
ViewSettings settings) {
ArrayList<AbstractTreeNode<?>> nodes = new ArrayList<>();
for (AbstractTreeNode<?> child : children) {
if (child instanceof PsiFileNode) {
VirtualFile file = ((PsiFileNode) child).getVirtualFile();
if (file != null && !file.isDirectory() && !(file.getFileType() instanceof PlainTextFileType)) {
continue;
}
}
nodes.add(child);
}
return nodes;
}
}
Register the implementation in com.intellij.treeStructureProvider
extension point to the plugin.xml
<extensions defaultExtensionNs="com.intellij">
<treeStructureProvider implementation="org.intellij.sdk.treeStructureProvider.TextOnlyTreeStructureProvider"/>
</extensions>
See Code Samples on how to set up and run the plugin.
After going through the steps described above, you can see only text files and directories belonging to a project in the Project View.
