func (i *invoker) Signature(ctx *context.T, call rpc.ServerCall) ([]signature.Interface, error) { env, freeFunc := jutil.GetEnv() jContext, err := jcontext.JavaContext(env, ctx, nil) if err != nil { freeFunc() return nil, err } // This method will invoke the freeFunc(). jInterfaces, err := jutil.CallFutureMethod(env, freeFunc, i.jInvoker, "getSignature", []jutil.Sign{contextSign}, jContext) if err != nil { return nil, err } env, freeFunc = jutil.GetEnv() defer freeFunc() defer jutil.DeleteGlobalRef(env, jInterfaces) interfacesArr, err := jutil.GoObjectArray(env, jInterfaces) if err != nil { return nil, err } result := make([]signature.Interface, len(interfacesArr)) for i, jInterface := range interfacesArr { err = jutil.GoVomCopy(env, jInterface, jInterfaceClass, &result[i]) if err != nil { return nil, err } } return result, nil }
func (i *invoker) MethodSignature(ctx *context.T, call rpc.ServerCall, method string) (signature.Method, error) { env, freeFunc := jutil.GetEnv() jContext, err := jcontext.JavaContext(env, ctx, nil) if err != nil { freeFunc() return signature.Method{}, err } // This method will invoke the freeFunc(). jMethod, err := jutil.CallFutureMethod(env, freeFunc, i.jInvoker, "getMethodSignature", []jutil.Sign{contextSign, jutil.StringSign}, jContext, method) if err != nil { return signature.Method{}, err } env, freeFunc = jutil.GetEnv() defer freeFunc() defer jutil.DeleteGlobalRef(env, jMethod) var result signature.Method err = jutil.GoVomCopy(env, jMethod, jMethodClass, &result) if err != nil { return signature.Method{}, err } return result, nil }