Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Groovy$getCallSiteArray实现_Groovy - Fatal编程技术网

Groovy$getCallSiteArray实现

Groovy$getCallSiteArray实现,groovy,Groovy,我将groovy 2.4.12与Oracle JVM 1.8一起使用。我试图了解一下groovyc如何转换最终用户编写的脚本 为此,我编写了以下简单脚本: println 'Hello World` 这是使用groovychello.groovy编译成字节码的。最后,我反编译了hello.class以获得以下代码: import groovy.lang.Binding; import groovy.lang.Script; import org.codehaus.groovy.runtime.

我将groovy 2.4.12与Oracle JVM 1.8一起使用。我试图了解一下
groovyc
如何转换最终用户编写的脚本

为此,我编写了以下简单脚本:

println 'Hello World`
这是使用
groovychello.groovy
编译成字节码的。最后,我反编译了
hello.class
以获得以下代码:

import groovy.lang.Binding;
import groovy.lang.Script;
import org.codehaus.groovy.runtime.InvokerHelper;
import org.codehaus.groovy.runtime.callsite.CallSite;

public class hello extends Script {
    public hello() {
        CallSite[] var1 = $getCallSiteArray();
    }

    public hello(Binding context) {
        CallSite[] var2 = $getCallSiteArray();
        super(context);
    }

    public static void main(String... args) {
        CallSite[] var1 = $getCallSiteArray();
        var1[0].call(InvokerHelper.class, hello.class, args);
    }

    public Object run() {
        CallSite[] var1 = $getCallSiteArray();
        return var1[1].callCurrent(this, "Hello World");
    }
}

这看起来像是一个典型的Java类,只是我不知道在哪里定义了
$getCallSiteArray()
方法。它肯定不在此类中,也不是
public
protected
groovy.lang.Script
成员。所以我的问题是这个方法是在哪里实现的?

使用另一个反编译器查看它

//
//由Procyon v0.5.36反编译
// 
公共类A扩展脚本
{
私有静态/*合成*/SoftReference$callSiteArray;
公共A(){
$getCallSiteArray();
}
公共A(最终绑定上下文){
$getCallSiteArray();
超级(上下文);
}
公共静态void main(最终字符串…参数){
$getCallSiteArray()[0]。调用((对象)InvokerHelper.class,(对象)A.class,(对象)args);
}
公共对象运行(){
返回$getCallSiteArray()[1].callCurrent((GroovyObject)this,(Object)“hello world”);
}
私有静态/*合成*/CallSiteArray$createCallSiteArray(){
最终字符串[]数组=新字符串[2];
$createCallSiteArray_1(数组);
返回新的CallSiteArray((Class)A.Class,array);
}
私有静态/*合成*/CallSite[]$getCallSiteArray(){
CallSiteArray$createCallSiteArray;
如果(A.$callSiteArray==null | |($createCallSiteArray=A.$callSiteArray.get())==null){
$createCallSiteArray=$createCallSiteArray();
A.$callSiteArray=新的软引用($createCallSiteArray);
}
返回$createCallSiteArray.array;
}
}

使用另一个反编译器查看它

//
//由Procyon v0.5.36反编译
// 
公共类A扩展脚本
{
私有静态/*合成*/SoftReference$callSiteArray;
公共A(){
$getCallSiteArray();
}
公共A(最终绑定上下文){
$getCallSiteArray();
超级(上下文);
}
公共静态void main(最终字符串…参数){
$getCallSiteArray()[0]。调用((对象)InvokerHelper.class,(对象)A.class,(对象)args);
}
公共对象运行(){
返回$getCallSiteArray()[1].callCurrent((GroovyObject)this,(Object)“hello world”);
}
私有静态/*合成*/CallSiteArray$createCallSiteArray(){
最终字符串[]数组=新字符串[2];
$createCallSiteArray_1(数组);
返回新的CallSiteArray((Class)A.Class,array);
}
私有静态/*合成*/CallSite[]$getCallSiteArray(){
CallSiteArray$createCallSiteArray;
如果(A.$callSiteArray==null | |($createCallSiteArray=A.$callSiteArray.get())==null){
$createCallSiteArray=$createCallSiteArray();
A.$callSiteArray=新的软引用($createCallSiteArray);
}
返回$createCallSiteArray.array;
}
}