IntelliJ插件开发---建立项目及基础使用

AndroidStudio插件开发(进阶篇之Editor)

一.新建插件项目

1.在Intellij中新建工程,工程类型选择IntelliJ Platform Plugin
这里要注意一点,插件开发使用的不是java jdk而是IntelliJ IDEA的SDK

IntelliJ插件开发---建立项目及基础使用_第1张图片
工程类型

二.总体说明

IntlliJ的插件由一个个Action组成,而我们编程的入口也是这个Action

三.Action

3.1创建Action

在New->Pugin DevKit->Action选择Actin创建Action


IntelliJ插件开发---建立项目及基础使用_第2张图片
image.png

3.2创建和配置Action

IntelliJ插件开发---建立项目及基础使用_第3张图片
配置

点击"Ok"后

3.2.1. 会在plugin.xml中生产插件的配置信息

 
      
      
  
  • class 为AnAction的类的全路径
  • text为AnAction的名字
  • group-id和anchor确定了为Action在Android Stuio中的位置
    group-id="HelpMenu" anchor="first"表示Action在Help菜单的第一个位置
    IntelliJ插件开发---建立项目及基础使用_第4张图片
    Action位置
  • keyboard-shortcut 表示Action调用的快捷方式 "meta N"表示 command+N
额外

plugin.xml中填写插件信息,改信息会显示在插件列表

  com.xuyabo.company.unique.plugin.id
  星童项目常用代码生成器
  1.0
  星童
IntelliJ插件开发---建立项目及基础使用_第5张图片
插件列表

3.2.2 会创建一个Action类

public class TestClassName extends AnAction {

    @Override
    public void actionPerformed(AnActionEvent e) {
        // TODO: insert action logic here
    }
}

开发者可以通过AnActionEvent拿到我们需要的信息

     // Project 代表整个工程
     Project   project = e.getData(PlatformDataKeys.PROJECT);
 /**
     * 获取当前选中的目录或者选中的文件的全路径
     * @param e
     * @return
     */
    public static String getCurrentPath(AnActionEvent e) {
        VirtualFile currentFile = DataKeys.VIRTUAL_FILE.getData(e.getDataContext());
        if (currentFile != null) {
            return currentFile.getPath();
        }
        return null;
    }
   Editor editor = anActionEvent.getData(PlatformDataKeys.EDITOR);

   // 代表光标所在位置
   CaretModel caretModel = editor.getCaretModel();

   //代表当前文件
   Document document = editor.getDocument();

   //光标选中位置
  int offset = caretModel.getOffset();

  //选中位置所在行
  int line = document.getLineNumber(offset);

 //选中行所在位置,供insertString使用
 int lineStartOffset = document.getLineStartOffset(line);

  //在光标处插入数据
  document.insertString(offset, content);

 //在光标所在行首插入数据
 document.insertString(lineStartOffset, content);

插入数据必须要在自选中插入,如下

 Editor editor = anActionEvent.getData(PlatformDataKeys.EDITOR);
 CaretModel caretModel = editor.getCaretModel();
 Document document = editor.getDocument();

 Runnable runnable = new Runnable() {
                    @Override
                    public void run() {
                        //光标选中位置
                        int offset = caretModel.getOffset();

                        //选中位置所在行
                        int line = document.getLineNumber(offset);

                        //选中行所在位置,供insertString使用
                        int lineStartOffset = document.getLineStartOffset(line);

                        //genGetterAndSetter为生成getter和setter函数部分
                        document.insertString(lineStartOffset, content);
                    }
   };

 //加入任务,由IDEA调度执行这个任务
 WriteCommandAction.runWriteCommandAction(project, runnable);

你可能感兴趣的:(IntelliJ插件开发---建立项目及基础使用)