官方文档: 介绍内置函数 Live template variables | IntelliJ IDEA
场景: 想实现 快速的用log 打印某个方法的全部参数
比如 有个test方法:
void test (User user, String orderId){
...
}
想要生成的java代码如下
log.info("test.params... user:{}, orderId:{}", JSON.toJSONString(user), JSON.toJSONString(orderId));
为什么要用groovy脚本?
答: 因为内置表达式 methodParameters() 输出的是字符串 [user, orderId] 这种格式
所以还需要groovy脚本来达到想要的效果
步骤1:
添加模板组, 模板, 设置模板文本
template text格式
log.info("$methodName$.params... $argsLog$", $argsJson$);
步骤2:
添加 自定义变量
变量methodName: methodName()
变量argsLog
groovyScript(
"def result='';
def params=\"${_1}\".replaceAll('[\\\\[|\\\\]|\\\\s]', '').split(',').toList();
for(i = 0; i < params.size(); i++) {
result+= params[i] + ((i < params.size() - 1) ? ':{}, ' : ':{}')
};
return result" , methodParameters())
变量argsJson, (会对所有参数进行, json转换处理, 但基本类型没必要这么做)
groovyScript(
"def result='';
def params=\"${_1}\".replaceAll('[\\\\[|\\\\]|\\\\s]', '').split(',').toList();
for(i = 0; i < params.size(); i++) {
result+='JSON.toJSONString(' + params[i] + ((i < params.size() - 1) ? '), ' : ')')
};
return result" , methodParameters())
======================================
变量argsJson升级版, 可以对指定的 参数类型 不做 json处理, 直接打印
因为利用到了内置函数 methodParameterTypes(), 需要升级idea的版本, 当前版本 2021.3.2
groovyScript("
def result='';
def types = 'String,int,Integer,long,Long,float,Float,double,Double,byte,Byte,short,Short,char,Char,boolean,Boolean';
def params=\"${_1}\".replaceAll('[\\\\[|\\\\]|\\\\s]','').split(',').toList();
def paramTypes=\"${_2}\".replaceAll('[\\\\[|\\\\]|\\\\s]','').split(',').toList();
for(i = 0; i < params.size(); i++) {
if(types.contains(paramTypes[i].replace('java.lang.',''))){
result+=params[i] + ((i < params.size() - 1) ? ', ' : '');
}else{
result+='JSON.toJSONString(' + params[i] + ((i < params.size() - 1) ? '), ' : ')');
}
};
return result;
" , methodParameters(), methodParameterTypes())
如: log.info("test.params... user:{}, orderId:{}", JSON.toJSONString(user), orderId);
orderId因为是String类型, 就不需要 JSON.toJSONString(xxx) 这样的格式
======================================
步骤3:
在要打印入参的方法里面, 输入 logmethod, 出现提示, 选中后, 按回车即可
最终效果
如果觉得logmethod, 要输入较多字符才能出现提示, 可以改成别的关键词,
或 前缀用特殊字符
======================================
其他
$SELECTION$ 选中的文字
$END$ 模板执行完成后, 鼠标光标的位置
举例: JSON.toString($SELECTION$)$END$
======================================
其他内置表达式 可参考