「Groovy」- 找到调用该方法的类

问题描述

该笔记将记录:在 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