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

2022-07-28,,,,

前言

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

创建模板

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

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

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

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

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

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

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

注意

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

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

配置脚本

完成了以上步骤后,就可以开始配置对应的脚本了,按照下图步骤,并在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())

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

注释使用测试

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

脚本含义介绍

这里以设置$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

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

下载本文的Word格式文档,以方便收藏与打印。