idea插件化需要的知识

总结一下就是:
1.java Swing 用来写UI界面
2.idea插件api

以下为创建一个插件工程的具体步骤:

步骤1:创建插件工程

ActionID:代表该Action的唯一的ID,一般的格式为:pluginName.ID
ClassName:Action类名
Name:就是最终插件在菜单上的名称
Description:对这个Action的描述信息

Groups:定义这个动作选项所属的组,比如EditMenu就对应IDE菜单栏上的Edit,CodeMenu就对应菜单栏上的Code
Actions:是当前选中Groups下已有的Action动作,比如上图示如果我们选择CodeMenu就会展示Code中已有的几个选项
Anchor:用来指定动作选项在Groups中的位置,Frist就是最上面、Last是最下面,也可以设在某个选项的上/下方
Keyboard Shortcuts:调用插件Action的快捷键,可以不填,要注意热键冲突
在这里插入图片描述

步骤2:创建action

创建好Action后,会自动在plugin.xml配置文件的actions标签中新增一个对应的Action动作信息

<actions>
    <!-- Add your actions here -->
    <action id="DatabaseGenerator.GenAction" class="DatabaseGenerateAction" text="Database Generator"
            description="auto generate db code, such as Table / CRUD sql ...">
      <add-to-group group-id="CodeMenu" anchor="last"/>
    </action>
  </actions>
注意
  1. 这里的信息我们都可以再次修改,但是class name修改时要注意和类文件名匹配
  2. 可以修改添加多个,即在不同菜单中都可以选择使用
  3. 同一个group下多个action的id不能重复

如果你觉得你的插件位置不好找,也可以自行在根目录上新建一个和Code、Edit等同级的group,需要在配置文件里新建一个group,然后指定其添加到MainMenu主菜单上

<actions>
   <!-- Add your actions here -->
   <group id="BoredreamPlugin.PluginSet" text="BdPlugin" description="the plugin set by boredream">
      <add-to-group group-id="MainMenu" anchor="last"  />
      <action id="DatabaseGenerator.GenAction" class="DatabaseGenerateAction" text="Database Generator" description="A test menu item" />
   </group>
</actions>

这个时候再run插件就会发现它单独建立了一个group

插件类都继承自AnAction
入口函数是public void actionPerformed(AnActionEvent e)
@Override
    public void actionPerformed(AnActionEvent e) {
        // TODO: insert action logic here
        //运行效果1
        Messages.showMessageDialog("hello action", "测试", Messages.getInformationIcon());
		//运行效果2
        final Editor editor = e.getData(PlatformDataKeys.EDITOR);
        if (editor == null) {
            return;
        }
        SelectionModel model = editor.getSelectionModel();
        final String selectedText = model.getSelectedText();
        if (TextUtils.isEmpty(selectedText)) {
            return;
        }
        JBPopupFactory factory = JBPopupFactory.getInstance();
        factory.createHtmlTextBalloonBuilder(selectedText, null, new JBColor(new Color(100, 200, 100), new Color(200, 100, 100)), null)
                .setFadeoutTime(5000)
                .createBalloon()
                .show(factory.guessBestPopupLocation(editor), Balloon.Position.below);
    }
运行效果1:

在这里插入图片描述

运行效果2:

在这里插入图片描述

需要注意的问题:
1、idea 开发插件的时候,src 下需要创建包名。不要直接在src 创建文件。否则也会出现 AndroidStudio 插件无效的问题。
2、JDK版本问题,在此前,尝试用 IDEA 默认的jdk (11),发现运行在AndroidStudio 无效,IDEA 上可以使用。

需要切换为 JDK8版本,AndroidStudio、IDEA都可以运行。

3.通过getData函数可以获取idea界面的各个窗口对象

在这里插入图片描述
常用的几个

1>Project project = e.getData(PlatformDataKeys.PROJECT);

通过 Project 可以获取当前打开的工程名称、工程绝对路径、工程是否被初始化

2>Editor editor = e.getData(PlatformDataKeys.EDITOR);

通过 Editor 可以获取当前编辑器中的文档内容,光标位置、选中文字、编辑器设置等等。

光标信息:Editor editor = e.getData(PlatformDataKeys.EDITOR);
SelectionModel selectionModel = editor.getSelectionModel();
selectionModel .
1. getSelectionStart();  //返回所选文本范围的文档中的起始偏移量
2. getSelectionEnd(); //返回所选文本范围的文档中的结尾便宜量
3. getSelectedText(); //返回光标选中的文本
4. hasSelection(); //检查当前是否选择了文本范围。
5. removeSelection(); // 移除选中
6. selectLineAtCaret(); //在插入符号位置选择整行文本。
7. addSelectionListener(@NotNull SelectionListener listener); //添加一个监听器监听选中文本变化
....
Editor editor = e.getData(PlatformDataKeys.EDITOR);
Document document = editor.getDocument();
document.
1. getText(); //返回当前文档的文本副本
2. getTextLength(); //返回文本的长度
3. getLineCount(); //返回文档的行数
4. getLineNumber(int offset); //返回偏移量所处的行号
5. getLineStartOffset(int line); //返回具有指定编号的行的起始偏移量
6. insertString(int offset, @NotNull CharSequence s); //将指定的文本插入文档中的指定偏移处。
7. deleteString(int startOffset, int endOffset); //从文档中删除指定范围的文本。
8. replaceString(int startOffset, int endOffset, @NotNull CharSequence s); //用指定的字符串替换文档中指定的文本范围。
...
3>PsiFile file = e.getData(PlatformDataKeys.PSI_FILE);

通过 PsiFile 可以获取到当前打开的文档类型、文档名称、是否只读、字符集等等。

4>AnActionEvent.getPresentation();

过Presentation可以获取Action菜单项的各种属性,如显示的文本、描述、图标

1. setIcon(@Nullable Icon icon) //设置图标
2. setText(String text) //设置菜单项展示文本
3. setDescription(String description) //设置菜单项功能描述
4. setEnabled(boolean enabled) //设置是否可用
5. setVisible(boolean visible) //设置是否可见

api很多需要什么再去官网查,熟悉常用的几个就行

其它:
1.有时候需要判断当前的场景是否可以使用插件,比如编写一个自动生成代码的插件,只有打开了一个文件的时候才可以使用,这种情况需要重写update方法
update会在actionPerformed之前执行
@Override
	public void update(@NotNull AnActionEvent e) {
	    super.update(e);
	}

    @Override
    public void actionPerformed(AnActionEvent e) {

    }

如果配置出现问题,检查如下几个地方
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如果工程运行出现问题,可以参考我的另一篇文章

idea插件开发可能出现的问题

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值