MCPcopy Create free account
hub / github.com/Ahmeth4n/renef / lua_java_array

Function lua_java_array

src/agent/lua/api_java.c:679–722  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

677}
678
679static int lua_java_array(lua_State* L) {
680 const char* class_name = luaL_checkstring(L, 1);
681 luaL_checktype(L, 2, LUA_TTABLE);
682
683 JNIEnv* env = get_jni_env();
684 if (!env) {
685 lua_pushnil(L);
686 lua_pushstring(L, "Failed to get JNIEnv");
687 return 2;
688 }
689
690 jclass element_class = find_class(env, class_name);
691 if (!element_class) {
692 lua_pushnil(L);
693 lua_pushfstring(L, "Class not found: %s", class_name);
694 return 2;
695 }
696
697 int len = luaL_len(L, 2);
698 jobjectArray arr = (*env)->NewObjectArray(env, len, element_class, NULL);
699 if (!arr) {
700 lua_pushnil(L);
701 lua_pushstring(L, "Failed to create array");
702 return 2;
703 }
704
705 for (int i = 0; i < len; i++) {
706 lua_rawgeti(L, 2, i + 1);
707 if (lua_isuserdata(L, -1)) {
708 jobject* ud = (jobject*)lua_touserdata(L, -1);
709 (*env)->SetObjectArrayElement(env, arr, i, *ud);
710 }
711 lua_pop(L, 1);
712 }
713
714 jobject global = (*env)->NewGlobalRef(env, arr);
715 (*env)->DeleteLocalRef(env, arr);
716
717 jobject* result = (jobject*)lua_newuserdata(L, sizeof(jobject));
718 *result = global;
719 luaL_getmetatable(L, JAVA_INSTANCE_MT);
720 lua_setmetatable(L, -2);
721 return 1;
722}
723
724// Java.use("com.example.Class") -> JavaClassWrapper userdata
725static int lua_java_use(lua_State* L) {

Callers

nothing calls this directly

Calls 2

get_jni_envFunction · 0.85
find_classFunction · 0.85

Tested by

no test coverage detected