IDE 內建的 Live Templates 功能極其強大,配合 Groovy 腳本可實現上下文感知的智能代碼片段生成。本文分享一套經實戰驗證的配置方案,通過單一縮寫 cmj 實現 Java 方法、Java 類、JavaScript 方法三種場景的差異化註釋自動生成。
/**
* @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) { ... }
/**
* @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 { }
/**
* @Method : standardShowBatchCheckBox
* @Description :
* @return :
* @author : Rush.D.Xzj
* @CreateDate : 2017-06-12 星期一 18:15:21
*/
function standardShowBatchCheckBox(...) { }
cmj/** *$context$ */變量 $context$ 綁定複雜 Groovy 腳本,核心邏輯分三層:
methodName()、methodParameters()、methodReturnType()、className()、currentPackage()、jsMethodName()、date()、time() 等)if (methodName != 'null') {
// Java 方法註釋組裝
} else if (jsMethodName != 'null') {
// JS 方法註釋組裝
} else {
// Java 類註釋組裝
}
groovyScript("
if ('${_1}'.length() == 2) { return ''; } // 無參數時 '[]' 長度為2
def params = '${_1}'.replaceAll('[\\[|\\]|\\s]', '').split(',').toList();
def result = '';
for (i = 0; i < params.size(); i++) {
result += ' * @param ' + params[i] + ' : \\n';
}
return result;
", methodParameters())
groovyScript("
def date = '${_1}'; def time = '${_2}';
return ' * @CreateDate : ' + date + ' ' + time + '\\n';
", date("yyyy-MM-dd E"), time("HH:mm:ss"))
methodName():Java 方法上下文非空jsMethodName():JavaScript 函數上下文非空/cmjjsMethodParameters(),需探索 PSI API 方案result += '\n' 提取至條件塊外導致 Groovy 語法錯誤,需調整字符串拼接邏輯若偏好 /*cmj 觸發方式,Template text 改為 * *$context$ */(首行少一個 *)。
通過模塊化 Groovy 腳本設計,實現了單一 Live Template 覆蓋多語言、多上下文的智能註釋生成。這一方案展示了 IDEA Live Templates 結合 Groovy 的強大擴展性,能顯著提升團隊代碼文檔規範執行效率。