问题描述
该笔记将记录:在 Groovy 中,如何找到方法的调用者,以及相关问题的处理方法。
解决方案
方法一、强行试探(不可行)
通过观察栈,找到方法所在的位置:
class Log {
public void printCaller() {
println Thread.currentThread().getStackTrace()[10].getMethodName()
}
}
class Func {
Log log = new Log()
public void doSomeStuff() {
log.printCaller()
}
public void doSomeStuff2() {
log.printCaller()
doSomeStuff()
}
}
// new Func().doSomeStuff()
new Func().doSomeStuff2()
方法二、投机取巧
既然我们使用 Groovy 脚本,那么栈中的 Groovy 脚本便能组成我们的调用栈:
class Log {
public void printCaller() {
def stack = Thread.currentThread().getStackTrace().findAll{it.getFileName() && it.getFileName().endsWith(".groovy")}
String methodName = stack[1].getMethodName()
String className = stack[1].getClassName()
println "${className}.${methodName}"
}
}
class Func {
Log log = new Log()
public void doSomeStuff() {
log.printCaller()
}
public void doSomeStuff2() {
log.printCaller()
doSomeStuff()
}
}
new Func().doSomeStuff()
println "---------------"
new Func().doSomeStuff2()
在命令中,我们测试该方式是有效的,但是还没有在 Jenkins Pipeline 中试过。
参考文献
java – Get method name of my method’s caller – Stack Overflow