IDEA 插件找不到?看这里!那就自己敲一个!

简介: 大家都经常使用 IDEA 进行开发,肯定会使用一些 IDEA 插件,我之前也写过两个插件,不过已经很久没有更新了,就让它先放着吧!那小伙伴你是否想亲手写一个插件,或者你是否有一些插件的想法,但是找不到插件。那就自己实现一个吧!


前言


大家都经常使用 IDEA 进行开发,肯定会使用一些 IDEA 插件,我之前也写过两个插件,不过已经很久没有更新了,就让它先放着吧!

那小伙伴你是否想亲手写一个插件,或者你是否有一些插件的想法,但是找不到插件。那就自己实现一个吧!


使用 Gradle 创建

写插件,先从创建项目开始:

File -> New -> Project...

  • 这里使用 Gradle,其中 Java 已经默认选中,咱们再额外选择 IntelliJ Platform Plugin

  • 点击 Next ,然后填写项目名称,路径等选项。

  • 项目结构

build.gradle 为项目配置文件。 resources/META-INF/plugin.xml 为插件配置文件。


使用 GitHub 模版

  1. 访问 github.com/JetBrains/i…
  2. 点击 Use this template 创建模版。
  3. Clone 项目到自己本地。

注:模版生成的项目是使用的 Kotlin,所以这里使用的第一种方式创建。


开始开发


修改 build.gradle 配置文件

原内容如下:

修改后:

plugins {
    id 'java'
    id 'org.jetbrains.intellij' version '0.4.15'
}
group 'com.liuzhihang.toolkit'
version '1.0.2'
sourceCompatibility = 1.8
repositories {
    mavenLocal()
    maven { url "https://maven.aliyun.com/repository/public" }
    mavenCentral()
    jcenter()
}
dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
}
// See https://github.com/JetBrains/gradle-intellij-plugin/
intellij {
    version '2019.1.1'
    pluginName 'Copy as Json'
    updateSinceUntilBuild false
    sameSinceUntilBuild false
}
patchPluginXml {
    pluginDescription(file(descriptionFile).text)
    changeNotes(file(changesFile).text)
}
复制代码
  1. 修改 repositories 使用阿里云
  2. 修改 patchPluginXml 使用外置文件
  3. 根目录下创建 parts 路径,并创建 changeNotes.htmlpluginDescription.html


修改 resources/META-INF/plugin.xml 插件信息

原内容如下:

修改后:

<idea-plugin>
    <id>com.liuzhihang.toolkit.copyasjson</id>
    <name>Copy as Json</name>
    <vendor email="liuzhihangs@qq.com" url="https://liuzhihang.com">Liu ZhiHang</vendor>
    <description><![CDATA[ Description will be added by gradle build]]></description>
    <!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html
         on how to target different products -->
    <depends>com.intellij.modules.java</depends>
    <idea-version since-build="181.00"/>
    <extensions defaultExtensionNs="com.intellij">
        <!-- Add your extensions here -->
    </extensions>
    <actions>
    </actions>
</idea-plugin>
复制代码

plugin.xml 说明:jetbrains.org/intellij/sd…


创建 Action

  1. 先在 main 下 创建 java 目录,及包路径。
  2. New -> Plugin DevKit -> Action
  3. 设置 Action 的 idClass Namedescriptiongroup快捷键
  4. 这时候会发现在 plugin.xml 也插入了 action
<actions>
    <action id="Toolkit.Json.CopyAsJsonAction" class="com.liuzhihang.toolkit.action.CopyAsJsonAction"
            text="CopyAsJsonAction" description="Copy As Json">
        <add-to-group group-id="EditorTabsGroup" anchor="first"/>
        <keyboard-shortcut keymap="$default" first-keystroke="shift meta J"/>
    </action>
</actions>
复制代码


到这里已经结构完全创建完毕了,下面将演示插件 copy-as-json 的内部逻辑。当然这块也可以直接跳过,阅读源码即可。


源码地址:文末相关资料或公众号发送 copy-as-json 获取。

插件效果:将 JavaBean 复制为 Json 字符串。


开发笔记

首先需要知道一些常用的 API,常用 API 可以阅读官方文档或者关注公众号后面会推送,这里仅介绍一些在这里用到的。

  • 打开 CopyAsJsonAction

该类继承并需要实现 actionPerformed 方法。在 actionPerformed 方法中可以通过以下三个方法获取到项目相关信息:

// 获取项目
Project project = e.getData(PlatformDataKeys.PROJECT);
// 获取Psi文件
PsiFile psiFile = e.getData(CommonDataKeys.PSI_FILE);
// 获取当前编辑的文件
Editor editor = e.getData(CommonDataKeys.EDITOR);
复制代码
  • 获取到当前编辑的文件
@Nullable
public static PsiClass getTargetClass(@NotNull Editor editor, @NotNull PsiFile file) {
    int offset = editor.getCaretModel().getOffset();
    PsiElement element = file.findElementAt(offset);
    if (element != null) {
        // 当前类
        PsiClass target = PsiTreeUtil.getParentOfType(element, PsiClass.class);
        return target instanceof SyntheticElement ? null : target;
    }
    return null;
}
复制代码
  • 从当前编辑的文件里面获取到字段

将当前编辑的 JavaBean 中的字段提取,并转换为 Map。

Map<String, Object> fieldsMap = getFields(selectedClass);
复制代码

getFields 方法篇幅较长,请参考源码。

  • 将字段转化成 Json 字符串,并格式化

使用 Gson 将 Map 转换为 Json 字符串,并格式化。其中格式化自定义了缩进。

见代码:com.liuzhihang.toolkit.utils.GsonFormatUtil

