idea插件开发入门
天森爱自由 2020-05-24 20:23:10 3220 收藏 4
版权
前言:最近想研究一款自动在idea中定位缺陷及发送JIRA的快捷工具,方便提升报自动化脚本的bug的效率。因为idea插件学习是必不可少了,沉淀小结如下。
idea插件开发入门
插件用途
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);
}
- 1
- 2
- 3
- 4
- 5
开发语法
常用对象
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());}
- 1
- 2
- 3
打包及安装
发布插件
附录:Idea插件官方文档:
https://www.jetbrains.org/intellij/sdk/docs/tutorials/action_system/working_with_custom_actions.html
关注
- 0
- 0
- 4
打赏
文章很值,打赏犒劳作者一下
10-07
IntelliJ IDEA插件开发手册 IntelliJ IDEA插件开发手册 IntelliJ IDEA插件开发手册
相关推荐
IntelliJ IDEA插件开发指南(一)_ExcellentYuXiao的专栏...
6-4
6-8
3808
627
6-14
Intellij IDEA插件开发入门_西代零零发_idea 插件开发
6-9
2万+
IntelliJ Idea 常用11款插件(提高开发效率),附优秀主题插件
5472
IDEA 插件开发入门教程_weixin_33933118的博客
6-6
IDEA 插件开发入门教程_weixin_34210740的博客
6-17
2286
4436
5-30
6-10
01-12
2828
8
https://cloud.tencent.com/developer/article/1348741
01-17
31
155
943
CSDN开发者助手由CSDN官方开发,集成一键呼出搜索、万能快捷工具、个性化新标签页和官方免广告四大功能。帮助您提升10倍开发效率!
idea java 插件开发_Intellij IDEA插件开发入门详解
78
12-16
这东西对基础不扎实的同学最好,基础好的也可以来看看. 这东西对基础不扎实的同学最好,基础好的也可以来看看.
04-10
03-16
可执行的一个初学者小程序,初学者新学“委托”语法练习。关于在一个主窗体中打开一个子窗体。然后在子窗体输入信息。并能返回到主窗体中显示
04-21
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
- 公安备案号11010502030143
- 京ICP备19004658号
- 京网文〔2020〕1039-165号
- 经营性网站备案信息
- 北京互联网违法和不良信息举报中心
- 网络110报警服务
- 中国互联网举报中心
- 家长监护
- Chrome商店下载
- ©1999-2021北京创新乐知网络技术有限公司
- 版权与免责声明
- 版权申诉
- 出版物许可证
- 营业执照
码龄5年 暂无认证
10万+
访问
等级
1276
积分
39
粉丝
20
获赞
9
评论
88
收藏
热门文章
- 每天一个adb命令:pm 命令详解 17940
- Appium-java API详解 12421
- Jmeter访问HTTPS请求 11532
- 每天一个adb命令:am 命令详解 8399
- TestNG使用总结 5605
分类专栏
最新评论
- Jmeter访问HTTPS请求
五毒兽: 写的啥玩意儿啊?Chrome中导入该域名证书,在更多工具-设置-管理证书的地方,找到该证书 也看到啥证书啊
- 流式断言器AssertJ入门介绍
eBusinessMan1993: good
- 流式断言器AssertJ入门介绍
范学博 回复 嫩草终结者: 奥奥奥,晓得啦
- 流式断言器AssertJ入门介绍
嫩草终结者 回复 范学博: import static org.assertj.core.api.Assertions.* 引入这个以后,就有assertThat方法了,不需要自己写
- 流式断言器AssertJ入门介绍
范学博: assertThat是个方法吗,需要自己写吗?
最新文章
目录
举报