Custom child for java file node in project tree
I'm trying to add custom children to java files in project tree. I created implemetion of TreeStructureProvider, but node isn't added to tree.
public class AndroidViewTreeStructureProvider implements TreeStructureProvider {
@Override
public Collection<AbstractTreeNode> modify(AbstractTreeNode abstractTreeNode, Collection<AbstractTreeNode> abstractTreeNodes, ViewSettings viewSettings) {if (abstractTreeNode.getValue() instanceof PsiJavaDirectoryImpl) {
for (AbstractTreeNode child : abstractTreeNodes) {
if (child instanceof JavaSourceNode) {
return abstractTreeNodes;
}
if(child.getValue() instanceof PsiJavaFileImpl) {
PsiJavaFileImpl javaFile = (PsiJavaFileImpl) child.getValue();
child.getChildren().add(new JavaSourceNode(javaFile, abstractTreeNode.getProject()));
}
}
}
return abstractTreeNodes;
}
@Nullable
@Override
public Object getData(Collection<AbstractTreeNode> abstractTreeNodes, String s) {
return null;
}
private class JavaSourceNode extends ProjectViewNode<String> {
protected JavaSourceNode(PsiJavaFileImpl src, Project projects) {
super(projects, src.getName(), ViewSettings.DEFAULT);
}
@Override
public boolean contains(@NotNull VirtualFile virtualFile) {
return false; //To change body of implemented methods use File | Settings | File Templates.
}
@NotNull
@Override
public Collection<? extends AbstractTreeNode> getChildren() {
Collection<PsiFileNode> children = new ArrayList<PsiFileNode>();
return children;
}
protected void update(PresentationData presentation) {
presentation.setPresentableText(getValue());
presentation.setIcon(PlatformIcons.SYMLINK_ICON);
}
}
}
Please sign in to leave a comment.
The TreeStructureProvider allows you to modify the list of children of specifically the node that is passed to the modify() method, and you do it by returning a new list of children from the method. Trying to modify the list of children of some other nodes directly is not going to work.
So is there any other way to add custom node to PsiJavaFile node?