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

二.总体说明
IntlliJ的插件由一个个Action组成,而我们编程的入口也是这个Action
三.Action
3.1创建Action
在New->Pugin DevKit->Action选择Actin创建Action

3.2创建和配置Action

点击"Ok"后
3.2.1. 会在plugin.xml中生产插件的配置信息
<action id="TestID" class="com.plugin.test.TestClassName" text="TestName" description="TestDescrption">
<add-to-group group-id="HelpMenu" anchor="first"/>
<keyboard-shortcut keymap="$default" first-keystroke="meta N"/>
</action>
- class 为AnAction的类的全路径
- text为AnAction的名字
- group-id和anchor确定了为Action在Android Stuio中的位置
如 group-id="HelpMenu" anchor="first"表示Action在Help菜单的第一个位置
Action位置
- keyboard-shortcut 表示Action调用的快捷方式 "meta N"表示 command+N
额外
plugin.xml中填写插件信息,改信息会显示在插件列表
<id>com.xuyabo.company.unique.plugin.id</id>
<name>星童项目常用代码生成器</name>
<version>1.0</version>
<vendor email="1585853768@qq.com" url="http://www.yourcompany.com">星童</vendor>

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);
网友评论