Rumah > Java > javaTutorial > teks badan

idea live template高级知识, 进阶

巴扎黑
Lepaskan: 2018-05-17 10:36:22
asal
2407 orang telah melayarinya

为了解决用一个命令(宏)给方法,类,js方法添加注释,经过几天的研究.终于得到结果了.

实现的效果如下:

给Java中的method添加方法:

    /** *
     * @Method : addMenu
     * @Description :
     * @param menu :
     * @return : cn.yiyizuche.common.base.ResultMsg
     * @author : Rush.D.Xzj
     * @CreateDate : 2017-06-12 星期一 18:17:42
     *     */public ResultMsg addMenu(Menu menu){
        ResultMsg result = null;return result;
    }
Salin selepas log masuk

给 Java class 添加注释:

/**
 *
 * @Project : 壹壹OA
 * @Package : cn.yiyizuche.common.ou.menu.controller
 * @Class : MenuController
 * @Description :
 * @author : Rush.D.Xzj
 * @CreateDate : 2017-06-12 星期一 18:15:32
 * @version : V1.0.0
 * @Copyright : 2017 yizukeji Inc. All rights reserved.
 * @Reviewed :
 * @UpateLog :    Name    Date    Reason/Contents
 *             ---------------------------------------
 *                 ***        ****    ****
 * */public class MenuController {
}
Salin selepas log masuk

给js 的方法添加注释

/**
 *
 * @Method : standardShowBatchCheckBox
 * @Description :
 * @return :
 * @author : Rush.D.Xzj
 * @CreateDate : 2017-06-12 星期一 18:15:21
 * */function standardShowBatchCheckBox(jspElement, dataList, max, valueIdFunction, textFunction, selectedFunction) {
}
Salin selepas log masuk

现在把答案公布如下

Abbreviation:

cmj
Salin selepas log masuk

Template text(注1):

**
 *$context$ 
 */
Salin selepas log masuk

Edit variables:

$context$的代码(主要代码)如下:

