From f3cea8453157bddf3e925127d8c55692a8aad3a7 Mon Sep 17 00:00:00 2001 From: kunfei Date: Sat, 25 Mar 2023 19:40:11 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/script/rhino/ExternalScriptable.kt | 58 ++++++++++++------- .../main/java/com/script/rhino/JavaAdapter.kt | 10 ++-- .../com/script/rhino/RhinoScriptEngine.kt | 3 +- 3 files changed, 45 insertions(+), 26 deletions(-) diff --git a/rhino/src/main/java/com/script/rhino/ExternalScriptable.kt b/rhino/src/main/java/com/script/rhino/ExternalScriptable.kt index 99b0556e5..e00f49ff1 100644 --- a/rhino/src/main/java/com/script/rhino/ExternalScriptable.kt +++ b/rhino/src/main/java/com/script/rhino/ExternalScriptable.kt @@ -193,21 +193,39 @@ internal class ExternalScriptable @JvmOverloads constructor( } else { methodName = "valueOf" args = arrayOfNulls(1) - val hint: String = if (typeHint == null) { - "undefined" - } else if (typeHint == ScriptRuntime.StringClass) { - "string" - } else if (typeHint == ScriptRuntime.ScriptableClass) { - "object" - } else if (typeHint == ScriptRuntime.FunctionClass) { - "function" - } else if (typeHint != ScriptRuntime.BooleanClass && typeHint != java.lang.Boolean.TYPE) { - if (typeHint != ScriptRuntime.NumberClass && typeHint != ScriptRuntime.ByteClass && typeHint != java.lang.Byte.TYPE && typeHint != ScriptRuntime.ShortClass && typeHint != java.lang.Short.TYPE && typeHint != ScriptRuntime.IntegerClass && typeHint != Integer.TYPE && typeHint != ScriptRuntime.FloatClass && typeHint != java.lang.Float.TYPE && typeHint != ScriptRuntime.DoubleClass && typeHint != java.lang.Double.TYPE) { - throw Context.reportRuntimeError("Invalid JavaScript value of type $typeHint") + val hint: String = when { + typeHint == null -> { + "undefined" + } + typeHint == ScriptRuntime.StringClass -> { + "string" + } + typeHint == ScriptRuntime.ScriptableClass -> { + "object" + } + typeHint == ScriptRuntime.FunctionClass -> { + "function" + } + typeHint != ScriptRuntime.BooleanClass && typeHint != java.lang.Boolean.TYPE -> { + if (typeHint != ScriptRuntime.NumberClass + && typeHint != ScriptRuntime.ByteClass + && typeHint != java.lang.Byte.TYPE + && typeHint != ScriptRuntime.ShortClass + && typeHint != java.lang.Short.TYPE + && typeHint != ScriptRuntime.IntegerClass + && typeHint != Integer.TYPE + && typeHint != ScriptRuntime.FloatClass + && typeHint != java.lang.Float.TYPE + && typeHint != ScriptRuntime.DoubleClass + && typeHint != java.lang.Double.TYPE + ) { + throw Context.reportRuntimeError("Invalid JavaScript value of type $typeHint") + } + "number" + } + else -> { + "boolean" } - "number" - } else { - "boolean" } args[0] = hint } @@ -255,15 +273,15 @@ internal class ExternalScriptable @JvmOverloads constructor( get() { val list = ArrayList() synchronized(context) { - val var3: Iterator<*> = context.scopes.iterator() - while (var3.hasNext()) { - val scope = var3.next() as Int + val iterator: Iterator<*> = context.scopes.iterator() + while (iterator.hasNext()) { + val scope = iterator.next() as Int val bindings = context.getBindings(scope) if (bindings != null) { list.ensureCapacity(bindings.size) - val var6: Iterator<*> = bindings.keys.iterator() - while (var6.hasNext()) { - val key = var6.next() as String + val iterator1: Iterator<*> = bindings.keys.iterator() + while (iterator1.hasNext()) { + val key = iterator1.next() as String list.add(key) } } diff --git a/rhino/src/main/java/com/script/rhino/JavaAdapter.kt b/rhino/src/main/java/com/script/rhino/JavaAdapter.kt index e1d0dc43b..4a849f35d 100644 --- a/rhino/src/main/java/com/script/rhino/JavaAdapter.kt +++ b/rhino/src/main/java/com/script/rhino/JavaAdapter.kt @@ -66,14 +66,14 @@ internal class JavaAdapter private constructor(private val engine: Invocable) : override fun construct(cx: Context, scope: Scriptable, args: Array): Scriptable { return if (args.size == 2) { var clazz: Class<*>? = null - val obj1 = args[0] - if (obj1 is Wrapper) { - val o = obj1.unwrap() + val obj = args[0] + if (obj is Wrapper) { + val o = obj.unwrap() if (o is Class<*> && o.isInterface) { clazz = o } - } else if (obj1 is Class<*> && obj1.isInterface) { - clazz = obj1 + } else if (obj is Class<*> && obj.isInterface) { + clazz = obj } if (clazz == null) { throw Context.reportRuntimeError("JavaAdapter: first arg should be interface Class") diff --git a/rhino/src/main/java/com/script/rhino/RhinoScriptEngine.kt b/rhino/src/main/java/com/script/rhino/RhinoScriptEngine.kt index 1319c11d9..f935fac91 100644 --- a/rhino/src/main/java/com/script/rhino/RhinoScriptEngine.kt +++ b/rhino/src/main/java/com/script/rhino/RhinoScriptEngine.kt @@ -289,7 +289,8 @@ class RhinoScriptEngine : AbstractScriptEngine(), Invocable, Compilable { return if (accContext != null) AccessController.doPrivileged( PrivilegedAction { superDoTopCall(callable, cx, scope, thisObj, args) - } as PrivilegedAction<*>, accContext) else superDoTopCall( + }, accContext + ) else superDoTopCall( callable, cx, scope,