我们使用AST转换将代码注入到groovy脚本中。我们静态地编译脚本。
在脚本中
我们注意到了
这似乎可以接受,但是为了进一步优化,我们如何为注入的新方法生成access $函数?是否有一种方法可以始终生成这些方法或重新评估该类,以确定需要生成哪种访问方法?
我们尝试在切换目标方法后再次运行静态编译注释。它并没有改变生成的访问方法。
我们如何让编译器重新评估必须生成哪些访问方法?
这段代码就是脚本中的内容
private function1() {
// Do somethig
}
public functionThatUsesClosure(Closure a) {
a.call()
}
public parentFunction() {
functionThatUsesClosure {
function1()
}
}
使用AST转换将其转换为此
private function1() {
// Do something
}
private function1(MyExtraParameter param) {
// Do something
}
public functionThatUsesClosure(Closure a) {
a.call()
}
public parentFunction() {
functionThatUsesClosure {
function1(new MyExtraParameter())
}
}
当我使用javap检查类文件时,我看到一个与function1()匹配的额外的access $ 0函数。但是,不再使用function1(),而是在闭包中使用其function1(MyExtraParameter)。这意味着access $ 0函数必须已映射到function1(MyExtraParameter)
该代码将在没有access $ 0函数的情况下工作,因为groovy会动态调用正确的函数,但是我想知道是否存在一种方法,可以通过告诉Groovy生成一个access $ 1函数来对其进行优化。我注入的代码