Gson gson = new GsonBuilder().create();
String json = GsonFormatUtil.gsonFormat(gson, fieldsMap);
// 使用自定义缩进格式 String json = new GsonBuilder().setPrettyPrinting().create().toJson(fieldsMap);
StringSelection selection = new StringSelection(json);
复制代码
  • 将 Json 字符串拷贝到剪贴板
StringSelection selection = new StringSelection(json);
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(selection, selection);
复制代码
  • 发出提示 success
String message = "Convert " + selectedClass.getName() + " to JSON success, copied to clipboard.";
Notification success = NOTIFICATION_GROUP.createNotification(message, NotificationType.INFORMATION);
Notifications.Bus.notify(success, project);
复制代码


测试运行

右侧 Gradle -> 选择 intellij -> 点击 runlde


打包

右侧 Gradle -> 选择 intellij -> 点击 buildPlugin


此时在项目路径下会生成插件,把这个插件包发给小兄弟安装使用就行了。


上传到 IDEA 插件库

访问 plugins.jetbrains.com/ 创建账号,将插件包上传到仓库即可。当然也有其他的方式,这块就没有研究了。


总结


通过上面的方式已经简单开发一个插件了,要问这个插件有什么用?

其实就是在写文档,或者接口调用的时候,直接将 Java Bean 复制为 Json 串,省过一个一个敲,然后手写 Json 了。

目录
相关文章
|
3月前
|
网络协议 Windows
两步带你解决IDEA 插件下载安装慢、超时、不成功问题
这篇文章提供了解决IDEA插件下载慢或超时问题的方案,通过查找国内插件节点IP地址并修改本地hosts文件来加速下载。
两步带你解决IDEA 插件下载安装慢、超时、不成功问题
|
1月前
|
Java
轻松上手Java字节码编辑:IDEA插件VisualClassBytes全方位解析
本插件VisualClassBytes可修改class字节码,包括class信息、字段信息、内部类,常量池和方法等。
116 6
|
3月前
|
Java
可直接编辑jar包的IDEA插件-JarEditor
IDEA自带的反编译插件虽可查看jar包中的class文件,但无法直接编辑。为解决此问题,作者开发了JarEditor插件,可在IDEA中直接编辑jar文件内的class及资源文件,无需解压或手动编译。点击Jar Editor可修改代码,通过Save/Compile保存并编译,Build Jar则将更改写回jar包。该插件简化了jar包编辑流程,提高了开发效率。
247 4
可直接编辑jar包的IDEA插件-JarEditor
|
7天前
|
前端开发 Java 开发者
这款免费 IDEA 插件让你开发 Spring 程序更简单
Feign-Helper 是一款支持 Spring 框架的 IDEA 免费插件,提供 URL 快速搜索、Spring Web Controller 路径一键复制及 Feign 与 Controller 接口互相导航等功能,极大提升了开发效率。
|
5月前
|
IDE 程序员 开发工具
IDEA插件-IKun Progress 坤坤成IDEA进度条了
"IKun Progress"是一款适用于JetBrains IntelliJ IDEA等IDE的插件,该插件能够将标准的进度条替换为一个有趣且独特的篮球动画,其中的角色名为坤坤(Kun Kun)。它旨在为您的IDE使用过程增添一些娱乐和轻松的氛围。 该插件让您可以在执行IDE中的任务时享受到更加视觉上吸引人的进度指示器,例如构建、运行测试或其他涉及进度条的操作。相比传统的普通进度条,您将看到坤坤在打篮球,给您的开发工作流程增添了一份乐趣。
875 0
IDEA插件-IKun Progress 坤坤成IDEA进度条了
|
5月前
|
IDE 程序员 开发工具
IDEA插件-Mario Progress Bar马里奥进度条
"Mario Progress Bar"是一款适用于JetBrains IntelliJ IDEA等IDE的插件,它基于Dmitry Batkovitch开发的Nyan Progress Bar。该插件会将进度条样式变成马里奥游戏中的角色。基本的进度条显示为带有一些砖块的马里奥形象,而不确定状态的进度条显示为一个乌龟壳。一旦安装完成,您可以在IDE的设置中找到插件的配置选项(Settings > Tools > Mario Progress Bar),在此处选择您喜欢的角色形象。
320 0
IDEA插件-Mario Progress Bar马里奥进度条
|
2月前
|
Windows
IDEA如何查看已经安装的插件并删除
【10月更文挑战第1天】这段内容主要介绍了如何在IntelliJ IDEA中查看和删除已安装的插件。可以通过软件内的插件市场查看插件列表,包括插件名称、版本号和供应商等信息;也可以通过访问插件目录查看。删除插件则建议在插件市场中进行,包括禁用和卸载步骤,手动删除插件文件夹的方法不推荐,因为可能存在配置残留等问题。
824 11
|
2月前
|
人工智能 Java 数据库连接
IDEA开发 常用代码规范插件 常用辅助类插件
IDEA开发 常用代码规范插件 常用辅助类插件
77 0
|
4月前
|
自然语言处理 JavaScript 算法
【插件】IDEA这款插件,爱到无法自拔
本文介绍了阿里云「通义灵码」这一强大IDEA插件,它不仅能够智能生成代码、解答研发问题,还支持多种编程语言和编辑器。文章详细展示了如何安装使用该插件,并通过多个实际案例说明其在代码解释、优化、生成注释及单元测试等方面的应用,助力开发者提高效率。强烈推荐尝试!
149 1
【插件】IDEA这款插件,爱到无法自拔
|
2月前
|
IDE Java Maven
分享几个实用的IDEA插件,提高你的工作效率!
分享几个实用的IDEA插件,提高你的工作效率!
156 0

热门文章

最新文章