groovyScript("def methodName = \"${_1}\"; 
def jsMethodName = \"${_2}\"; 
def outputMethodName = \"${_3}\"; 
def outputDesc = \"${_4}\"; 
def outputParams = \"${_5}\"; 
def outputAuthor = \"${_6}\"; 
def outputReturnType = \"${_7}\"; 
def outputDateTime = \"${_8}\"; 
def outputPackage = \"${_9}\"; 
def outputClass = \"${_10}\"; 
def outputClassOtherInfo = \"${_11}\"; 
def outputProject = \"${_12}\"; 
def outputVersion = \"${_13}\"; 
def outputJsMethodName = \"${_14}\"; 
def outputJsReturnType = \"${_15}\"; 
def result = ''; 
if (methodName != 'null') { 
result += '\\n'; 
result += outputMethodName; 
result += outputDesc; 
result += outputParams; 
result += outputReturnType; 
result += outputAuthor; 
result += outputDateTime; 
result += ' *'; return result;
} else if (jsMethodName != 'null') { 
result += '\\n'; 
result += outputJsMethodName; 
result += outputDesc; 
result += outputJsReturnType; 
result += outputAuthor; 
result += outputDateTime; result += ' *'; return result;
} else { 
result += '\\n'; 
result += outputProject; 
result += outputPackage; 
result += outputClass; 
result += outputDesc; 
result += outputAuthor; 
result += outputDateTime; 
result += outputVersion; 
result += outputClassOtherInfo; 
result += ' *'; return result;
} ", methodName(), jsMethodName(), groovyScript("def methodName = \"${_1}\"; 
def result = ' * @Method : ' + methodName + '\\n'; 
return result;", methodName()), groovyScript("def result = ' * @Description : ' + '\\n'; 
return result;"), groovyScript("if(\"${_1}\".length() == 2) 
{
return '';
} else {
def result=''; 
def params=\"${_1}\".replaceAll('[\\\\[|\\\\]|\\\\s]', '').split(',').toList();
for(i = 0; i < params.size(); i++) 
{
result+=' * @param ' + params[i] + ' : ' + '\\n'
}; 
return result;}", methodParameters()), groovyScript("def author = 'Rush.D.Xzj'; 
def result = ' * @author : ' + author + '\\n'; 
return result;"), groovyScript("def returnType = \"${_1}\"; 
def result = ' * @return : ' + returnType + '\\n'; 
return result;", methodReturnType()), groovyScript("def date = \"${_1}\"; 
def time = \"${_2}\"; 
def result = ' * @CreateDate : ' + date + ' ' + time + '\\n'; 
return result;", date("yyyy-MM-dd E"), time("HH:mm:ss")), groovyScript("def currentPackage = \"${_1}\"; 
def result = ' * @Package : ' + currentPackage + '\\n'; 
return result;", currentPackage()), groovyScript("def className = \"${_1}\"; 
def result = ' * @Class : ' + className + '\\n'; 
return result;", className()), groovyScript("def result = ' * @Copyright : 2017 yizukeji Inc. All rights reserved.' + '\\n'; 
result += ' * @Reviewed : ' + '\\n'; result += ' * @UpateLog :    Name    Date    Reason/Contents' + '\\n'; 
result += ' *             ---------------------------------------' + '\\n'; 
result += ' *                 ***        ****    **** ' + '\\n'; 
return result;"), groovyScript("def result = ' * @Project : 壹壹OA' + '\\n'; 
return result;"), groovyScript("def result = ' * @version : V1.0.0' + '\\n'; 
return result;"), groovyScript("def jsMethodName = \"${_1}\"; 
def result = ' * @Method : ' + jsMethodName + '\\n'; 
return result;", jsMethodName()), groovyScript("def result = ' * @return : ' + '\\n'; return result;"))
Salin selepas log masuk

使用如下:

在xx.java或者 xx.js中输出(注2):

/cmj
Salin selepas log masuk

后 按 tab键(此键是默认的,可以更改成其他的)

注1 和注2

也可以换成第二种方法(网上大部分的方法):

Template text

*
 *$context$ 
 */
Salin selepas log masuk

跟注1比较第一行少了一个*,

因此注2就是变成了:

/*cmj
Salin selepas log masuk

我感觉用我的方法比第二种方法好.

Edit Variable中代码详解

首先我分解了如下的 10几个函数(是小函数):

    // 输出方法名groovyScript("def methodName = \"${_1}\"; def result = ' * @Method : ' + methodName + '\\n'; 
    return result;", methodName())    // 输出描述
    groovyScript("def result = ' * @Description : ' + '\\n'; 
    return result;")    // 输出参数列表的子函数
    groovyScript("if(\"${_1}\".length() == 2) {return '';
    } else {
    def result=''; 
    def params=\"${_1}\".replaceAll('[\\\\[|\\\\]|\\\\s]', '').split(',').toList(); 
    for(i = 0; i < params.size(); i++) {result+=' * @param ' + params[i] + ' : ' + '\\n'}; 
    return result;}", methodParameters())    // 输出    作者的        子函数  这里可以改作者
    groovyScript("def author = 'Rush.D.Xzj'; 
    def result = ' * @author : ' + author + '\\n'; 
    return result;")    // 输出    返回值的   子函数
    groovyScript("def returnType = \"${_1}\"; 
    def result = ' * @return : ' + returnType + '\\n'; 
    return result;", methodReturnType())    // 输出    日期的     字函数, 这个可以更改日期格式
    groovyScript("def date = \"${_1}\"; def time = \"${_2}\"; 
    def result = ' * @CreateDate : ' + date + ' ' + time + '\\n'; 
    return result;", date("yyyy-MM-dd E"), time("HH:mm:ss"))    // 输出Project
    groovyScript("def result = ' * @Project : 壹壹OA' + '\\n'; 
    return result;")    // 输出package
    groovyScript("def currentPackage = \"${_1}\"; 
    def result = ' * @Package : ' + currentPackage + '\\n'; 
    return result;", currentPackage())    // 输出class
    groovyScript("def className = \"${_1}\"; 
    def result = ' * @Class : ' + className + '\\n'; 
    return result;", className())    // 输出copyright/reviewd/updatelog
    groovyScript("def result = ' * @Copyright : 2017 yizukeji Inc. All rights reserved.' + '\\n'; 
    result += ' * @Reviewed : ' + '\\n'; 
    result += ' * @UpateLog :    Name    Date    Reason/Contents' + '\\n'; 
    result += ' *             ---------------------------------------' + '\\n'; 
    result += ' *                 ***        ****    **** ' + '\\n'; 
    return result;")    // 输出version
    groovyScript("def result = ' * @version : V1.0.0' + '\\n'; return result;")    // 输出jsMethodName
    groovyScript("def jsMethodName = \"${_1}\"; def result = ' * @Method : ' + jsMethodName + '\\n'; 
    return result;", jsMethodName())    // 输出 js 的return
    groovyScript("def result = ' * @return : ' + '\\n'; return result;")
Salin selepas log masuk

然后在主要代码中,需要把上述的10几个函数当做参数供给主要代码使用.

判断是函数,类,js函数主要是通过如下的2个内置变量来实现的:

methodName()
jsMethodName()
Salin selepas log masuk

当methodName()不为空的时候, 生成 方法的 注释

当jsMethodName()不为空的时候, 生成 js方法的注释

否则生成类的注释

所以上述的代码可以简单的做如下的归类了:

获取相关参数:

    def methodName = \"${_1}\"; 
    def jsMethodName = \"${_2}\"; 
    def outputMethodName = \"${_3}\"; 
    def outputDesc = \"${_4}\"; 
    def outputParams = \"${_5}\"; 
    def outputAuthor = \"${_6}\"; 
    def outputReturnType = \"${_7}\"; 
    def outputDateTime = \"${_8}\"; 
    def outputPackage = \"${_9}\"; 
    def outputClass = \"${_10}\"; 
    def outputClassOtherInfo = \"${_11}\"; 
    def outputProject = \"${_12}\"; 
    def outputVersion = \"${_13}\"; 
    def outputJsMethodName = \"${_14}\"; 
    def outputJsReturnType = \"${_15}\"; 
    def result = '';
Salin selepas log masuk

判断是哪一种类型的注释(代码片段2):

   if (methodName != 'null') {
        result += '\\n';
        result += outputMethodName;
        result += outputDesc;
        result += outputParams;
        result += outputReturnType;
        result += outputAuthor;
        result += outputDateTime;
        result += ' *';return result;
    } else if (jsMethodName != 'null') {
        result += '\\n';
        result += outputJsMethodName;
        result += outputDesc;
        result += outputJsReturnType;
        result += outputAuthor;
        result += outputDateTime;
        result += ' *';return result;
    } else {
        result += '\\n';
        result += outputProject;
        result += outputPackage;
        result += outputClass;
        result += outputDesc;
        result += outputAuthor;
        result += outputDateTime;
        result += outputVersion;
        result += outputClassOtherInfo;
        result += ' *';return result;
    }
Salin selepas log masuk

这下就可以了.就把整个这么难看(groopscript搞的?)代码整理的比较清晰了.

我还有如下的几个疑惑/问题需要解决, 如果有朋友能给我答案那就好了.

问题1. 不知道可以通过什么方法获取js方法中的参数列表

问题2. 代码片段2中如果我改成了:

    result += '\\n';if (methodName != 'null') {
        result += outputMethodName;
        result += outputDesc;
        result += outputParams;
        result += outputReturnType;
        result += outputAuthor;
        result += outputDateTime;
    } else if (jsMethodName != 'null') {
        result += '\\n';
        result += outputJsMethodName;
        result += outputDesc;
        result += outputJsReturnType;
        result += outputAuthor;
        result += outputDateTime;
    } else {
        result += '\\n';
        result += outputProject;
        result += outputPackage;
        result += outputClass;
        result += outputDesc;
        result += outputAuthor;
        result += outputDateTime;
        result += outputVersion;
        result += outputClassOtherInfo;
    }
    result += ' *';return result;
Salin selepas log masuk

会出现如下的错误:

startup failed:
Script1.groovy: 1: expecting EOF, found 'result' @ line 1, column 1036.
   lt += outputClassOtherInfo; } result += 
                                 ^

1 error
Salin selepas log masuk

问题3: 不知道怎么获取Override方法对应的接口方法(父类方法)

关于问题3: 实际上给这种方法加注释是没有意义的,具体可以参考:

但是如果非要加该怎么去判断.

最后可以把 缩写(abbreviation)  改成:   *

这样以后只需要输入:

/*
Salin selepas log masuk

然后按一下 tab 键就出现结果了

哈哈!!!


Atas ialah kandungan terperinci idea live template高级知识, 进阶. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan