# demo-intellij-plugin **Repository Path**: regexpei/demo-intellij-plugin ## Basic Information - **Project Name**: demo-intellij-plugin - **Description**: IDEA插件开发案例 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2024-06-10 - **Last Updated**: 2025-05-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## IDEA 插件开发 ### 基础知识 1. DumbAware 用于标记那些不需要等待IDE索引完成的插件组件或操作 ### 案例实战 #### 一、新建项目 1. File -> New -> Project... ![create_plugin_project_1.png](img/CreateProject/create_plugin_project_1.png) 2. 左侧 Generators 选择 IDE Plugin,填写项目名称、选择类型(Plugin)等 ![create_plugin_project_2.png](img/CreateProject/create_plugin_project_2.png) 3. 创建完配置 JDK 和 Gradle,如果已经配置好,则跳过,等待加载完成即可 ![jdk_config.png](img/CreateProject/jdk_config.png) ![gradle_config.png](img/CreateProject/gradle_config.png) > 如果 Generators 中没有 IDE Plugin,则说明没有装 IDE 插件开发插件 > 在插件市场搜索 devkit 安装重启即可 > ![plugin_devkit.png](img/CreateProject/plugin_devkit.png) #### 二、创建工具窗口 ToolWindow ToolWindow 在 IDEA 中被放在左侧、右侧、底部,例如 Project、Service、Maven 等。 1. 通过 GUI Form 创建所要显示的面板,并绘制展示内容 [ContentPanel](src/main/java/cn/regexp/demo/ui/ContentPanel.java) [ContentPanel.form](src/main/java/cn/regexp/demo/ui/ContentPanel.form) ![create_form.png](img/ToolWindow/create_form.png) 2. 创建 [ContentToolWindow](src/main/java/cn/regexp/demo/ui/ContentToolWindow.java) 并继承 SimpleToolWindowPanel 3. 创建 [ContentToolWindowFactory](src/main/java/cn/regexp/demo/factory/ContentToolWindowFactory.java) 并继承 ToolWindowFactory,实现 createToolWindowContent 方法,将创建好的 ToolWindow 添加到内容管理器 4. 最后还需要将 ContentToolWindowFactory 在 [plugin.xml](src/main/resources/META-INF/plugin.xml) 中进行注册 **效果展示**: ![custom_toolwindow.png](img/ToolWindow/custom_toolwindow.png) #### 三、Diff 面板 Toolbar 添加 按钮 Diff 面板即比较文件差异(Compare Files)时所打开的页面,那么,如何在这个页面的 Toolbar 添加一个新的按钮? ![diff_toolbar.png](img/Toolbar/diff_toolbar.png) 1. 创建一个按钮 [CommentAction](src/main/java/cn/regexp/demo/action/CommentAction.java) ![add_action_1.png](img/Toolbar/add_action_1.png) ![add_action_2.png](img/Toolbar/add_action_2.png) 2. 在 actionPerformed 方法中编写按钮所需要完成的逻辑 3. 创建 [CommentDiffTool](src/main/java/cn/regexp/demo/extension/CommentDiffTool.java) 并继承 FrameDiffTool - canShow: 自定义是否展示扩展的内容 - createComponent: 创建一个新的面板,通过调用 super() 方法获取原本的面板,并对面板进行扩展 4. 将 CommentDiffTool 在 [plugin.xml](src/main/resources/META-INF/plugin.xml) 中进行注册 **效果展示**: ![diff_toolbar_extension.png](img/Toolbar/diff_toolbar_extension.png) #### 四、给某个按钮添加气泡 通过 JBPopupFactory 工厂类进行创建 BalloonBuilder,然后就可以对 Balloon 设置一些属性。 [ContentPanel.java](src/main/java/cn/regexp/demo/ui/ContentPanel.java) **效果展示**: ![tip.png](img/Balloon/tip.png) ### 问题记录 1. **错误: 找不到符号** ![issue_1.png](img/Issue/issue_1.png) 解决方法: ```kotlin annotationProcessor("org.projectlombok:lombok:1.18.24") ``` 2. **java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field 'com.sun.tools.javac.tree.JCTree qualid'** ![issue_2.png](img/Issue/issue_2.png) 解决方法:更新 lombok 的版本为 1.18.30