【IDEA插件】简单介绍TreeStructureProvider和ProjectViewNodeDecorator

60 阅读2分钟

项目示例

gitee.com/regexpei/ma…

该项目对以下两个接口进行了简单的应用,仅供参考!

TreeStructureProvider

com.intellij.ide.projectView.TreeStructureProvider 是 IntelliJ IDEA 中的一个接口,用于自定义项目的视图结构,即 IDEA 视图中左侧 Project 中的结构。通过实现 TreeStructureProvider 接口,可以在项目视图中动态修改项目结构的展示方式,例如调整节点的显示顺序、隐藏特定节点、添加自定义节点等。

import com.intellij.ide.projectView.ViewSettings;
import com.intellij.ide.util.treeView.AbstractTreeNode;

import java.util.Collection;


public interface TreeStructureProvider {

    /**
     * 修改项目视图中指定节点的子节点列表
     *
     * @param parent   父节点
     * @param children 根据默认项目结构得到的子节点列表
     * @param settings 当前项目视图设置
     * @return 修改后的子节点集合,如果不需要修改,则返回 children
     */
    Collection<AbstractTreeNode<?>> modify(AbstractTreeNode<?> parent,
                                           Collection<AbstractTreeNode<?>> children,
                                           ViewSettings settings);

    /**
     * 为项目视图中当前选择的节点返回指定类型的用户数据对象。
     *
     * @param selected 在项目视图中选择的节点列表
     * @param dataId   请求求的数据对象的标识符(例如,在com.intellij.openapi.actionSystem.PlatformDatakeys 中定义)。
     * @return 据对象,如果该提供者无法返回数据对象,则返回 nul1。
     */
    default Object getData(Collection<? extends AbstractTreeNode<?>> selected, String dataId) {
        return null;
    }
}

ProjectViewNodeDecorator

com.intellij.ide.projectView.ProjectViewNodeDecorator 是 IntelliJ IDEA 中的一个接口,用于修改项目视图中节点的表示形式。该接口中的方法允许开发人员自定义项目视图和包依赖视图节点的展示方式,以满足特定需求或提供更好的用户体验。通过实现这些方法,可以对节点的展示信息进行定制化处理,从而更好地呈现项目结构和依赖关系。比如对节点添加备注信息、修改节点文字颜色、修改节点图标等。

import com.intellij.ide.projectView.PresentationData;
import com.intellij.ide.projectView.ProjectViewNode;
import com.intellij.packageDependencies.ui.PackageDependenciesNode;
import com.intellij.ui.ColoredTreeCellRenderer;

public interface MyProjectViewNodeDecorator {
    /**
     * 修改项目视图节点的展示方式
     *
     * @param node 节点
     * @param data 节点当前展示的信息
     */
    void decorate(ProjectViewNode<?> node, PresentationData data);

    /**
     * 修改项目视图包依赖节点的展示方式(已启用)
     *
     * @param node         包依赖节点
     * @param cellRenderer 用于渲染树形单元格的颜色
     */
    @Deprecated(forRemoval = true)
    default void decorate(PackageDependenciesNode node, ColoredTreeCellRenderer cellRenderer) {
    }
}