问题描述
该笔记将记录:在 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