6.7.0 - Alpha21 - 修复 util.java.array 无法正常使用 Boolean 等类型参数的问题
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"$data": {
|
"$data": {
|
||||||
"v6.7.0": {
|
"v6.7.0": {
|
||||||
"released_date": "2026/02/15",
|
"released_date": "2026/02/23",
|
||||||
"feature": [
|
"feature": [
|
||||||
"插件中心功能, 支持插件的安装/卸载/更新等操作 (入口: 主页抽屉按钮/主页标签页)",
|
"插件中心功能, 支持插件的安装/卸载/更新等操作 (入口: 主页抽屉按钮/主页标签页)",
|
||||||
"版本历史功能, 支持查看/恢复可编辑文件的历史版本 (入口: 主页抽屉按钮/文件管理器菜单/代码编辑器菜单)",
|
"版本历史功能, 支持查看/恢复可编辑文件的历史版本 (入口: 主页抽屉按钮/文件管理器菜单/代码编辑器菜单)",
|
||||||
@@ -60,6 +60,7 @@
|
|||||||
"timers.keepAlive 方法 timeout 参数功能无效的问题",
|
"timers.keepAlive 方法 timeout 参数功能无效的问题",
|
||||||
"floaty.window/rawWindow 方法无法接受字符串参数的问题 _[`issue #467`](http://issues.autojs6.com/467)_",
|
"floaty.window/rawWindow 方法无法接受字符串参数的问题 _[`issue #467`](http://issues.autojs6.com/467)_",
|
||||||
"util.class[Name]/getClass[Name] 可能返回错误结果的问题",
|
"util.class[Name]/getClass[Name] 可能返回错误结果的问题",
|
||||||
|
"util.java.array 无法正常使用 Boolean 等类型参数的问题",
|
||||||
"threads.disposable() 返回的对象在存取数据时可能被意外装箱的问题 _[`issue #435`](http://issues.autojs6.com/435)_",
|
"threads.disposable() 返回的对象在存取数据时可能被意外装箱的问题 _[`issue #435`](http://issues.autojs6.com/435)_",
|
||||||
"console.build 方法多次调用时, 日志浮动窗口样式选项未能正常重置的问题",
|
"console.build 方法多次调用时, 日志浮动窗口样式选项未能正常重置的问题",
|
||||||
"console.build 方法的 (title/content)BackgroundColor 选项导致透明度或着色选项被覆盖的问题 _[`issue #458`](http://issues.autojs6.com/458)_",
|
"console.build 方法的 (title/content)BackgroundColor 选项导致透明度或着色选项被覆盖的问题 _[`issue #458`](http://issues.autojs6.com/458)_",
|
||||||
|
|||||||
@@ -2,19 +2,23 @@ package org.autojs.autojs.runtime.api.augment.util
|
|||||||
|
|
||||||
import org.autojs.autojs.annotation.RhinoFunctionBody
|
import org.autojs.autojs.annotation.RhinoFunctionBody
|
||||||
import org.autojs.autojs.annotation.RhinoSingletonFunctionInterface
|
import org.autojs.autojs.annotation.RhinoSingletonFunctionInterface
|
||||||
|
import org.autojs.autojs.rhino.ArgumentGuards.Companion.component1
|
||||||
|
import org.autojs.autojs.rhino.ArgumentGuards.Companion.component2
|
||||||
import org.autojs.autojs.rhino.extension.AnyExtensions.isJsNullish
|
import org.autojs.autojs.rhino.extension.AnyExtensions.isJsNullish
|
||||||
import org.autojs.autojs.rhino.extension.AnyExtensions.jsBrief
|
import org.autojs.autojs.rhino.extension.AnyExtensions.jsBrief
|
||||||
import org.autojs.autojs.rhino.extension.IterableExtensions.toNativeArray
|
import org.autojs.autojs.rhino.extension.IterableExtensions.toNativeArray
|
||||||
import org.autojs.autojs.rhino.extension.ScriptableExtensions.prop
|
import org.autojs.autojs.rhino.extension.ScriptableExtensions.prop
|
||||||
import org.autojs.autojs.runtime.api.augment.Augmentable
|
import org.autojs.autojs.runtime.api.augment.Augmentable
|
||||||
import org.autojs.autojs.runtime.exception.WrappedIllegalArgumentException
|
import org.autojs.autojs.runtime.exception.WrappedIllegalArgumentException
|
||||||
|
import org.autojs.autojs.util.RhinoUtils
|
||||||
import org.autojs.autojs.util.RhinoUtils.newNativeArray
|
import org.autojs.autojs.util.RhinoUtils.newNativeArray
|
||||||
import org.autojs.autojs.util.RhinoUtils.newNativeObject
|
import org.autojs.autojs.util.RhinoUtils.newNativeObject
|
||||||
import org.mozilla.javascript.Context
|
import org.mozilla.javascript.Context
|
||||||
import org.mozilla.javascript.NativeArray
|
import org.mozilla.javascript.NativeArray
|
||||||
|
import org.mozilla.javascript.NativeJavaClass
|
||||||
import org.mozilla.javascript.NativeObject
|
import org.mozilla.javascript.NativeObject
|
||||||
import org.mozilla.javascript.ScriptableObject
|
import org.mozilla.javascript.ScriptableObject
|
||||||
import java.lang.reflect.Array.newInstance
|
import org.mozilla.javascript.Wrapper
|
||||||
|
|
||||||
@Suppress("unused")
|
@Suppress("unused")
|
||||||
object Java : Augmentable() {
|
object Java : Augmentable() {
|
||||||
@@ -31,9 +35,20 @@ object Java : Augmentable() {
|
|||||||
@RhinoSingletonFunctionInterface
|
@RhinoSingletonFunctionInterface
|
||||||
fun instanceof(args: Array<out Any?>): Any = ensureArgumentsLength(args, 2) {
|
fun instanceof(args: Array<out Any?>): Any = ensureArgumentsLength(args, 2) {
|
||||||
val (obj, clazz) = it
|
val (obj, clazz) = it
|
||||||
obj ?: return@ensureArgumentsLength false
|
obj ?: throw WrappedIllegalArgumentException("Argument \"obj\" for util.java.instanceof must not be null")
|
||||||
clazz ?: return@ensureArgumentsLength false
|
|
||||||
Class.forName(Context.toString(clazz)).isAssignableFrom(obj.javaClass)
|
val resolvedClass = when (clazz) {
|
||||||
|
null -> return@ensureArgumentsLength false
|
||||||
|
is Class<*> -> clazz
|
||||||
|
is NativeJavaClass -> clazz.classObject
|
||||||
|
is Wrapper -> when (val unwrapped = clazz.unwrap()) {
|
||||||
|
is Class<*> -> unwrapped
|
||||||
|
is NativeJavaClass -> unwrapped.classObject
|
||||||
|
else -> unwrapped.resolveClass()
|
||||||
|
}
|
||||||
|
else -> clazz.resolveClass()
|
||||||
|
}
|
||||||
|
resolvedClass.isAssignableFrom(obj.javaClass)
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
@@ -44,33 +59,15 @@ object Java : Augmentable() {
|
|||||||
|
|
||||||
val dims = it.drop(1).map { arg -> Context.toNumber(arg).toInt() }
|
val dims = it.drop(1).map { arg -> Context.toNumber(arg).toInt() }
|
||||||
|
|
||||||
// @Hint by SuperMonster003 on Jun 3, 2024.
|
if (dims.isEmpty()) {
|
||||||
// ! Reflection may cause some performance overhead,
|
// Keep behavior consistent with Rhino JavaScript implementation: calling array(type) throws.
|
||||||
// ! and potential exceptions will become harder to trace.
|
// zh-CN: 保持与 Rhino JavaScript 实现一致: 调用 array(type) 时抛出异常.
|
||||||
// ! zh-CN:
|
throw WrappedIllegalArgumentException("Missing array dimensions for util.java.array")
|
||||||
// ! 反射会带来一定的额外性能开销, 潜在的异常也难以追踪.
|
|
||||||
// !
|
|
||||||
// # val method = this::class.members.find { mem ->
|
|
||||||
// # mem is KFunction<*> && mem.name == "newInstance" && mem.parameters.size == dims.size + 1
|
|
||||||
// # } as? KFunction<*>
|
|
||||||
// # method?.call(clazz, *dims.toIntArray().toTypedArray()) ?: throw IllegalArgumentException("Too many arguments for util.java")
|
|
||||||
when (dims.size) {
|
|
||||||
+0 -> newInstance(clazz, 0)
|
|
||||||
+1 -> newInstance(clazz, dims[0])
|
|
||||||
+2 -> newInstance(clazz, dims[0], dims[1])
|
|
||||||
+3 -> newInstance(clazz, dims[0], dims[1], dims[2])
|
|
||||||
+4 -> newInstance(clazz, dims[0], dims[1], dims[2], dims[3])
|
|
||||||
+5 -> newInstance(clazz, dims[0], dims[1], dims[2], dims[3], dims[4])
|
|
||||||
+6 -> newInstance(clazz, dims[0], dims[1], dims[2], dims[3], dims[4], dims[5])
|
|
||||||
+7 -> newInstance(clazz, dims[0], dims[1], dims[2], dims[3], dims[4], dims[5], dims[6])
|
|
||||||
+8 -> newInstance(clazz, dims[0], dims[1], dims[2], dims[3], dims[4], dims[5], dims[6], dims[7])
|
|
||||||
+9 -> newInstance(clazz, dims[0], dims[1], dims[2], dims[3], dims[4], dims[5], dims[6], dims[7], dims[8])
|
|
||||||
10 -> newInstance(clazz, dims[0], dims[1], dims[2], dims[3], dims[4], dims[5], dims[6], dims[7], dims[8], dims[9])
|
|
||||||
11 -> newInstance(clazz, dims[0], dims[1], dims[2], dims[3], dims[4], dims[5], dims[6], dims[7], dims[8], dims[9], dims[10])
|
|
||||||
12 -> newInstance(clazz, dims[0], dims[1], dims[2], dims[3], dims[4], dims[5], dims[6], dims[7], dims[8], dims[9], dims[10], dims[11])
|
|
||||||
13 -> newInstance(clazz, dims[0], dims[1], dims[2], dims[3], dims[4], dims[5], dims[6], dims[7], dims[8], dims[9], dims[10], dims[11], dims[12])
|
|
||||||
else -> throw WrappedIllegalArgumentException("Too many arguments for util.java")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Use java.lang.reflect.Array.newInstance(Class, int[]) to support arbitrary dimensions.
|
||||||
|
// zh-CN: 使用 java.lang.reflect.Array.newInstance(Class, int[]) 以支持任意维度数量.
|
||||||
|
java.lang.reflect.Array.newInstance(clazz, *dims.toIntArray())
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
@@ -96,7 +93,9 @@ object Java : Augmentable() {
|
|||||||
if (o !is NativeObject) throw WrappedIllegalArgumentException("Argument \"o\" ${o.jsBrief()} for util.objectToMap must be a JavaScript Object")
|
if (o !is NativeObject) throw WrappedIllegalArgumentException("Argument \"o\" ${o.jsBrief()} for util.objectToMap must be a JavaScript Object")
|
||||||
hashMapOf<String, Any?>().also { map ->
|
hashMapOf<String, Any?>().also { map ->
|
||||||
for (key in ScriptableObject.getPropertyIds(o)) {
|
for (key in ScriptableObject.getPropertyIds(o)) {
|
||||||
map[key.toString()] = o.prop(key.toString())
|
if (RhinoUtils.js_object_hasOwnProperty(o, key.toString())) {
|
||||||
|
map[key.toString()] = o.prop(key.toString())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -116,14 +115,27 @@ object Java : Augmentable() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun typeToClass(type: Any?) = when (type) {
|
private fun typeToClass(type: Any?) = when (type) {
|
||||||
"string" -> String::class.java
|
is Class<*> -> type
|
||||||
"int" -> Integer.TYPE
|
is NativeJavaClass -> type.classObject
|
||||||
"long" -> java.lang.Long.TYPE
|
is Wrapper -> when (val unwrapped = type.unwrap()) {
|
||||||
"double" -> java.lang.Double.TYPE
|
is Class<*> -> unwrapped
|
||||||
"char" -> Character.TYPE
|
is NativeJavaClass -> unwrapped.classObject
|
||||||
"byte" -> java.lang.Byte.TYPE
|
else -> unwrapped.resolveClass()
|
||||||
"float" -> java.lang.Float.TYPE
|
}
|
||||||
else -> Class.forName(Context.toString(type))
|
is String -> when (type) {
|
||||||
|
"string" -> String::class.java
|
||||||
|
"int" -> Integer.TYPE
|
||||||
|
"long" -> java.lang.Long.TYPE
|
||||||
|
"double" -> java.lang.Double.TYPE
|
||||||
|
"char" -> Character.TYPE
|
||||||
|
"byte" -> java.lang.Byte.TYPE
|
||||||
|
"float" -> java.lang.Float.TYPE
|
||||||
|
"short" -> java.lang.Short.TYPE
|
||||||
|
"boolean" -> java.lang.Boolean.TYPE
|
||||||
|
else -> type.resolveClass()
|
||||||
|
}
|
||||||
|
else -> type.resolveClass()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun Any?.resolveClass(): Class<*> = Class.forName(Context.toString(this))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#Sun Feb 15 16:19:31 CST 2026
|
#Mon Feb 23 16:51:52 CST 2026
|
||||||
BUILD_TIME=1771143571726
|
BUILD_TIME=1771836712381
|
||||||
COMPILE_SDK_VERSION=36
|
COMPILE_SDK_VERSION=36
|
||||||
IMAGE_QUANT_CMAKE_VERSION=3.22.1
|
IMAGE_QUANT_CMAKE_VERSION=3.22.1
|
||||||
IMAGE_QUANT_NDK_VERSION=26.1.10909125
|
IMAGE_QUANT_NDK_VERSION=26.1.10909125
|
||||||
@@ -27,6 +27,6 @@ RAPID_OCR_OPENCV_MOBILE_LABEL_VERSION=13
|
|||||||
RAPID_OCR_OPENCV_MOBILE_VERSION=4.5.3
|
RAPID_OCR_OPENCV_MOBILE_VERSION=4.5.3
|
||||||
TARGET_SDK_VERSION=36
|
TARGET_SDK_VERSION=36
|
||||||
TARGET_SDK_VERSION_INRT=29
|
TARGET_SDK_VERSION_INRT=29
|
||||||
VERSION_BUILD=3746
|
VERSION_BUILD=3750
|
||||||
VERSION_NAME=6.7.0 Alpha20
|
VERSION_NAME=6.7.0 Alpha21
|
||||||
VSCODE_EXT_REQUIRED_VERSION=1.0.13
|
VSCODE_EXT_REQUIRED_VERSION=1.0.13
|
||||||
|
|||||||
Reference in New Issue
Block a user