cari
RumahJavajavaTutorialidea live template高级知识, 进阶

idea live template高级知识, 进阶

May 17, 2018 am 10:36 AM
ideajavascriptlivetemplatePengetahuanmaju

为了解决用一个命令(宏)给方法,类,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;
    }

给 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 {
}

给js 的方法添加注释

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

现在把答案公布如下

Abbreviation:

cmj

Template text(注1):

**
 *$context$ 
 */

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;"))

使用如下:

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

/cmj

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

注1 和注2

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

Template text

*
 *$context$ 
 */

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

因此注2就是变成了:

/*cmj

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

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;")

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

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

methodName()
jsMethodName()

当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 = '';

判断是哪一种类型的注释(代码片段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;
    }

这下就可以了.就把整个这么难看(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;

会出现如下的错误:

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

1 error

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

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

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

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

这样以后只需要输入:

/*

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

哈哈!!!


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

Kenyataan
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
Akan R.E.P.O. Ada Crossplay?
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

SublimeText3 Linux versi baharu

SublimeText3 Linux versi baharu

SublimeText3 Linux versi terkini

EditPlus versi Cina retak

EditPlus versi Cina retak

Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

PhpStorm versi Mac

PhpStorm versi Mac

Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

MinGW - GNU Minimalis untuk Windows

MinGW - GNU Minimalis untuk Windows

Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa