1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-10 13:00:37 +00:00

Fix JavaClassWrapper so it actually works

This commit is contained in:
David Snopek
2024-08-20 16:53:57 -05:00
parent a5830f6eb9
commit 78883a52c6
9 changed files with 397 additions and 60 deletions

View File

@@ -30,6 +30,8 @@
#include "jni_utils.h"
#include "api/java_class_wrapper.h"
jvalret _variant_to_jvalue(JNIEnv *env, Variant::Type p_type, const Variant *p_arg, bool force_jobject) {
jvalret v;
@@ -185,6 +187,16 @@ jvalret _variant_to_jvalue(JNIEnv *env, Variant::Type p_type, const Variant *p_a
v.obj = arr;
} break;
case Variant::OBJECT: {
Ref<JavaObject> generic_object = *p_arg;
if (generic_object.is_valid()) {
jobject obj = env->NewLocalRef(generic_object->get_instance());
v.val.l = obj;
v.obj = obj;
} else {
v.val.i = 0;
}
} break;
default: {
v.val.i = 0;
@@ -358,9 +370,11 @@ Variant _jobject_to_variant(JNIEnv *env, jobject obj) {
return ret;
}
Ref<JavaObject> generic_object(memnew(JavaObject(JavaClassWrapper::get_singleton()->wrap(name), obj)));
env->DeleteLocalRef(c);
return Variant();
return generic_object;
}
Variant::Type get_jni_type(const String &p_type) {
@@ -395,10 +409,10 @@ Variant::Type get_jni_type(const String &p_type) {
idx++;
}
return Variant::NIL;
return Variant::OBJECT;
}
const char *get_jni_sig(const String &p_type) {
String get_jni_sig(const String &p_type) {
static struct {
const char *name;
const char *sig;
@@ -430,5 +444,5 @@ const char *get_jni_sig(const String &p_type) {
idx++;
}
return "Ljava/lang/Object;";
return "L" + p_type.replace(".", "/") + ";";
}