前言:最近想研究一款自动在idea中定位缺陷及发送JIRA的快捷工具,方便提升报自动化脚本的bug的效率。因为idea插件学习是必不可少了,沉淀小结如下。
效率提升:JRebel for IntelliJ
一款热部署插件,只要不是修改了项目的配置文件,用它都可以实现热部署。
效率提升:Lombok plugin
开发神器,可以简化你的实体类,让你不再写get/set方法
效率提升:Mybatis plugin
可以在mapper接口中和mapper的xml文件中来回跳转,就想接口跳到实现类那样简单。
效率提升:GsonFormat
一键根据json文本生成java类,非常方便
改变用户界面:activate-power-mode
这是一款让你在编码的时候,增加酷炫动效。
项目创建:
工程目录:plugin.xml:里面定义了一些组件、事件等需要注册的内容
重点:plugin.xml和build.gradle
id:表示当前插件的唯一id号
name:插件的名称
version:插件的版本号
vendor:填写开发人的邮箱,公司名称
description:插件的描述,如果将插件上传到IDEA的仓库后,在进行下载的时候就会显示该描述
idea-version:表示当前插件所支持的所有Intellij Idea 的版本
extensions:这里一般会放一些我们自己的扩展的东西,比如新增高亮显示,新增语言支持都是需要在这里进行扩展
actions:新增的Action类需要在这里注册,用于菜单栏扩展
Group:如果想定义一个跟Help同级的菜单,或者是定义包含多个子选项的菜单
举例:想知道点击菜单前就判断插件能否展示,就需要重写update方法,如:
if (directory.getName().equals("contract"))
e.getPresentation().setEnabledAndVisible(true);
else
e.getPresentation().setEnabledAndVisible(false);
}
PsiFile: 对应于应用中的文件,如.Java的文件或者是.xml的文件等;
PsiDirectory: 对应于应用中的目录
PsiJavaFile: 对应于Java源文件,如Test.java
PsiClass: 对应于某个类,其中一个文件中可能会有多个类;
PsiMethod: 对应于类中的某个方法
PsiField: 对应于类中的某个属性
PsiAnnotation: 对应于注解;
获取当前项目:
Project project = anActionEvent.getProject();
获取当前的编辑器对象:
Editor editor = anActionEvent.getData(CommonDataKeys.EDITOR);
获取当前编辑的文件:
PsiFile psiFile = PsiDocumentManager.getInstance(project).getPsiFile(editor.getDocument());
// 如果是Java文件,可以转换成PsiJavaFile
PsiJavaFile javaFile = (PsiJavaFile)psiFile;
获取JavaFile中的Class:
// 一个文件中可能会定义有多个Class,因此返回的是一个数组
PsiClass[] classes = javaFile.getClasses();
PsiClass的常用方法:
获取所有属性:getFields、getAllFields
查找属性:findFieldByName(),其中第二个参数是是否查找父类的属性;
获取所有方法:getMethods/getAllMethods
查找方法:findMethodsByName
Import某个类:由于引入类操作是在File中进行的,因此在Class类上是没有办法导入的,如果已经获取到了javaFile对象,那么可以这样导入,否则需要先获取到Class所在的File后再进行导入:
javaFile.importClass(aClass);
根据文件名查找路径
FilenameIndex.getFilesByName()
根据class获取所在文件:
(PsiJavaFile) aClass.getContainingFile()
获取类所在包:
// 先获取到文件后再获取文件所在包
String daoPackage = ((PsiJavaFile) aClass.getContainingFile()).getPackageName();
创建文件(包含文件中的类):
javaFile = (PsiJavaFile) PsiFileFactory.getInstance(project).createFileFromText(“Test.java”, JavaFileType.INSTANCE, “public class Test {}”);
获取当前文件所在包:
PsiDirectory containerDirectory = javaFile.getContainingDirectory();
创建子包(子目录):
parentDirectory.createSubdirectory(“test”);
将文件添加到包中去
psiDirectory.add(javaFile);
查找类:
PsiShortNamesCache shortNamesCache = PsiShortNamesCache.getInstance(project);
PsiClass[] classes = shortNamesCache.getClassesByName(“Test”, GlobalSearchScope.allScope(project));
demo代码:
@Override
public void actionPerformed(AnActionEvent anActionEvent) {
Messages.showMessageDialog("Hello World !", "Information", Messages.getInformationIcon());}
附录:Idea插件官方文档:
https://www.jetbrains.org/intellij/sdk/docs/tutorials/action_system/working_with_custom_actions.html