我开发了一个IDEA备忘录插件-教程向

我开发了一个IDEA备忘录插件-教程向

技术博客 admin 501 浏览

插件描述

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>

源文:我开发了一个IDEA备忘录插件-教程向

如有侵权请联系站点删除!

技术合作服务热线,欢迎来电咨询!