IDEA插件开发.02之“异味”代码收集插件

简介: 许久没更新IDEA插件开发系列了。最近刚好在汇总日常开发中常见的代码“异味”,共享文档复制黏贴略显麻烦,所以想着是否可以搞一个IDEA插件来帮忙收集常见代码,毕竟IDEA作为后端程序员必备的开发工具,显然会方便很多。

前言

许久没更新IDEA插件开发系列了。最近刚好在汇总日常开发中常见的代码“异味”,共享文档复制黏贴略显麻烦,所以想着是否可以搞一个IDEA插件来帮忙收集常见代码,毕竟IDEA作为后端程序员必备的开发工具,显然会方便很多。

于是,说干就干......

源码地址已开放:https://github.com/Shamee99/bugs-collectidea-plugins/tree/master。欢迎指导。

制定需求

功能需求大概包含如下:

  1. 选择“异味”代码,鼠标右键点击添加该代码片段;
  2. 添加代码片段,弹出信息添加弹窗,基本信息包含:代码标题简述,修改建议;
  3. 将添加的代码片段进行数据集中管理(存储);
  4. 添加消息推送功能;

开撸

新建工程bugs-collect

网络异常,图片无法展示
|

配置plugin.xml

配置中提前配置了插件详细信息,以及插件对应的行为。

下面的配置信息可以用devkit插件生成,描述了该插件功能添加的位置,菜单等等。

<action id="BugsCollectPluginId" class="com.shamee.plugins.bugscollect.action.EditorBugsPopupAction"
                text="添加Bug代码" description="右击添加该选中代码记录bug系统">
            <add-to-group group-id="EditorPopupMenu" anchor="first"/>
            <keyboard-shortcut keymap="$default" first-keystroke="alt B"/>
        </action>

下面为完整配置:

<!-- Plugin Configuration File. Read more: https://plugins.jetbrains.com/docs/intellij/plugin-configuration-file.html -->
<idea-plugin>
    <id>com.shamee.ide.plugins.bug-collect</id>
    <name>BugsCollect</name>
    <vendor email="xxxxx" url="https://xxxxxx">shamee</vendor>
    <description>
        <![CDATA[
            Common odor codes can be added to the bug collection system with the right mouse button
          ]]>
    </description>
    <depends>com.intellij.modules.platform</depends>
    <extensions defaultExtensionNs="com.intellij">
    </extensions>
    <actions>
        <!-- Add your actions here -->
        <action id="BugsCollectPluginId" class="com.shamee.plugins.bugscollect.action.EditorBugsPopupAction"
                text="添加Bug代码" description="右击添加该选中代码记录bug系统">
            <add-to-group group-id="EditorPopupMenu" anchor="first"/>
            <keyboard-shortcut keymap="$default" first-keystroke="alt B"/>
        </action>
    </actions>
</idea-plugin>

设置获取选中代码片段行为类

EditorBugsPopupAction继承了AnAction,并重写actionPerformed方法。作用是获取idea编辑界面选中的文本内容,并且打开信息填写对话框。

public class EditorBugsPopupAction extends AnAction {
    @Override
    public void actionPerformed(AnActionEvent e) {
        // 获取到idea编辑界面实例
        Editor editor = e.getRequiredData(CommonDataKeys.EDITOR);
        // 获取编辑实例选择模式
        SelectionModel selectionModel = editor.getSelectionModel();
        // 获取选中文本信息
        String selectedText = selectionModel.getSelectedText();
        // 设置数据中心数据
        DataCenter.SELECT_CODE = selectedText;
        // 开启弹窗
        new BugCollectDialog().show();
    }
}

新建BugCollectDialog,用于填写异味代码详细信息

BugCollectDialog为代码信息填写的对话框。该对话框绘制了标题填写栏editorTextFieldTitle,建议填写栏editorTextFieldSuggest,以及按钮组件addButton。使用jpanel绘制弹窗布局。

