mirror of
https://github.com/HighCapable/YukiReflection.git
synced 2025-09-06 02:35:40 +08:00
refactor: merge all util functions to factory
This commit is contained in:
@@ -33,7 +33,7 @@ package com.highcapable.yukireflection.finder.base
|
|||||||
import com.highcapable.yukireflection.YukiReflection
|
import com.highcapable.yukireflection.YukiReflection
|
||||||
import com.highcapable.yukireflection.log.yLoggerE
|
import com.highcapable.yukireflection.log.yLoggerE
|
||||||
import com.highcapable.yukireflection.log.yLoggerI
|
import com.highcapable.yukireflection.log.yLoggerI
|
||||||
import com.highcapable.yukireflection.utils.await
|
import com.highcapable.yukireflection.utils.factory.await
|
||||||
import java.lang.reflect.Constructor
|
import java.lang.reflect.Constructor
|
||||||
import java.lang.reflect.Field
|
import java.lang.reflect.Field
|
||||||
import java.lang.reflect.Member
|
import java.lang.reflect.Member
|
||||||
|
@@ -49,9 +49,9 @@ import com.highcapable.yukireflection.finder.tools.ReflectionTool
|
|||||||
import com.highcapable.yukireflection.finder.type.factory.ModifierConditions
|
import com.highcapable.yukireflection.finder.type.factory.ModifierConditions
|
||||||
import com.highcapable.yukireflection.finder.type.factory.NameConditions
|
import com.highcapable.yukireflection.finder.type.factory.NameConditions
|
||||||
import com.highcapable.yukireflection.log.yLoggerW
|
import com.highcapable.yukireflection.log.yLoggerW
|
||||||
import com.highcapable.yukireflection.utils.await
|
import com.highcapable.yukireflection.utils.factory.await
|
||||||
import com.highcapable.yukireflection.utils.runBlocking
|
import com.highcapable.yukireflection.utils.factory.runBlocking
|
||||||
import com.highcapable.yukireflection.utils.toStackTrace
|
import com.highcapable.yukireflection.utils.factory.toStackTrace
|
||||||
import dalvik.system.BaseDexClassLoader
|
import dalvik.system.BaseDexClassLoader
|
||||||
import java.lang.reflect.Constructor
|
import java.lang.reflect.Constructor
|
||||||
import java.lang.reflect.Field
|
import java.lang.reflect.Field
|
||||||
|
@@ -44,7 +44,7 @@ import com.highcapable.yukireflection.finder.type.factory.ObjectsConditions
|
|||||||
import com.highcapable.yukireflection.log.yLoggerW
|
import com.highcapable.yukireflection.log.yLoggerW
|
||||||
import com.highcapable.yukireflection.type.defined.UndefinedType
|
import com.highcapable.yukireflection.type.defined.UndefinedType
|
||||||
import com.highcapable.yukireflection.type.defined.VagueType
|
import com.highcapable.yukireflection.type.defined.VagueType
|
||||||
import com.highcapable.yukireflection.utils.runBlocking
|
import com.highcapable.yukireflection.utils.factory.runBlocking
|
||||||
import java.lang.reflect.Constructor
|
import java.lang.reflect.Constructor
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -44,7 +44,7 @@ import com.highcapable.yukireflection.finder.type.factory.ModifierConditions
|
|||||||
import com.highcapable.yukireflection.finder.type.factory.NameConditions
|
import com.highcapable.yukireflection.finder.type.factory.NameConditions
|
||||||
import com.highcapable.yukireflection.finder.type.factory.ObjectConditions
|
import com.highcapable.yukireflection.finder.type.factory.ObjectConditions
|
||||||
import com.highcapable.yukireflection.log.yLoggerW
|
import com.highcapable.yukireflection.log.yLoggerW
|
||||||
import com.highcapable.yukireflection.utils.runBlocking
|
import com.highcapable.yukireflection.utils.factory.runBlocking
|
||||||
import java.lang.reflect.Field
|
import java.lang.reflect.Field
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -46,7 +46,7 @@ import com.highcapable.yukireflection.finder.type.factory.ObjectsConditions
|
|||||||
import com.highcapable.yukireflection.log.yLoggerW
|
import com.highcapable.yukireflection.log.yLoggerW
|
||||||
import com.highcapable.yukireflection.type.defined.UndefinedType
|
import com.highcapable.yukireflection.type.defined.UndefinedType
|
||||||
import com.highcapable.yukireflection.type.defined.VagueType
|
import com.highcapable.yukireflection.type.defined.VagueType
|
||||||
import com.highcapable.yukireflection.utils.runBlocking
|
import com.highcapable.yukireflection.utils.factory.runBlocking
|
||||||
import java.lang.reflect.Method
|
import java.lang.reflect.Method
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -51,13 +51,13 @@ import com.highcapable.yukireflection.type.java.DalvikBaseDexClassLoader
|
|||||||
import com.highcapable.yukireflection.type.java.NoClassDefFoundErrorClass
|
import com.highcapable.yukireflection.type.java.NoClassDefFoundErrorClass
|
||||||
import com.highcapable.yukireflection.type.java.NoSuchFieldErrorClass
|
import com.highcapable.yukireflection.type.java.NoSuchFieldErrorClass
|
||||||
import com.highcapable.yukireflection.type.java.NoSuchMethodErrorClass
|
import com.highcapable.yukireflection.type.java.NoSuchMethodErrorClass
|
||||||
import com.highcapable.yukireflection.utils.conditions
|
import com.highcapable.yukireflection.utils.factory.conditions
|
||||||
import com.highcapable.yukireflection.utils.findLastIndex
|
import com.highcapable.yukireflection.utils.factory.findLastIndex
|
||||||
import com.highcapable.yukireflection.utils.lastIndex
|
import com.highcapable.yukireflection.utils.factory.lastIndex
|
||||||
import com.highcapable.yukireflection.utils.let
|
import com.highcapable.yukireflection.utils.factory.let
|
||||||
import com.highcapable.yukireflection.utils.runOrFalse
|
import com.highcapable.yukireflection.utils.factory.runOrFalse
|
||||||
import com.highcapable.yukireflection.utils.takeIf
|
import com.highcapable.yukireflection.utils.factory.takeIf
|
||||||
import com.highcapable.yukireflection.utils.value
|
import com.highcapable.yukireflection.utils.factory.value
|
||||||
import dalvik.system.BaseDexClassLoader
|
import dalvik.system.BaseDexClassLoader
|
||||||
import java.lang.reflect.Constructor
|
import java.lang.reflect.Constructor
|
||||||
import java.lang.reflect.Field
|
import java.lang.reflect.Field
|
||||||
|
@@ -0,0 +1,80 @@
|
|||||||
|
/*
|
||||||
|
* YukiReflection - An efficient Reflection API for Java and Android built in Kotlin.
|
||||||
|
* Copyright (C) 2019-2023 HighCapable
|
||||||
|
* https://github.com/fankes/YukiReflection
|
||||||
|
*
|
||||||
|
* MIT License
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*
|
||||||
|
* This file is created by fankes on 2023/9/23.
|
||||||
|
*/
|
||||||
|
@file:Suppress("unused")
|
||||||
|
|
||||||
|
package com.highcapable.yukireflection.utils.factory
|
||||||
|
|
||||||
|
import java.util.concurrent.ExecutorService
|
||||||
|
import java.util.concurrent.Executors
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建当前线程池服务
|
||||||
|
* @return [ExecutorService]
|
||||||
|
*/
|
||||||
|
private val currentThreadPool get() = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors())
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 启动 [Thread] 延迟等待 [block] 的结果 [T]
|
||||||
|
* @param delayMs 延迟毫秒 - 默认 1 ms
|
||||||
|
* @param block 方法块
|
||||||
|
* @return [T]
|
||||||
|
*/
|
||||||
|
internal inline fun <T> T.await(delayMs: Long = 1, crossinline block: (T) -> Unit): T {
|
||||||
|
currentThreadPool.apply {
|
||||||
|
execute {
|
||||||
|
if (delayMs > 0) Thread.sleep(delayMs)
|
||||||
|
block(this@await)
|
||||||
|
shutdown()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计算方法执行耗时
|
||||||
|
* @param block 方法块
|
||||||
|
* @return [RunBlockResult]
|
||||||
|
*/
|
||||||
|
internal inline fun <R> runBlocking(block: () -> R): RunBlockResult {
|
||||||
|
val start = System.currentTimeMillis()
|
||||||
|
block()
|
||||||
|
return RunBlockResult(afterMs = System.currentTimeMillis() - start)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 构造耗时计算结果类
|
||||||
|
* @param afterMs 耗时
|
||||||
|
*/
|
||||||
|
internal class RunBlockResult(internal val afterMs: Long) {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取耗时计算结果
|
||||||
|
* @param result 回调结果 - ([Long] 耗时)
|
||||||
|
*/
|
||||||
|
internal inline fun result(result: (Long) -> Unit) = result(afterMs)
|
||||||
|
}
|
@@ -0,0 +1,39 @@
|
|||||||
|
/*
|
||||||
|
* YukiReflection - An efficient Reflection API for Java and Android built in Kotlin.
|
||||||
|
* Copyright (C) 2019-2023 HighCapable
|
||||||
|
* https://github.com/fankes/YukiReflection
|
||||||
|
*
|
||||||
|
* MIT License
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*
|
||||||
|
* This file is created by fankes on 2023/9/23.
|
||||||
|
*/
|
||||||
|
@file:Suppress("unused")
|
||||||
|
|
||||||
|
package com.highcapable.yukireflection.utils.factory
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream
|
||||||
|
import java.io.PrintStream
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取完整的异常堆栈内容
|
||||||
|
* @return [String]
|
||||||
|
*/
|
||||||
|
internal fun Throwable.toStackTrace() = ByteArrayOutputStream().also { printStackTrace(PrintStream(it)) }.toString()
|
@@ -23,46 +23,11 @@
|
|||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
* SOFTWARE.
|
* SOFTWARE.
|
||||||
*
|
*
|
||||||
* This file is created by fankes on 2022/2/5.
|
* This file is created by fankes on 2023/9/23.
|
||||||
* This file is modified by fankes on 2023/1/21.
|
|
||||||
*/
|
*/
|
||||||
@file:Suppress("unused")
|
@file:Suppress("unused")
|
||||||
|
|
||||||
package com.highcapable.yukireflection.utils
|
package com.highcapable.yukireflection.utils.factory
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream
|
|
||||||
import java.io.PrintStream
|
|
||||||
import java.util.concurrent.ExecutorService
|
|
||||||
import java.util.concurrent.Executors
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建当前线程池服务
|
|
||||||
* @return [ExecutorService]
|
|
||||||
*/
|
|
||||||
private val currentThreadPool get() = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors())
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 对 [T] 返回无返回值的 [Unit]
|
|
||||||
* @return [Unit]
|
|
||||||
*/
|
|
||||||
internal fun <T> T?.unit() = let {}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 启动 [Thread] 延迟等待 [block] 的结果 [T]
|
|
||||||
* @param delayMs 延迟毫秒 - 默认 1 ms
|
|
||||||
* @param block 方法块
|
|
||||||
* @return [T]
|
|
||||||
*/
|
|
||||||
internal inline fun <T> T.await(delayMs: Long = 1, crossinline block: (T) -> Unit): T {
|
|
||||||
currentThreadPool.apply {
|
|
||||||
execute {
|
|
||||||
if (delayMs > 0) Thread.sleep(delayMs)
|
|
||||||
block(this@await)
|
|
||||||
shutdown()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return this
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取数组内容依次列出的字符串表示
|
* 获取数组内容依次列出的字符串表示
|
||||||
@@ -117,36 +82,6 @@ internal inline fun runOrTrue(block: () -> Boolean) = runCatching { block() }.ge
|
|||||||
*/
|
*/
|
||||||
internal inline fun runOrFalse(block: () -> Boolean) = runCatching { block() }.getOrNull() ?: false
|
internal inline fun runOrFalse(block: () -> Boolean) = runCatching { block() }.getOrNull() ?: false
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取完整的异常堆栈内容
|
|
||||||
* @return [String]
|
|
||||||
*/
|
|
||||||
internal fun Throwable.toStackTrace() = ByteArrayOutputStream().also { printStackTrace(PrintStream(it)) }.toString()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 计算方法执行耗时
|
|
||||||
* @param block 方法块
|
|
||||||
* @return [RunBlockResult]
|
|
||||||
*/
|
|
||||||
internal inline fun <R> runBlocking(block: () -> R): RunBlockResult {
|
|
||||||
val start = System.currentTimeMillis()
|
|
||||||
block()
|
|
||||||
return RunBlockResult(afterMs = System.currentTimeMillis() - start)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 构造耗时计算结果类
|
|
||||||
* @param afterMs 耗时
|
|
||||||
*/
|
|
||||||
internal class RunBlockResult(internal val afterMs: Long) {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取耗时计算结果
|
|
||||||
* @param result 回调结果 - ([Long] 耗时)
|
|
||||||
*/
|
|
||||||
internal inline fun result(result: (Long) -> Unit) = result(afterMs)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建多项条件判断 - 条件对象 [T]
|
* 创建多项条件判断 - 条件对象 [T]
|
||||||
* @param initiate 方法体
|
* @param initiate 方法体
|
Reference in New Issue
Block a user