淺談idea live template高級知識_進階(給方法,類,js方法添加注釋)
為了解決用一個命令(宏)給方法,類,js方法添加注釋,經(jīng)過幾天的研究.終于得到結(jié)果了。
實現(xiàn)的效果如下:
給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) {
}
現(xiàn)在把答案公布如下
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
也可以換成第二種方法(網(wǎng)上大部分的方法):
Template text
* *$context$ */
跟注1比較第一行少了一個*,
因此注2就是變成了:
/*cmj
我感覺用我的方法比第二種方法好。
Edit Variable中代碼詳解
首先我分解了如下的 10幾個函數(shù)(是小函數(shù)):
// 輸出方法名
groovyScript("def methodName = \"${_1}\"; def result = ' * @Method : ' + methodName + '\\n'; return result;", methodName())
// 輸出描述
groovyScript("def result = ' * @Description : ' + '\\n'; return result;")
// 輸出參數(shù)列表的子函數(shù)
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())
// 輸出 作者的 子函數(shù) 這里可以改作者
groovyScript("def author = 'Rush.D.Xzj'; def result = ' * @author : ' + author + '\\n'; return result;")
// 輸出 返回值的 子函數(shù)
groovyScript("def returnType = \"${_1}\"; def result = ' * @return : ' + returnType + '\\n'; return result;", methodReturnType())
// 輸出 日期的 字函數(shù), 這個可以更改日期格式
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幾個函數(shù)當做參數(shù)供給主要代碼使用.
判斷是函數(shù),類,js函數(shù)主要是通過如下的2個內(nèi)置變量來實現(xiàn)的;
methodName() jsMethodName()
當methodName()不為空的時候, 生成 方法的 注釋
當jsMethodName()不為空的時候, 生成 js方法的注釋
否則生成類的注釋
所以上述的代碼可以簡單的做如下的歸類了:
獲取相關(guān)參數(shù):
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方法中的參數(shù)列表
問題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;
會出現(xiàn)如下的錯誤:
startup failed:
Script1.groovy: 1: expecting EOF, found 'result' @ line 1, column 1036.
lt += outputClassOtherInfo; } result +=
^
error
問題3:不知道怎么獲取Override方法對應的接口方法(父類方法)
關(guān)于問題3: 實際上給這種方法加注釋是沒有意義的,具體可以參考: https://stackoverflow.com/questions/4310858/comments-on-overridden-method-in-java
但是如果非要加該怎么去判斷.
以上這篇淺談idea live template高級知識_進階(給方法,類,js方法添加注釋)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Springboot如何讀取resources下的json配置文件
這篇文章主要介紹了Springboot如何讀取resources下的json配置文件問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07
如何使用Spring?integration在Springboot中集成Mqtt詳解
MQTT是多個客戶端通過一個中央服務器傳遞信息的多對多協(xié)議,能高效地將信息分發(fā)給一個或多個訂閱者,下面這篇文章主要給大家介紹了關(guān)于如何使用Spring?integration在Springboot中集成Mqtt的相關(guān)資料,需要的朋友可以參考下2023-02-02
基于springboot2集成jpa,創(chuàng)建dao的案例
這篇文章主要介紹了基于springboot2集成jpa,創(chuàng)建dao的案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01

