欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

IDEA自定义模板注释(解决了参数与返回值为空的问题)

程序员文章站 2022-04-17 09:12:32
前言相信很多人在设置模板注释的时候,尤其是在设置方法模板注释时,都遇到了各种问题(比如参数和返回值为空的情况)。也都在网上进行了很多搜索,但是你懂得,最终都无功而返,本文则将为你解决这一问题,由于设置类的模板注释很简单,网上搜索的方法也都可以解决生成类的模板注释的情况,因此本文不做介绍,将只介绍如何生成方法模板注释,此外还会详细介绍使用到的Groovy脚本的具体含义,以便你可以写你自己的Groovy脚本,满足你自己的需求,在最后还会通过一个Gif动图,来展示具体的使用方法,话不多说,开始介绍。创建模板...

前言

相信很多人在设置模板注释的时候,尤其是在设置方法模板注释时,都遇到了各种问题(比如参数和返回值为空的情况)。也都在网上进行了很多搜索,但是你懂得,最终都无功而返,本文则将为你解决这一问题,由于设置类的模板注释很简单,网上搜索的方法也都可以解决生成类的模板注释的情况,因此本文不做介绍,将只介绍如何生成方法模板注释,此外还会详细介绍使用到的Groovy脚本的具体含义,以便你可以写你自己的Groovy脚本,满足你自己的需求,在最后还会通过一个Gif动图,来展示具体的使用方法,话不多说,开始介绍。

创建模板

首先点击File -> Settings -> Editor -> Live Templates,会出现以下界面:

IDEA自定义模板注释(解决了参数与返回值为空的问题)

然后我们需要点击+,选择Template Group...

IDEA自定义模板注释(解决了参数与返回值为空的问题)

然后随便取一个名字,点击OK

IDEA自定义模板注释(解决了参数与返回值为空的问题)

然后按照下图,首先选中我们刚创建的Group,然后点击+并选择Live Template:

IDEA自定义模板注释(解决了参数与返回值为空的问题)

然后在弹出的界面先填入图中标注的信息:

IDEA自定义模板注释(解决了参数与返回值为空的问题)

图中1处的位置按照传统(相信大多数人以前也是这么设置的)就继续用*了,对应的Template text如下:

**
 * description
$params$
 *
$return$
 * @author zjw
 * @createTime $date$ $time$
 */
注意

这里需要特别注意,Template text的内容最开始处不可以是/**开头,否则会出现参数和返回值为空的情况,看到这里你可能觉得你之前也这样设置过,也是不起作用,但是请你继续看下去,因为我之前也遇到过,此外我这里的Template text也是为了配合之后脚本的代码,所以看起来可能不太一样。

然后需要需要按照下图的步骤设置一下Application Contexts,需要选择Java,结束之后记得点击一下Apply

IDEA自定义模板注释(解决了参数与返回值为空的问题)

配置脚本

完成了以上步骤后,就可以开始配置对应的脚本了,按照下图步骤,并在23处分别输入以下两个Groovy脚本(脚本含义稍后介绍),45处在下拉框中选择系统默认的即可:

groovyScript("def result='';def flag=false;def params=\"${_1}\".replaceAll('[\\\\[|\\\\]|\\\\s]', '').split(',').toList(); for(i = 0; i < params.size(); i++) {if (!params[i].equals('')) {flag=true;result+='* @param ' + params[i] + ' ' + params[i] + ((i < params.size() - 1) ? '\\n\\t ':'')} else {result+=' *'}}; return flag ? ' *\\n\t ' + result : result", methodParameters())

groovyScript("def params=\"${_1}\";def index=params.lastIndexOf('.', params.indexOf('<'));if(index!=-1){params=params.substring(index+1);};index=params.indexOf('.');if(index!=-1&&params.indexOf('<')==-1){params=params.substring(index+1);};return ' * @return ' + params.replaceAll('java.lang.', '').replaceAll(',',', ');", methodReturnType())

IDEA自定义模板注释(解决了参数与返回值为空的问题)

完成一点配置后点击OKApply即可使用我们的模板啦。

注释使用测试

在讲解上述Groovy脚本的含义之前,先来看一下我们上述配置的注释模板如何使用:
我们只需要在需要添加注释的方法上输入/*然后按下Tab即可生成,这里的*对应着上述的Abbreviation里配置的*,等于使用*去替换上述配置的Template text,并在Template text前加了一个/,即可成功添加我们的注释模板,对应的Gif操作动图如下:

IDEA自定义模板注释(解决了参数与返回值为空的问题)

IDEA自定义模板注释(解决了参数与返回值为空的问题)

脚本含义介绍

这里以设置$return$的脚本为例,为了解释方便,将脚本做了一些格式化,代码及其含义直接如下,GroovyJava的语法很相似,所以不难理解:

groovyScript("
        // 将 methodReturnType() 的返回值转化为字符串赋给 params
        // 默认的返回值格式为 pojo.User / java.lang.int 等形式
        def params = \"${_1}\";
        
        // 如果返回值有集合时,原始形式为 java.util.List<java.lang.Integer> 这种形式
        // 这里获取 '<' 前的 '.' 下标
        def index = params.lastIndexOf('.', params.indexOf('<'));
        
        if (index != -1) {
            // 执行到这里说明返回值有泛型,为了看着更舒服
            // 这里的作用是把 java.util.List<java.lang.Integer> 变为 List<java.lang.Integer>
            params = params.substring(index + 1);
        };
        
        // 这里继续获取 '.' 的下标
        index = params.indexOf('.');
        
        // 如果 '.' 存在,且不存在 '<' 说明返回值没有泛型
        if (index != -1 && params.indexOf('<') == -1) {
            // 把返回值为 pojo.User 这种变为 User
            params = params.substring(index + 1);
        };
        
        // 当返回值为基本类型时,都会有 'java.lang.' 前缀
        // 例如 java.lang.int ,这里去掉了 java.lang.
        // 此外将返回结果中的 ','替换为', '是为了处理 有多个泛型参数的情况
        // 例如原始返回值可能为 java.util.Map<java.lang.Integer,java.lang.String>
        // 这里为了让泛型之间的 ',' 变成 ', ' 更加美观
        // 需要注意的是,我没有处理 java.util.List<pojo.User> 这种情况
        // 经过这些代码只会变为 List<pojo.User>, 这个就留给大家自己做了
        return ' * @return ' + params.replaceAll('java.lang.', '').replaceAll(',', ', ');
    ",
    methodReturnType()
)

注意

我这里只展示了处理return的脚本代码的所有含义,代码中也显得有些丑陋,所以还是希望各位能写出各自的Grovvy脚本,然后分享一下,因为我的param的脚本写的太丑了,这里就不做讲解了,如果有问题,你也可以进行留言。

总结

本文讲解了使用IDEA生成自定义方法模板注释可能会遇到的一些问题,当然可能因为一些版本原因,或者操作原因,你可能仍然会遇到一些问题,也欢迎你进行留言,一起讨论。

本文地址:https://blog.csdn.net/qq_41698074/article/details/109252069