commit 84fc7c6ee344860cb9a4f5bfe81d2afaff05995d
parent c8abd8162bfa6da40e3142c432b533455c715fb7
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date: Tue, 28 May 2024 21:11:56 +0200
fix(scripting/java_class_wrapper): newInstance compat
Diffstat:
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/common/src/main/kotlin/me/rhunk/snapenhance/common/scripting/JSModule.kt b/common/src/main/kotlin/me/rhunk/snapenhance/common/scripting/JSModule.kt
@@ -118,12 +118,13 @@ class JSModule(
}.getOrNull() ?: return@putFunction Undefined.instance
scriptableObject("JavaClassWrapper") {
- putFunction("__new__") { args ->
+ val newInstance: (Array<out Any?>?) -> Any? = { args ->
val constructor = clazz.declaredConstructors.find {
(args ?: emptyArray()).isSameParameters(it.parameterTypes)
}?.also { it.isAccessible = true } ?: throw IllegalArgumentException("Constructor not found with args ${argsToString(args)}")
constructor.newInstance(*args ?: emptyArray())
}
+ putFunction("__new__") { newInstance(it) }
clazz.declaredMethods.filter { Modifier.isStatic(it.modifiers) }.forEach { method ->
putFunction(method.name) { args ->
@@ -138,6 +139,10 @@ class JSModule(
field.isAccessible = true
defineProperty(field.name, { field.get(null) }, { value -> field.set(null, value) }, 0)
}
+
+ if (get("newInstance") == null) {
+ putFunction("newInstance") { newInstance(it) }
+ }
}
}