IDEA插件开发.02之“异味”代码收集插件
创始人
2024-05-31 02:55:40
0
  1. 前言

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

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

  1. 制定需求

功能需求大概包含如下:

  1. 选择“异味”代码,鼠标右键点击添加该代码片段;

  1. 添加代码片段,弹出信息添加弹窗,基本信息包含:代码标题简述,修改建议;

  1. 将添加的代码片段进行数据集中管理(存储);

  1. 添加消息推送功能;

  1. 开撸

  1. 新建工程bugs-collect

  1. 配置plugin.xml

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

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

下面为完整配置:


com.shamee.ide.plugins.bug-collectBugsCollectshameecom.intellij.modules.platform
  1. 设置获取选中代码片段行为类

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

public class EditorBugsPopupAction extends AnAction {@Overridepublic 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();}
}
  1. 新建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代码片段信息");}@Overrideprotected @NullableJComponent 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;}@Overrideprotected JComponent createSouthPanel() {JPanel panel = new JPanel(new FlowLayout());JButton addButton = new JButton("添加到异味代码列表");// 按钮点击事件addButton.addActionListener(e -> {});panel.add(addButton);return panel;}
  1. 添加按钮监听

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();});
  1. 数据库操作工具类

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();}}}
}
  1. 调试看效果

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

点击添加Bug代码:

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

看一眼数据库数据:

  1. 待处理列表

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

  1. 代码推送管理;

  1. 每次添加都直接入库,看不到添加的效果;

  1. ......

  1. Gradle打包

点击Tasks -> intellij -> buildPlugin。

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

  1. 安装试用

File -> Settings -> Plugins。

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

Nice...

相关内容

热门资讯

高考优秀作文(最新6篇) 高考优秀作文 篇一努力与机遇——我的高考心得高考是每个学生人生中的重要时刻,对于我来说也不例外。回顾...
历年高考漫画满分作文:《掘井... 历年高考漫画满分作文:《掘井》 篇一《掘井》是一幅历年高考漫画作品,通过一个简单的场景,揭示了人们在...
高考优秀作文三种结构【精选3... 高考优秀作文三种结构 篇一传统结构、递进结构和对比结构在高考优秀作文中的应用在高考作文中,作文结构是...
高考满分的作文赏析范文【最新... 高考满分的作文赏析范文 篇一题目:爱与责任作文内容:在生活中,爱与责任是人们不可或缺的因素。而能够将...
轰动安徽的高考0分作文:打脸... 轰动安徽的高考0分作文:打脸的背后 篇一在安徽省高考成绩发布当天,一篇名为《我的母亲》的作文引起了广...
高考江苏语文卷作文范文(精选... 高考江苏语文卷作文范文 篇一:传统文化的传承与创新近年来,传统文化的传承与创新成为了热门话题。传统文...
高考作文800字(实用6篇) 高考作文800字 篇一:探索人工智能在教育中的应用随着科技的不断发展,人工智能(AI)已经成为了各行...
高考作文素材之成长成才(最新... 高考作文素材之成长成才 篇一标题:成长的关键——培养自我管理能力成长是一个人从无知到有知,从幼稚到成...
责任高考作文素材【实用6篇】 责任高考作文素材 篇一高考,作为每个学生的重要考试,不仅决定了他们的大学录取结果,更是对他们责任的一...
高考志愿平行志愿是什么意思详... 高考志愿平行志愿是什么意思详解 篇一高考志愿平行志愿是什么意思详解高考是每个学生都要经历的一场考试,...
最新高考作文预测:成长为“T... 最新高考作文预测:成长为“T”型人才 篇一随着社会的发展和变革,人才的培养也面临着新的挑战。传统的专...
山东省高考优秀作文【优秀3篇... 山东省高考优秀作文 篇一:《奋斗的力量》山东省高考优秀作文 篇二:《家乡的美》山东省高考优秀作文 篇...
语文高考作文范文500字18... 语文高考作文范文500字18篇 篇一标题:尊重自然,保护生态第一篇内容尊重自然,保护生态是我们每个人...
高考作文春来草自青【优选3篇... 高考作文春来草自青 篇一:追寻春天的足迹春季是一年中最美丽的时节,万物复苏,草木葱茏。在这个季节里,...
上海卷高考作文题目:更重要的... 上海卷高考作文题目:更重要的事 篇一重要事情的定义因人而异"更重要的事"是一个主观而又复杂的概念。对...
河南85.5万考生高考 录取... 河南85.5万考生高考 录取率达75% 篇一高考是每个学子人生中的一次重要考试,也是他们人生的一个重...
高考祝福语【经典6篇】 高考祝福语 篇一高考祝福语是每年高考季节的重要组成部分,它们是对正在经历高考压力的学生们的一种鼓励和...
高考语文全国甲卷可为与有为作... 高考语文全国甲卷可为与有为作文 篇一高考语文全国甲卷可为与有为作文在高考语文全国甲卷中,有一个题目是...
高考满分作文1000字(经典... 高考满分作文1000字 篇一如何正确备考高考备考高考是每个高中生都要面对的一项重要任务。正确备考不仅...
《高考作文素材精粹与多向运用... 《高考作文素材精粹与多向运用》押中高考作文题3 篇一作文题目:如何应对社交媒体对青少年的负面影响社交...