首页 > 编程知识 正文

idea插件使用,常用的idea插件

时间:2023-05-06 15:15:08 阅读:277469 作者:977

前言:最近想研究一款自动在idea中定位缺陷及发送JIRA的快捷工具,方便提升报自动化脚本的bug的效率。因为idea插件学习是必不可少了,沉淀小结如下。

idea插件开发入门 插件用途工程创建配置文件Action实现开发语法常用对象常用方法 运行效果打包及安装发布插件

插件用途

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同级的菜单,或者是定义包含多个子选项的菜单


配置gradle依赖

Action实现 actionPerformed(AnActionEvent e): 当用户点击IDE中对应Action的图标时会触发此方法,也就是说每选中一次触发一次。update(AnActionEvent e):为了能在用户点击自定义插件对应的菜单项之前动态判断是否将插件项显示,只需重写update函数,在actionPerformed(AnActionEvent e) 之前触发。

举例:想知道点击菜单前就判断插件能否展示,就需要重写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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。