From 27c9488147e266d1836f77b26cdb1beb5d325225 Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Tue, 23 Oct 2018 15:25:04 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20=E6=8A=8AUiCollection?= =?UTF-8?q?=E7=9A=84=E8=A1=8C=E4=B8=BA=E6=94=B9=E4=B8=BA=E5=92=8C=E4=BB=A5?= =?UTF-8?q?=E5=89=8D=E7=9B=B8=E5=90=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- autojs/src/main/assets/modules/__bridges__.js | 19 +++++++++++++++++++ .../autojs/engine/RhinoJavaScriptEngine.java | 9 +-------- .../autojs/runtime/ScriptBridges.java | 6 ++++++ 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/autojs/src/main/assets/modules/__bridges__.js b/autojs/src/main/assets/modules/__bridges__.js index 0a06cf4e..f6f0ee34 100644 --- a/autojs/src/main/assets/modules/__bridges__.js +++ b/autojs/src/main/assets/modules/__bridges__.js @@ -50,6 +50,25 @@ bridges.toArray = function (iterable) { } return arr; }; + +bridges.asArray = function (list) { + var arr = []; + for (var i = 0; i < list.size(); i++) { + arr.push(list.get(i)); + } + for (var key in list) { + if (typeof (key) == 'number') + continue; + var v = list[key]; + if (typeof (v) == 'function') { + arr[key] = v.bind(list); + } else { + arr[key] = v; + } + } + return arr; +}; + bridges.toString = function (o) { return String(o); }; diff --git a/autojs/src/main/java/com/stardust/autojs/engine/RhinoJavaScriptEngine.java b/autojs/src/main/java/com/stardust/autojs/engine/RhinoJavaScriptEngine.java index 08bafe06..e5f3e260 100644 --- a/autojs/src/main/java/com/stardust/autojs/engine/RhinoJavaScriptEngine.java +++ b/autojs/src/main/java/com/stardust/autojs/engine/RhinoJavaScriptEngine.java @@ -176,14 +176,7 @@ public class RhinoJavaScriptEngine extends JavaScriptEngine { if (obj instanceof String) { result = getRuntime().bridges.toString(obj.toString()); } else if (staticType == UiObjectCollection.class) { - UiObjectCollection collection = (UiObjectCollection) obj; - Object[] array = new Object[collection.size()]; - for (int i = 0; i < array.length; i++) { - array[i] = wrapAsJavaObject(cx, scope, collection.get(i), UiObject.class); - } - NativeArray nativeArray = new NativeArray(array); - nativeArray.setPrototype(TopLevel.getBuiltinPrototype(scope, TopLevel.Builtins.Array)); - result = new NativeArrayLikeJavaObject(scope, collection, staticType, nativeArray); + result = getRuntime().bridges.asArray(obj); } else { result = super.wrap(cx, scope, obj, staticType); } diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/ScriptBridges.java b/autojs/src/main/java/com/stardust/autojs/runtime/ScriptBridges.java index d27b8dc4..feca662d 100644 --- a/autojs/src/main/java/com/stardust/autojs/runtime/ScriptBridges.java +++ b/autojs/src/main/java/com/stardust/autojs/runtime/ScriptBridges.java @@ -7,6 +7,7 @@ package com.stardust.autojs.runtime; public class ScriptBridges { + public interface Bridges { Object[] NO_ARGUMENTS = new Object[0]; @@ -17,6 +18,7 @@ public class ScriptBridges { Object toString(Object obj); + Object asArray(Object obj); } private Bridges mBridges; @@ -46,4 +48,8 @@ public class ScriptBridges { return mBridges.toString(obj); } + public Object asArray(Object obj) { + checkBridges(); + return mBridges.asArray(obj); + } }