public class BugCollectDialog extends DialogWrapper {
    private static final Logger logger = LoggerFactory.getLogger(BugCollectDialog.class);
    private EditorTextField editorTextFieldTitle;
    private EditorTextField editorTextFieldSuggest;
    public BugCollectDialog() {
        super(true);
        init();
        setTitle("添加Bug代码片段信息");
    }
    @Override
    protected @Nullable
    JComponent createCenterPanel() {
        JPanel panel = new JPanel(new BorderLayout());
        editorTextFieldTitle = new EditorTextField("异味代码描述");
        editorTextFieldSuggest = new EditorTextField("异味代码修改建议");
        editorTextFieldSuggest.setPreferredSize(new Dimension(300, 200));
        panel.add(editorTextFieldTitle, BorderLayout.NORTH);
        panel.add(editorTextFieldSuggest, BorderLayout.CENTER);
        return panel;
    }
    @Override
    protected JComponent createSouthPanel() {
        JPanel panel = new JPanel(new FlowLayout());
        JButton addButton = new JButton("添加到异味代码列表");
        // 按钮点击事件
        addButton.addActionListener(e -> {
        });
        panel.add(addButton);
        return panel;
    }

添加按钮监听

BugCollectDialog底部按钮添加事件监听。当填写完代码信息后点击该按钮,将详细信息,代码片段统一入库。

// 按钮点击事件
        addButton.addActionListener(e -> {
            // 获取标题
            String title = editorTextFieldTitle.getText();
            // 获取建议
            String suggest = editorTextFieldSuggest.getText();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String date = sdf.format(new Date());
            String sql = "INSERT INTO `bugs-collect`.`bugs-collect-info` (title, suggest, code, create_date) VALUES('" + title + "', '" + suggest + "', '" + DataCenter.SELECT_CODE + "', '" + date + "');";
            Connection connection = null;
            Statement statement = null;
            try {
                connection = JdbcQuery.getConnection();
                statement = JdbcQuery.getStatement(connection);
                statement.executeUpdate(sql);
            } catch (SQLException ex) {
                logger.error(ex.getMessage(), ex);
                throw new RuntimeException(ex);
            } finally {
                JdbcQuery.relase(connection, statement, null);
            }
            MessageDialogBuilder.yesNo("操作结果", "添加成功").show();
            BugCollectDialog.this.dispose();
        });

数据库操作工具类

public class JdbcQuery {
    static {
        try {
            Class.forName(JdbcConstants.JDBC_DRIVER);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //获取链接
    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(JdbcConstants.JDBC_URL, JdbcConstants.JDBC_USERNAME, JdbcConstants.JDBC_PASSWORD);
    }
    public static Statement getStatement(Connection con) throws SQLException {
        return con.createStatement();
    }
    //释放连接资源
    public static void relase(Connection co, Statement st, ResultSet rs){
        if(rs != null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (st != null) {
            try {
                st.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (co != null) {
            try {
                co.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

调试看效果

选中代码右键,可以看到“添加Bug代码”功能已添加:

网络异常,图片无法展示
|

点击添加Bug代码:

网络异常,图片无法展示
|

点击添加到异味代码列表,提示操作成功:

网络异常,图片无法展示
|

看一眼数据库数据:

网络异常,图片无法展示
|

待处理列表

数据统一收集后,便可以进行数据的分发推送操作处理。

  1. 代码推送管理;
  2. 每次添加都直接入库,看不到添加的效果;
  3. ......

Gradle打包

点击Tasks -> intellij -> buildPlugin。

网络异常,图片无法展示
|

控制台提示打包完成后,查看工程build-> distributions下,已经生成了该插件压缩包。

网络异常,图片无法展示
|

安装试用

File -> Settings -> Plugins。

网络异常,图片无法展示
|

选择刚打包好的zip就可以直接安装使用啦。

Nice...

相关文章
|
2月前
|
网络协议 Windows
两步带你解决IDEA 插件下载安装慢、超时、不成功问题
这篇文章提供了解决IDEA插件下载慢或超时问题的方案,通过查找国内插件节点IP地址并修改本地hosts文件来加速下载。
两步带你解决IDEA 插件下载安装慢、超时、不成功问题
|
7天前
|
Java
轻松上手Java字节码编辑:IDEA插件VisualClassBytes全方位解析
本插件VisualClassBytes可修改class字节码,包括class信息、字段信息、内部类,常量池和方法等。
49 6
|
2月前
|
Java
可直接编辑jar包的IDEA插件-JarEditor
IDEA自带的反编译插件虽可查看jar包中的class文件,但无法直接编辑。为解决此问题,作者开发了JarEditor插件,可在IDEA中直接编辑jar文件内的class及资源文件,无需解压或手动编译。点击Jar Editor可修改代码,通过Save/Compile保存并编译,Build Jar则将更改写回jar包。该插件简化了jar包编辑流程,提高了开发效率。
185 4
可直接编辑jar包的IDEA插件-JarEditor
|
1月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
67 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
22天前
|
搜索推荐 Java 数据库连接
Java|在 IDEA 里自动生成 MyBatis 模板代码
基于 MyBatis 开发的项目,新增数据库表以后,总是需要编写对应的 Entity、Mapper 和 Service 等等 Class 的代码,这些都是重复的工作,我们可以想一些办法来自动生成这些代码。
29 6
|
1月前
|
Java 应用服务中间件 Maven
【终极解决方案】IDEA maven 项目修改代码不生效。
【终极解决方案】IDEA maven 项目修改代码不生效。
314 1
|
1月前
|
Java Linux 开发工具
IDEA中git提交前如何关闭code analysis以及开启格式化代码
【10月更文挑战第12天】本文介绍了在 IntelliJ IDEA 中关闭代码分析和开启代码格式化的步骤。关闭代码分析可通过取消默认启用检查或针对特定规则进行调整实现,同时可通过设置 VCS 静默模式在提交时跳过检查。开启代码格式化则需在 `Settings` 中配置 `Code Style` 规则,并通过创建 Git 钩子实现提交前自动格式化。
193 3
|
1月前
|
Windows
IDEA如何查看已经安装的插件并删除
【10月更文挑战第1天】这段内容主要介绍了如何在IntelliJ IDEA中查看和删除已安装的插件。可以通过软件内的插件市场查看插件列表,包括插件名称、版本号和供应商等信息;也可以通过访问插件目录查看。删除插件则建议在插件市场中进行,包括禁用和卸载步骤,手动删除插件文件夹的方法不推荐,因为可能存在配置残留等问题。
489 11
|
1月前
|
人工智能 Java 数据库连接
IDEA开发 常用代码规范插件 常用辅助类插件
IDEA开发 常用代码规范插件 常用辅助类插件
45 0
|
2月前
|
Linux Windows
IDEA如何查看每一行代码的提交记录(人员,时间)
【9月更文挑战第24天】在IntelliJ IDEA中,可通过安装GitToolBox插件并利用其功能来便捷地查看每行代码的提交记录,包括提交者、时间和提交信息。具体操作为:首先安装GitToolBox插件,然后在代码编辑区域将鼠标悬停于目标代码行以查看简要信息,或使用快捷键打开“Version Control”窗口查看详细提交历史。
1597 2