# bugs-collectidea-plugins
**Repository Path**: shamee/bugs-collectidea-plugins
## Basic Information
- **Project Name**: bugs-collectidea-plugins
- **Description**: 该项目为IDEA开发过程中,进行代码CR或常见的一些代码编码问题汇总。通过选中代码片段,右键一键添加集中收集。替代传统手工复制黏贴的工作。
- **Primary Language**: Java
- **License**: GPL-3.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-03-14
- **Last Updated**: 2025-02-24
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 该项目为IDEA开发过程中,进行代码CR或常见的一些代码编码问题汇总。通过选中代码片段,右键一键添加集中收集。替代传统手工复制黏贴的工作。
## 1. plugin.xml详情
配置中提前配置了插件详细信息,以及插件对应的行为。
下面的配置信息可以用devkit插件生成,描述了该插件功能添加的位置,菜单等等。
```xml
```
下面为完整配置:
```xml
com.shamee.ide.plugins.bug-collect
BugsCollect
shamee
com.intellij.modules.platform
```
## 3. 设置获取选中代码片段行为类
EditorBugsPopupAction继承了AnAction,并重写actionPerformed方法。作用是获取idea编辑界面选中的文本内容,并且打开信息填写对话框。
```java
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();
}
}
```
## 4. 新建BugCollectDialog,用于填写异味代码详细信息
BugCollectDialog为代码信息填写的对话框。该对话框绘制了标题填写栏editorTextFieldTitle,建议填写栏editorTextFieldSuggest,以及按钮组件addButton。使用jpanel绘制弹窗布局。
```java
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;
}
```
## 5. 添加按钮监听
BugCollectDialog底部按钮添加事件监听。当填写完代码信息后点击该按钮,将详细信息,代码片段统一入库。
```java
// 按钮点击事件
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();
});
```
## 6. 数据库操作工具类
```java
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();
}
}
}
}
```
## 7. 调试看效果
### 1. 选中代码右键,可以看到“添加Bug代码”功能已添加:

### 2. 点击添加Bug代码:

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

### 4. 看一眼数据库数据:

## 8. 待处理列表
数据统一收集后,便可以进行数据的分发推送操作处理。
1. 代码推送管理;
2. 每次添加都直接入库,看不到添加的效果;
3. ......
## 9. Gradle打包
点击Tasks -> intellij -> buildPlugin。

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

## 10. 安装试用
File -> Settings -> Plugins。

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