blob: 7372d4c0d869efe401169e223bffd03a877ba769 [file]
{TARGET_TYPE} invoke{PTYPE}Method(String className, String methodName, String signature, List<dynamic> args) {
return using((Arena arena) {
final env = getEnv();
final classNameChars = className.toNativeChars(arena);
final methodNameChars = methodName.toNativeChars(arena);
final signatureChars = signature.toNativeChars(arena);
final cls = _bindings.LoadClass(classNameChars);
if (cls == nullptr) {
env.checkException();
}
final methodID = env.GetStaticMethodID(cls, methodNameChars, signatureChars);
if (methodID == nullptr) {
try {
env.checkException();
} catch (e) {
env.DeleteLocalRef(cls);
rethrow;
}
}
final jvArgs = JValueArgs(args, env, arena);
final result = env.CallStatic{TYPE}MethodA(cls, methodID, jvArgs.values);
jvArgs.disposeIn(env);
{CLS_REF_DEL}
{STR_REF_DEL}
env.checkException();
{INVOKE_RESULT};
});
}