插件描述
CodeMemo 是一个为 IntelliJ IDEA 设计的备忘录插件,旨在简化开发工作流程,提供一个集中式存储库来管理和存储各种类型的代码和文本片段。
功能特点
- 无缝集成:与 IntelliJ IDEA 紧密集成,可以直接从 IDE 访问代码片段。
- 简便管理:通过直观的界面轻松添加、删除和管理代码片段。
- 搜索功能:支持关键字和内容搜索,快速查找需要的代码片段。
主打一个内聚性,开发的事就在IDE中完成,不要再过度耦合谷歌去搜索一些重复性的代码模板了,如redis配置等
地址: github.com/ZJamss/Code… 欢迎下载使用
开发流程概述
详细开发流程可参阅官方文档:plugins.jetbrains.com/docs/intell…
详细代码在仓库中,可相互印证学习
安装插件开发环境
新建项目,创建并配置Anction
java
复制代码
/**
* @author ZJamss
* @date 2024/6/15
*/
public class CodeMemoAction extends AnAction {
@Override
public void update(AnActionEvent e) {
// Set the availability based on whether a project is open
Project project = e.getProject();
e.getPresentation().setEnabledAndVisible(project != null);
}
@Override
public void actionPerformed(@NotNull AnActionEvent event) {
// 显示插件主界面(代码在后面提供)
CodeMemoSaverDialog codeMemoSaverDialog = new CodeMemoSaverDialog(event.getProject());
DialogBuilder dialogBuilder = new DialogBuilder();
dialogBuilder.setCenterPanel(codeMemoSaverDialog.getMainPanel());
dialogBuilder.setTitle(event.getPresentation().getText());
dialogBuilder.show();
}
@Override
public @NotNull ActionUpdateThread getActionUpdateThread() {
return super.getActionUpdateThread();
}
}
在plugin.xml
中配置Action
xml
复制代码
<actions>
<action id="cn.zjamss.plugin.codeMemo.CodeMemoAction" class="cn.zjamss.plugin.codeMemo.CodeMemoAction"
text="Code Memo"
description="A tool for saving, searching, deleting snippets effortlessly in your IDE.">
<add-to-group group-id="EditorPopupMenu" anchor="last"/> <!--选择插件action位置,这里是右键菜单-->
</action>
</actions>
完成这两步,运行插件->右键菜单->点击插件项
即可看到主界面
完成UI界面开发
UI开发其实就是Java Swing开发
主界面 CodeMemoSaverDialog
java
复制代码
public class CodeMemoSaverDialog {
private final JPanel mainPanel;
private final JPanel buttonPanel;
private final JButton addButton;
private final JTextField searchField;
private final Map<String, JButton> mMemoButtons;
private final Project project;
private MemoInfoDialog memoInfoDialog;
// Initialize window
// 配置布局等等
public CodeMemoSaverDialog(Project project) {
this.project = project;
mainPanel = new JPanel(new BorderLayout());
buttonPanel = new JPanel();
addButton = new JButton("Add Code Memo");
searchField = new JTextField(10);
mMemoButtons = new HashMap<>();
searchField.setMaximumSize(
new Dimension(Integer.MAX_VALUE, addButton.getPreferredSize().height));
addButton.setMaximumSize(
new Dimension(Integer.MAX_VALUE, addButton.getPreferredSize().height));
addButton.setAlignmentX(Component.CENTER_ALIGNMENT);
buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.Y_AXIS));
JScrollPane buttonScrollPane =
new JBScrollPane(buttonPanel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
buttonScrollPane.setPreferredSize(new Dimension(200, 400));
mainPanel.setPreferredSize(new Dimension(600, 400));
mainPanel.add(buttonScrollPane, BorderLayout.WEST);
initializeMemoInfoPanel();
registerEvents();
loadMemos();
}
// ... 其余代码略
}
其余UI组件代码略,详细可查看仓库代码
持久化
定义实体类CodeMemo
java
复制代码
/**
* @author ZJamss
* @date 2024/6/13
*/
public class CodeMemo {
private String name;
private String codeType;
private String codeContent;
// Default constructor for serialization
public CodeMemo() {}
public CodeMemo(String name, String codeType, String codeContent) {
this.name = name;
this.codeType = codeType;
this.codeContent = codeContent;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCodeType() {
return codeType;
}
public void setCodeType(String codeType) {
this.codeType = codeType;
}
public String getCodeContent() {
return codeContent;
}
public void setCodeContent(String codeContent) {
this.codeContent = codeContent;
}
}
使用IntelliJ Plugin API完成持久化配置
java
复制代码
/**
* @author ZJamss
* @date 2024/6/13
*
* <p>
* GlobalCodeMemoSaverSettings is a singleton class responsible for persisting code memo data
* using IntelliJ IDEA's persistent state component framework.
* </p>
*/
@State(
name = "GlobalCodeMemoSaverSettings",
// 保存的文件名
storages = @Storage("globalCodeMemoSaverSettings.xml")
)
@Service(Service.Level.APP)
public final class GlobalCodeMemoSaverSettings
implements PersistentStateComponent<GlobalCodeMemoSaverSettings> {
// 声明数据
private List<CodeMemo> notes = new ArrayList<>();
public GlobalCodeMemoSaverSettings() {
}
@Nullable
@Override
public GlobalCodeMemoSaverSettings getState() {
return this;
}
// 重写方法,从xml文件中加载数据,自动调用
@Override
public void loadState(@NotNull GlobalCodeMemoSaverSettings state) {
XmlSerializerUtil.copyBean(state, this);
}
public static GlobalCodeMemoSaverSettings getInstance() {
return ApplicationManager.getApplication().getService(GlobalCodeMemoSaverSettings.class);
}
// 自定义对数据的操作
public void setMemos(List<CodeMemo> notes) {
this.notes = notes;
}
public List<CodeMemo> getMemo() {
return notes;
}
public void addMemo(CodeMemo codeMemo) {
notes.add(codeMemo);
}
public void deleteMemoByName(String name) {
notes.removeIf(memo -> memo.getName().equals(name));
}
}
由此通过插件API可以完成对数据的持久化
配置数据服务
在plugin.xml
中配置应用程序服务
xml
复制代码
<extensions defaultExtensionNs="com.intellij">
<applicationService serviceImplementation="cn.zjamss.plugin.codeMemo.persistent.GlobalCodeMemoSaverSettings"/>
</extensions>
如有侵权请联系站点删除!
技术合作服务热线,欢迎来电咨询!