diff --git a/docs-source/src/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.md b/docs-source/src/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.md
index 67647bce..32a2fbdb 100644
--- a/docs-source/src/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.md
+++ b/docs-source/src/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.md
@@ -13,7 +13,7 @@ You can use the **Chrome Translation Plugin** to translate entire pages for refe
# ConstructorFinder - class
```kotlin:no-line-numbers
-class ConstructorFinder internal constructor(override val hookInstance: YukiMemberHookCreator.MemberHookCreator?, override val classSet: Class<*>) : MemberBaseFinder
+class ConstructorFinder internal constructor(override val classSet: Class<*>) : MemberBaseFinder
```
**Change Records**
@@ -28,6 +28,10 @@ class ConstructorFinder internal constructor(override val hookInstance: YukiMemb
合并到 `MemberBaseFinder`
+`v1.1.7` `modified`
+
+移动 `hookInstance` 参数到 `MemberBaseFinder.MemberHookerManager`
+
**Function Illustrate**
> `Constructor` 查找类。
@@ -328,7 +332,7 @@ inner class Process internal constructor(internal val isNoSuch: Boolean, interna
**Function Illustrate**
-> `Constructor` 查找结果处理类,为 `hookInstance` 提供。
+> `Constructor` 查找结果处理类,为 `hookManager` 提供。
### result - method
@@ -372,7 +376,7 @@ fun all(): Process
**Function Illustrate**
-> 设置全部查找条件匹配的多个 `Constructor` 实例结果到 `hookInstance`。
+> 设置全部查找条件匹配的多个 `Constructor` 实例结果到 `hookManager`。
### remedys - method
@@ -723,7 +727,7 @@ fun ignored(): Result
> 忽略异常并停止打印任何错误日志。
-若 `isNotIgnoredHookingFailure` 为 `false` 则自动忽略。
+若 `MemberBaseFinder.MemberHookerManager.isNotIgnoredNoSuchMemberFailure` 为 `false` 则自动忽略。
::: warning
diff --git a/docs-source/src/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder.md b/docs-source/src/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder.md
index 394487d8..e190eb97 100644
--- a/docs-source/src/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder.md
+++ b/docs-source/src/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder.md
@@ -13,7 +13,7 @@ You can use the **Chrome Translation Plugin** to translate entire pages for refe
# FieldFinder - class
```kotlin:no-line-numbers
-class FieldFinder internal constructor(override val hookInstance: YukiMemberHookCreator.MemberHookCreator?, override val classSet: Class<*>?) : MemberBaseFinder
+class FieldFinder internal constructor(override val classSet: Class<*>?) : MemberBaseFinder
```
**Change Records**
@@ -28,6 +28,10 @@ class FieldFinder internal constructor(override val hookInstance: YukiMemberHook
合并到 `MemberBaseFinder`
+`v1.1.7` `modified`
+
+移动 `hookInstance` 参数到 `MemberBaseFinder.MemberHookerManager`
+
**Function Illustrate**
> `Field` 查找类。
@@ -582,7 +586,7 @@ fun ignored(): Result
> 忽略异常并停止打印任何错误日志。
-若 `isNotIgnoredHookingFailure` 为 `false` 则自动忽略。
+若 `MemberBaseFinder.MemberHookerManager.isNotIgnoredNoSuchMemberFailure` 为 `false` 则自动忽略。
::: warning
diff --git a/docs-source/src/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.md b/docs-source/src/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.md
index d2aca4af..64e5f348 100644
--- a/docs-source/src/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.md
+++ b/docs-source/src/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.md
@@ -13,7 +13,7 @@ You can use the **Chrome Translation Plugin** to translate entire pages for refe
# MethodFinder - class
```kotlin:no-line-numbers
-class MethodFinder internal constructor(override val hookInstance: YukiMemberHookCreator.MemberHookCreator?, override val classSet: Class<*>) : MemberBaseFinder
+class MethodFinder internal constructor(override val classSet: Class<*>) : MemberBaseFinder
```
**Change Records**
@@ -28,6 +28,10 @@ class MethodFinder internal constructor(override val hookInstance: YukiMemberHoo
合并到 `MemberBaseFinder`
+`v1.1.7` `modified`
+
+移动 `hookInstance` 参数到 `MemberBaseFinder.MemberHookerManager`
+
**Function Illustrate**
> `Method` 查找类。
@@ -472,7 +476,7 @@ inner class Process internal constructor(internal val isNoSuch: Boolean, interna
**Function Illustrate**
-> `Method` 查找结果处理类,为 `hookInstance` 提供。
+> `Method` 查找结果处理类,为 `hookManager` 提供。
### result - method
@@ -516,7 +520,7 @@ fun all(): Process
**Function Illustrate**
-> 设置全部查找条件匹配的多个 `Method` 实例结果到 `hookInstance`。
+> 设置全部查找条件匹配的多个 `Method` 实例结果到 `hookManager`。
### remedys - method
@@ -853,7 +857,7 @@ fun ignored(): Result
> 忽略异常并停止打印任何错误日志。
-若 `isNotIgnoredHookingFailure` 为 `false` 则自动忽略。
+若 `MemberBaseFinder.MemberHookerManager.isNotIgnoredNoSuchMemberFailure` 为 `false` 则自动忽略。
::: warning
diff --git a/docs-source/src/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.md b/docs-source/src/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.md
index a05707ea..761baa7e 100644
--- a/docs-source/src/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.md
+++ b/docs-source/src/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.md
@@ -5,7 +5,7 @@ pageClass: code-page
# ConstructorFinder - class
```kotlin:no-line-numbers
-class ConstructorFinder internal constructor(override val hookInstance: YukiMemberHookCreator.MemberHookCreator?, override val classSet: Class<*>) : MemberBaseFinder
+class ConstructorFinder internal constructor(override val classSet: Class<*>) : MemberBaseFinder
```
**变更记录**
@@ -20,6 +20,10 @@ class ConstructorFinder internal constructor(override val hookInstance: YukiMemb
合并到 `MemberBaseFinder`
+`v1.1.7` `修改`
+
+移动 `hookInstance` 参数到 `MemberBaseFinder.MemberHookerManager`
+
**功能描述**
> `Constructor` 查找类。
@@ -320,7 +324,7 @@ inner class Process internal constructor(internal val isNoSuch: Boolean, interna
**功能描述**
-> `Constructor` 查找结果处理类,为 `hookInstance` 提供。
+> `Constructor` 查找结果处理类,为 `hookManager` 提供。
### result - method
@@ -364,7 +368,7 @@ fun all(): Process
**功能描述**
-> 设置全部查找条件匹配的多个 `Constructor` 实例结果到 `hookInstance`。
+> 设置全部查找条件匹配的多个 `Constructor` 实例结果到 `hookManager`。
### remedys - method
@@ -715,7 +719,7 @@ fun ignored(): Result
> 忽略异常并停止打印任何错误日志。
-若 `isNotIgnoredHookingFailure` 为 `false` 则自动忽略。
+若 `MemberBaseFinder.MemberHookerManager.isNotIgnoredNoSuchMemberFailure` 为 `false` 则自动忽略。
::: warning
diff --git a/docs-source/src/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder.md b/docs-source/src/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder.md
index 9d6e76d1..035d5e52 100644
--- a/docs-source/src/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder.md
+++ b/docs-source/src/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder.md
@@ -5,7 +5,7 @@ pageClass: code-page
# FieldFinder - class
```kotlin:no-line-numbers
-class FieldFinder internal constructor(override val hookInstance: YukiMemberHookCreator.MemberHookCreator?, override val classSet: Class<*>?) : MemberBaseFinder
+class FieldFinder internal constructor(override val classSet: Class<*>?) : MemberBaseFinder
```
**变更记录**
@@ -20,6 +20,10 @@ class FieldFinder internal constructor(override val hookInstance: YukiMemberHook
合并到 `MemberBaseFinder`
+`v1.1.7` `修改`
+
+移动 `hookInstance` 参数到 `MemberBaseFinder.MemberHookerManager`
+
**功能描述**
> `Field` 查找类。
@@ -574,7 +578,7 @@ fun ignored(): Result
> 忽略异常并停止打印任何错误日志。
-若 `isNotIgnoredHookingFailure` 为 `false` 则自动忽略。
+若 `MemberBaseFinder.MemberHookerManager.isNotIgnoredNoSuchMemberFailure` 为 `false` 则自动忽略。
::: warning
diff --git a/docs-source/src/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.md b/docs-source/src/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.md
index 41ae6b4c..0660e69c 100644
--- a/docs-source/src/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.md
+++ b/docs-source/src/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.md
@@ -5,7 +5,7 @@ pageClass: code-page
# MethodFinder - class
```kotlin:no-line-numbers
-class MethodFinder internal constructor(override val hookInstance: YukiMemberHookCreator.MemberHookCreator?, override val classSet: Class<*>) : MemberBaseFinder
+class MethodFinder internal constructor(override val classSet: Class<*>) : MemberBaseFinder
```
**变更记录**
@@ -20,6 +20,10 @@ class MethodFinder internal constructor(override val hookInstance: YukiMemberHoo
合并到 `MemberBaseFinder`
+`v1.1.7` `修改`
+
+移动 `hookInstance` 参数到 `MemberBaseFinder.MemberHookerManager`
+
**功能描述**
> `Method` 查找类。
@@ -464,7 +468,7 @@ inner class Process internal constructor(internal val isNoSuch: Boolean, interna
**功能描述**
-> `Method` 查找结果处理类,为 `hookInstance` 提供。
+> `Method` 查找结果处理类,为 `hookManager` 提供。
### result - method
@@ -508,7 +512,7 @@ fun all(): Process
**功能描述**
-> 设置全部查找条件匹配的多个 `Method` 实例结果到 `hookInstance`。
+> 设置全部查找条件匹配的多个 `Method` 实例结果到 `hookManager`。
### remedys - method
@@ -845,7 +849,7 @@ fun ignored(): Result
> 忽略异常并停止打印任何错误日志。
-若 `isNotIgnoredHookingFailure` 为 `false` 则自动忽略。
+若 `MemberBaseFinder.MemberHookerManager.isNotIgnoredNoSuchMemberFailure` 为 `false` 则自动忽略。
::: warning
diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator.kt
index 25c860bf..b6f49a7e 100644
--- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator.kt
+++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator.kt
@@ -371,10 +371,10 @@ class YukiMemberHookCreator @PublishedApi internal constructor(
*/
inline fun method(initiate: MethodConditions) = runCatching {
isHookMemberSetup = true
- MethodFinder(hookInstance = this, hookClass.instance).apply(initiate).apply { finder = this }.process()
+ MethodFinder.fromHooker(hookInstance = this, hookClass.instance).apply(initiate).apply { finder = this }.process()
}.getOrElse {
findingThrowable = it
- MethodFinder(hookInstance = this).denied(it)
+ MethodFinder.fromHooker(hookInstance = this).denied(it)
}
/**
@@ -386,10 +386,10 @@ class YukiMemberHookCreator @PublishedApi internal constructor(
*/
inline fun constructor(initiate: ConstructorConditions = { emptyParam() }) = runCatching {
isHookMemberSetup = true
- ConstructorFinder(hookInstance = this, hookClass.instance).apply(initiate).apply { finder = this }.process()
+ ConstructorFinder.fromHooker(hookInstance = this, hookClass.instance).apply(initiate).apply { finder = this }.process()
}.getOrElse {
findingThrowable = it
- ConstructorFinder(hookInstance = this).denied(it)
+ ConstructorFinder.fromHooker(hookInstance = this).denied(it)
}
/**
@@ -398,8 +398,8 @@ class YukiMemberHookCreator @PublishedApi internal constructor(
* @return [FieldFinder.Result]
*/
inline fun HookParam.field(initiate: FieldConditions) =
- if (hookClass.instance == null) FieldFinder(hookInstance = this@MemberHookCreator).failure(hookClass.throwable)
- else FieldFinder(hookInstance = this@MemberHookCreator, hookClass.instance).apply(initiate).build()
+ if (hookClass.instance == null) FieldFinder.fromHooker(hookInstance = this@MemberHookCreator).failure(hookClass.throwable)
+ else FieldFinder.fromHooker(hookInstance = this@MemberHookCreator, hookClass.instance).apply(initiate).build()
/**
* 使用当前 [hookClass] 查找并得到 [Method]
@@ -407,8 +407,8 @@ class YukiMemberHookCreator @PublishedApi internal constructor(
* @return [MethodFinder.Result]
*/
inline fun HookParam.method(initiate: MethodConditions) =
- if (hookClass.instance == null) MethodFinder(hookInstance = this@MemberHookCreator).failure(hookClass.throwable)
- else MethodFinder(hookInstance = this@MemberHookCreator, hookClass.instance).apply(initiate).build()
+ if (hookClass.instance == null) MethodFinder.fromHooker(hookInstance = this@MemberHookCreator).failure(hookClass.throwable)
+ else MethodFinder.fromHooker(hookInstance = this@MemberHookCreator, hookClass.instance).apply(initiate).build()
/**
* 使用当前 [hookClass] 查找并得到 [Constructor]
@@ -416,8 +416,8 @@ class YukiMemberHookCreator @PublishedApi internal constructor(
* @return [ConstructorFinder.Result]
*/
inline fun HookParam.constructor(initiate: ConstructorConditions = { emptyParam() }) =
- if (hookClass.instance == null) ConstructorFinder(hookInstance = this@MemberHookCreator).failure(hookClass.throwable)
- else ConstructorFinder(hookInstance = this@MemberHookCreator, hookClass.instance).apply(initiate).build()
+ if (hookClass.instance == null) ConstructorFinder.fromHooker(hookInstance = this@MemberHookCreator).failure(hookClass.throwable)
+ else ConstructorFinder.fromHooker(hookInstance = this@MemberHookCreator, hookClass.instance).apply(initiate).build()
/**
* 注入要 Hook 的 [Method]、[Constructor] (嵌套 Hook)
diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/base/MemberBaseFinder.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/base/MemberBaseFinder.kt
index f2f17939..8658958c 100644
--- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/base/MemberBaseFinder.kt
+++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/base/MemberBaseFinder.kt
@@ -43,12 +43,10 @@ import java.lang.reflect.Method
/**
* 这是 [Member] 查找类功能的基本类实现
* @param tag 当前查找类的标识
- * @param hookInstance 当前 Hook 实例
* @param classSet 当前需要查找的 [Class] 实例
*/
abstract class MemberBaseFinder internal constructor(
private val tag: String,
- @PublishedApi internal open val hookInstance: YukiMemberHookCreator.MemberHookCreator? = null,
@PublishedApi internal open val classSet: Class<*>? = null
) : BaseFinder() {
@@ -58,31 +56,20 @@ abstract class MemberBaseFinder internal constructor(
internal const val CLASSSET_IS_NULL = "classSet is null"
}
+ /** 当前 [MemberHookerManager] */
+ @PublishedApi
+ internal var hookerManager = MemberHookerManager()
+
/** 是否使用了重查找功能 */
@PublishedApi
internal var isUsingRemedyPlan = false
- /** 是否将结果设置到目标 [YukiMemberHookCreator.MemberHookCreator] */
- internal var isBindToHooker = false
-
/** 是否开启忽略错误警告功能 */
internal var isShutErrorPrinting = false
/** 当前找到的 [Member] 数组 */
internal var memberInstances = HashSet()
- /**
- * 获取当前使用的 TAG
- * @return [String] 使用的 TAG
- */
- internal val hookTag get() = hookInstance?.tag ?: "FinderMode"
-
- /**
- * 判断是否没有设置 Hook 过程中 方法、构造方法、变量 找不到的任何异常拦截
- * @return [Boolean] 没有设置任何异常拦截
- */
- internal val isNotIgnoredNoSuchMemberFailure get() = hookInstance?.isNotIgnoredNoSuchMemberFailure ?: true
-
/** 需要输出的日志内容 */
private var loggingContent: Pair? = null
@@ -122,13 +109,13 @@ abstract class MemberBaseFinder internal constructor(
internal fun onFailureMsg(msg: String = "", throwable: Throwable? = null, isAlwaysPrint: Boolean = false) {
/** 创建日志 */
fun build() {
- if (isNotIgnoredNoSuchMemberFailure && isUsingRemedyPlan.not() && isShutErrorPrinting.not())
+ if (hookerManager.isNotIgnoredNoSuchMemberFailure && isUsingRemedyPlan.not() && isShutErrorPrinting.not())
loggingContent = Pair(msg, throwable)
}
/** 判断是否为 [CLASSSET_IS_NULL] */
if (throwable?.message == CLASSSET_IS_NULL) return
/** 判断绑定到 Hooker 时仅创建日志 */
- if (isBindToHooker) return await { build() }.unit()
+ if (hookerManager.instance != null) return await { build() }.unit()
/** 判断始终输出日志或等待结果后输出日志 */
if (isAlwaysPrint) build().run { printLogIfExist() }
else await { build().run { printLogIfExist() } }
@@ -137,7 +124,7 @@ abstract class MemberBaseFinder internal constructor(
/** 存在日志时输出日志 */
internal fun printLogIfExist() {
if (loggingContent != null) yLoggerE(
- msg = "NoSuch$tag happend in [$classSet] ${loggingContent?.first} [${hookTag}]",
+ msg = "NoSuch$tag happend in [$classSet] ${loggingContent?.first}${hookerManager.tailTag}",
e = loggingContent?.second
)
/** 仅输出一次 - 然后清掉日志 */
@@ -149,7 +136,8 @@ abstract class MemberBaseFinder internal constructor(
* @param msg 调试日志内容
*/
internal fun onDebuggingMsg(msg: String) {
- if (YukiHookAPI.Configs.isDebug && HookApiCategoryHelper.hasAvailableHookApi && hookInstance != null) yLoggerI(msg = msg)
+ if (YukiHookAPI.Configs.isDebug && HookApiCategoryHelper.hasAvailableHookApi && hookerManager.instance != null)
+ yLoggerI(msg = "$msg${hookerManager.tailTag}")
}
/**
@@ -170,4 +158,46 @@ abstract class MemberBaseFinder internal constructor(
*/
@YukiPrivateApi
abstract fun denied(throwable: Throwable?): BaseResult
+
+ /**
+ * 当前 Hooker 管理实现类
+ */
+ internal inner class MemberHookerManager {
+
+ /** 当前 Hooker */
+ internal var instance: YukiMemberHookCreator.MemberHookCreator? = null
+
+ /** 当前 [Member] 是否设置到当前 Hooker */
+ internal var isMemberBinded = false
+
+ /**
+ * 判断是否没有设置 Hook 过程中 方法、构造方法、变量 找不到的任何异常拦截
+ * @return [Boolean] 没有设置任何异常拦截
+ */
+ internal val isNotIgnoredNoSuchMemberFailure get() = instance?.isNotIgnoredNoSuchMemberFailure ?: true
+
+ /**
+ * 获取当前日志尾部打印的 TAG 用于标识当前 Hook 实例
+ * @return [String]
+ */
+ internal val tailTag get() = instance?.tag?.let { if (it.isNotBlank()) " [$it]" else "" } ?: ""
+
+ /**
+ * 绑定当前 [Member] 到当前 Hooker
+ * @param member 当前 [Member]
+ */
+ internal fun bindMember(member: Member?) {
+ instance?.members?.clear()
+ member?.also { instance?.members?.add(it) }
+ }
+
+ /**
+ * 绑定 [Member] 数组到当前 Hooker
+ * @param members 当前 [Member] 数组
+ */
+ internal fun bindMembers(members: HashSet) {
+ instance?.members?.clear()
+ members.forEach { instance?.members?.add(it) }
+ }
+ }
}
\ No newline at end of file
diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.kt
index 3fab5b6f..f5d99cc8 100644
--- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.kt
+++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.kt
@@ -40,7 +40,6 @@ import com.highcapable.yukihookapi.hook.core.finder.type.factory.ConstructorCond
import com.highcapable.yukihookapi.hook.core.finder.type.factory.CountConditions
import com.highcapable.yukihookapi.hook.core.finder.type.factory.ModifierConditions
import com.highcapable.yukihookapi.hook.core.finder.type.factory.ObjectsConditions
-import com.highcapable.yukihookapi.hook.factory.checkingInternal
import com.highcapable.yukihookapi.hook.factory.hasExtends
import com.highcapable.yukihookapi.hook.log.yLoggerW
import com.highcapable.yukihookapi.hook.type.defined.UndefinedType
@@ -54,13 +53,24 @@ import java.lang.reflect.Member
* [Constructor] 查找类
*
* 可通过指定类型查找指定 [Constructor] 或一组 [Constructor]
- * @param hookInstance 当前 Hook 实例 - 填写后将自动设置 [YukiMemberHookCreator.MemberHookCreator.members]
* @param classSet 当前需要查找的 [Class] 实例
*/
-class ConstructorFinder @PublishedApi internal constructor(
- @PublishedApi override val hookInstance: YukiMemberHookCreator.MemberHookCreator? = null,
- @PublishedApi override val classSet: Class<*>? = null
-) : MemberBaseFinder(tag = "Constructor", hookInstance, classSet) {
+class ConstructorFinder @PublishedApi internal constructor(@PublishedApi override val classSet: Class<*>? = null) :
+ MemberBaseFinder(tag = "Constructor", classSet) {
+
+ @PublishedApi
+ internal companion object {
+
+ /**
+ * 通过 [YukiMemberHookCreator.MemberHookCreator] 创建 [Constructor] 查找类
+ * @param hookInstance 当前 Hooker
+ * @param classSet 当前需要查找的 [Class] 实例
+ * @return [ConstructorFinder]
+ */
+ @PublishedApi
+ internal fun fromHooker(hookInstance: YukiMemberHookCreator.MemberHookCreator, classSet: Class<*>? = null) =
+ ConstructorFinder(classSet).apply { hookerManager.instance = hookInstance }
+ }
@PublishedApi
override var rulesData = ConstructorRulesData()
@@ -241,36 +251,27 @@ class ConstructorFinder @PublishedApi internal constructor(
/**
* 设置实例
- * @param isBind 是否将结果设置到目标 [YukiMemberHookCreator.MemberHookCreator]
* @param constructors 当前找到的 [Constructor] 数组
*/
- private fun setInstance(isBind: Boolean, constructors: HashSet>) {
+ private fun setInstance(constructors: HashSet>) {
memberInstances.clear()
- val result = constructors.takeIf { it.isNotEmpty() }?.onEach { memberInstances.add(it) }?.first()
- if (isBind) hookInstance?.members?.apply {
- clear()
- result?.also { add(it) }
- }
+ constructors.takeIf { it.isNotEmpty() }?.onEach { memberInstances.add(it) }
+ ?.first()?.apply { if (hookerManager.isMemberBinded) hookerManager.bindMember(member = this) }
}
- /**
- * 得到 [Constructor] 结果
- * @param isBind 是否将结果设置到目标 [YukiMemberHookCreator.MemberHookCreator]
- */
- private fun build(isBind: Boolean) {
+ /** 得到 [Constructor] 结果 */
+ private fun internalBuild() {
if (classSet == null) error(CLASSSET_IS_NULL)
- classSet.checkingInternal()
runBlocking {
- isBindToHooker = isBind
- setInstance(isBind, result)
+ setInstance(result)
}.result { ms ->
- memberInstances.takeIf { it.isNotEmpty() }?.forEach { onDebuggingMsg(msg = "Find Constructor [$it] takes ${ms}ms [${hookTag}]") }
+ memberInstances.takeIf { it.isNotEmpty() }?.forEach { onDebuggingMsg(msg = "Find Constructor [$it] takes ${ms}ms") }
}
}
@YukiPrivateApi
override fun build() = runCatching {
- build(isBind = false)
+ internalBuild()
Result()
}.getOrElse {
onFailureMsg(throwable = it)
@@ -279,7 +280,8 @@ class ConstructorFinder @PublishedApi internal constructor(
@YukiPrivateApi
override fun process() = runCatching {
- build(isBind = true)
+ hookerManager.isMemberBinded = true
+ internalBuild()
Process()
}.getOrElse {
onFailureMsg(throwable = it)
@@ -311,8 +313,11 @@ class ConstructorFinder @PublishedApi internal constructor(
* 若最后依然失败 - 将停止查找并输出错误日志
* @param initiate 方法体
*/
- inline fun constructor(initiate: ConstructorConditions) =
- Result().apply { remedyPlans.add(Pair(ConstructorFinder(hookInstance, classSet).apply(initiate), this)) }
+ inline fun constructor(initiate: ConstructorConditions) = Result().apply {
+ remedyPlans.add(Pair(ConstructorFinder(classSet).apply {
+ hookerManager = this@ConstructorFinder.hookerManager
+ }.apply(initiate), this))
+ }
/** 开始重查找 */
@PublishedApi
@@ -324,16 +329,15 @@ class ConstructorFinder @PublishedApi internal constructor(
remedyPlans.forEachIndexed { p, it ->
runCatching {
runBlocking {
- setInstance(isBindToHooker, it.first.result)
+ setInstance(it.first.result)
}.result { ms ->
- memberInstances.takeIf { it.isNotEmpty() }
- ?.forEach { onDebuggingMsg(msg = "Find Constructor [$it] takes ${ms}ms [${hookTag}]") }
+ memberInstances.takeIf { it.isNotEmpty() }?.forEach { onDebuggingMsg(msg = "Find Constructor [$it] takes ${ms}ms") }
}
isFindSuccess = true
it.second.onFindCallback?.invoke(memberInstances.constructors())
remedyPlansCallback?.invoke()
memberInstances.takeIf { it.isNotEmpty() }
- ?.forEach { onDebuggingMsg(msg = "Constructor [$it] trying ${p + 1} times success by RemedyPlan [${hookTag}]") }
+ ?.forEach { onDebuggingMsg(msg = "Constructor [$it] trying ${p + 1} times success by RemedyPlan") }
return@run
}.onFailure {
lastError = it
@@ -348,7 +352,7 @@ class ConstructorFinder @PublishedApi internal constructor(
)
remedyPlans.clear()
}
- } else yLoggerW(msg = "RemedyPlan is empty, forgot it? [${hookTag}]")
+ } else yLoggerW(msg = "RemedyPlan is empty, forgot it?${hookerManager.tailTag}")
}
/**
@@ -372,7 +376,7 @@ class ConstructorFinder @PublishedApi internal constructor(
}
/**
- * [Constructor] 查找结果处理类 - 为 [hookInstance] 提供
+ * [Constructor] 查找结果处理类 - 为 [hookerManager] 提供
* @param isNoSuch 是否没有找到 [Constructor] - 默认否
* @param throwable 错误信息
*/
@@ -389,14 +393,11 @@ class ConstructorFinder @PublishedApi internal constructor(
inline fun result(initiate: Process.() -> Unit) = apply(initiate)
/**
- * 设置全部查找条件匹配的多个 [Constructor] 实例结果到 [hookInstance]
+ * 设置全部查找条件匹配的多个 [Constructor] 实例结果到 [hookerManager]
* @return [Process] 可继续向下监听
*/
fun all(): Process {
- fun HashSet.bind() = takeIf { it.isNotEmpty() }?.apply {
- hookInstance?.members?.clear()
- forEach { hookInstance?.members?.add(it) }
- }.unit()
+ fun HashSet.bind() = takeIf { it.isNotEmpty() }?.apply { hookerManager.bindMembers(members = this) }.unit()
if (isUsingRemedyPlan)
remedyPlansCallback = { memberInstances.bind() }
else memberInstances.bind()
@@ -554,7 +555,7 @@ class ConstructorFinder @PublishedApi internal constructor(
/**
* 忽略异常并停止打印任何错误日志
*
- * - 若 [isNotIgnoredNoSuchMemberFailure] 为 false 则自动忽略
+ * - 若 [MemberBaseFinder.MemberHookerManager.isNotIgnoredNoSuchMemberFailure] 为 false 则自动忽略
*
* - ❗此时若要监听异常结果 - 你需要手动实现 [onNoSuchConstructor] 方法
* @return [Result] 可继续向下监听
diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder.kt
index cae0c855..87a1b707 100644
--- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder.kt
+++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder.kt
@@ -41,11 +41,9 @@ import com.highcapable.yukihookapi.hook.core.finder.type.factory.FieldConditions
import com.highcapable.yukihookapi.hook.core.finder.type.factory.ModifierConditions
import com.highcapable.yukihookapi.hook.core.finder.type.factory.NameConditions
import com.highcapable.yukihookapi.hook.core.finder.type.factory.ObjectConditions
-import com.highcapable.yukihookapi.hook.factory.checkingInternal
import com.highcapable.yukihookapi.hook.factory.current
import com.highcapable.yukihookapi.hook.factory.hasExtends
import com.highcapable.yukihookapi.hook.log.yLoggerW
-import com.highcapable.yukihookapi.hook.utils.await
import com.highcapable.yukihookapi.hook.utils.runBlocking
import java.lang.reflect.Field
@@ -53,13 +51,24 @@ import java.lang.reflect.Field
* [Field] 查找类
*
* 可通过指定类型查找指定 [Field] 或一组 [Field]
- * @param hookInstance 当前 Hook 实例
* @param classSet 当前需要查找的 [Class] 实例
*/
-class FieldFinder @PublishedApi internal constructor(
- @PublishedApi override val hookInstance: YukiMemberHookCreator.MemberHookCreator? = null,
- @PublishedApi override val classSet: Class<*>? = null
-) : MemberBaseFinder(tag = "Field", hookInstance, classSet) {
+class FieldFinder @PublishedApi internal constructor(@PublishedApi override val classSet: Class<*>? = null) :
+ MemberBaseFinder(tag = "Field", classSet) {
+
+ @PublishedApi
+ internal companion object {
+
+ /**
+ * 通过 [YukiMemberHookCreator.MemberHookCreator] 创建 [Field] 查找类
+ * @param hookInstance 当前 Hooker
+ * @param classSet 当前需要查找的 [Class] 实例
+ * @return [FieldFinder]
+ */
+ @PublishedApi
+ internal fun fromHooker(hookInstance: YukiMemberHookCreator.MemberHookCreator, classSet: Class<*>? = null) =
+ FieldFinder(classSet).apply { hookerManager.instance = hookInstance }
+ }
@PublishedApi
override var rulesData = FieldRulesData()
@@ -205,18 +214,24 @@ class FieldFinder @PublishedApi internal constructor(
fields.takeIf { it.isNotEmpty() }?.forEach { memberInstances.add(it) }
}
+ /** 得到 [Field] 结果 */
+ private fun internalBuild() {
+ if (classSet == null) error(CLASSSET_IS_NULL)
+ runBlocking {
+ setInstance(result)
+ }.result { ms ->
+ memberInstances.takeIf { it.isNotEmpty() }?.forEach { onDebuggingMsg(msg = "Find Field [$it] takes ${ms}ms") }
+ }
+ }
+
@YukiPrivateApi
override fun build() = runCatching {
- if (classSet != null) {
- classSet.checkingInternal()
- runBlocking {
- setInstance(result)
- }.result { ms ->
- memberInstances.takeIf { it.isNotEmpty() }?.forEach { onDebuggingMsg(msg = "Find Field [$it] takes ${ms}ms [${hookTag}]") }
- }
- Result()
- } else Result(isNoSuch = true, Throwable(CLASSSET_IS_NULL))
- }.getOrElse { e -> Result(isNoSuch = true, e).await { onFailureMsg(throwable = e) } }
+ internalBuild()
+ Result()
+ }.getOrElse {
+ onFailureMsg(throwable = it)
+ Result(isNoSuch = true, it)
+ }
@YukiPrivateApi
override fun process() = error("FieldFinder does not contain this usage")
@@ -247,8 +262,11 @@ class FieldFinder @PublishedApi internal constructor(
* @param initiate 方法体
* @return [Result] 结果
*/
- inline fun field(initiate: FieldConditions) =
- Result().apply { remedyPlans.add(Pair(FieldFinder(hookInstance, classSet).apply(initiate), this)) }
+ inline fun field(initiate: FieldConditions) = Result().apply {
+ remedyPlans.add(Pair(FieldFinder(classSet).apply {
+ hookerManager = this@FieldFinder.hookerManager
+ }.apply(initiate), this))
+ }
/** 开始重查找 */
@PublishedApi
@@ -263,13 +281,13 @@ class FieldFinder @PublishedApi internal constructor(
setInstance(it.first.result)
}.result { ms ->
memberInstances.takeIf { it.isNotEmpty() }
- ?.forEach { onDebuggingMsg(msg = "Find Field [$it] takes ${ms}ms [${hookTag}]") }
+ ?.forEach { onDebuggingMsg(msg = "Find Field [$it] takes ${ms}ms") }
}
isFindSuccess = true
it.second.onFindCallback?.invoke(memberInstances.fields())
remedyPlansCallback?.invoke()
memberInstances.takeIf { it.isNotEmpty() }
- ?.forEach { onDebuggingMsg(msg = "Field [$it] trying ${p + 1} times success by RemedyPlan [${hookTag}]") }
+ ?.forEach { onDebuggingMsg(msg = "Field [$it] trying ${p + 1} times success by RemedyPlan") }
return@run
}.onFailure {
lastError = it
@@ -284,7 +302,7 @@ class FieldFinder @PublishedApi internal constructor(
)
remedyPlans.clear()
}
- } else yLoggerW(msg = "RemedyPlan is empty, forgot it? [${hookTag}]")
+ } else yLoggerW(msg = "RemedyPlan is empty, forgot it?${hookerManager.tailTag}")
}
/**
@@ -440,7 +458,7 @@ class FieldFinder @PublishedApi internal constructor(
/**
* 忽略异常并停止打印任何错误日志
*
- * - 若 [isNotIgnoredNoSuchMemberFailure] 为 false 则自动忽略
+ * - 若 [MemberBaseFinder.MemberHookerManager.isNotIgnoredNoSuchMemberFailure] 为 false 则自动忽略
*
* - ❗此时若要监听异常结果 - 你需要手动实现 [onNoSuchField] 方法
* @return [Result] 可继续向下监听
diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.kt
index 46525b5a..8904edbf 100644
--- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.kt
+++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.kt
@@ -38,7 +38,6 @@ import com.highcapable.yukihookapi.hook.core.finder.base.MemberBaseFinder
import com.highcapable.yukihookapi.hook.core.finder.members.data.MethodRulesData
import com.highcapable.yukihookapi.hook.core.finder.tools.ReflectionTool
import com.highcapable.yukihookapi.hook.core.finder.type.factory.*
-import com.highcapable.yukihookapi.hook.factory.checkingInternal
import com.highcapable.yukihookapi.hook.factory.hasExtends
import com.highcapable.yukihookapi.hook.log.yLoggerW
import com.highcapable.yukihookapi.hook.type.defined.UndefinedType
@@ -52,13 +51,24 @@ import java.lang.reflect.Method
* [Method] 查找类
*
* 可通过指定类型查找指定 [Method] 或一组 [Method]
- * @param hookInstance 当前 Hook 实例 - 填写后将自动设置 [YukiMemberHookCreator.MemberHookCreator.members]
* @param classSet 当前需要查找的 [Class] 实例
*/
-class MethodFinder @PublishedApi internal constructor(
- @PublishedApi override val hookInstance: YukiMemberHookCreator.MemberHookCreator? = null,
- @PublishedApi override val classSet: Class<*>? = null
-) : MemberBaseFinder(tag = "Method", hookInstance, classSet) {
+class MethodFinder @PublishedApi internal constructor(@PublishedApi override val classSet: Class<*>? = null) :
+ MemberBaseFinder(tag = "Method", classSet) {
+
+ @PublishedApi
+ internal companion object {
+
+ /**
+ * 通过 [YukiMemberHookCreator.MemberHookCreator] 创建 [Method] 查找类
+ * @param hookInstance 当前 Hooker
+ * @param classSet 当前需要查找的 [Class] 实例
+ * @return [MethodFinder]
+ */
+ @PublishedApi
+ internal fun fromHooker(hookInstance: YukiMemberHookCreator.MemberHookCreator, classSet: Class<*>? = null) =
+ MethodFinder(classSet).apply { hookerManager.instance = hookInstance }
+ }
@PublishedApi
override var rulesData = MethodRulesData()
@@ -329,36 +339,27 @@ class MethodFinder @PublishedApi internal constructor(
/**
* 设置实例
- * @param isBind 是否将结果设置到目标 [YukiMemberHookCreator.MemberHookCreator]
* @param methods 当前找到的 [Method] 数组
*/
- private fun setInstance(isBind: Boolean, methods: HashSet) {
+ private fun setInstance(methods: HashSet) {
memberInstances.clear()
- val result = methods.takeIf { it.isNotEmpty() }?.onEach { memberInstances.add(it) }?.first()
- if (isBind) hookInstance?.members?.apply {
- clear()
- result?.also { add(it) }
- }
+ methods.takeIf { it.isNotEmpty() }?.onEach { memberInstances.add(it) }
+ ?.first()?.apply { if (hookerManager.isMemberBinded) hookerManager.bindMember(member = this) }
}
- /**
- * 得到 [Method] 结果
- * @param isBind 是否将结果设置到目标 [YukiMemberHookCreator.MemberHookCreator]
- */
- private fun build(isBind: Boolean) {
+ /** 得到 [Method] 结果 */
+ private fun internalBuild() {
if (classSet == null) error(CLASSSET_IS_NULL)
- classSet.checkingInternal()
runBlocking {
- isBindToHooker = isBind
- setInstance(isBind, result)
+ setInstance(result)
}.result { ms ->
- memberInstances.takeIf { it.isNotEmpty() }?.forEach { onDebuggingMsg(msg = "Find Method [$it] takes ${ms}ms [${hookTag}]") }
+ memberInstances.takeIf { it.isNotEmpty() }?.forEach { onDebuggingMsg(msg = "Find Method [$it] takes ${ms}ms") }
}
}
@YukiPrivateApi
override fun build() = runCatching {
- build(isBind = false)
+ internalBuild()
Result()
}.getOrElse {
onFailureMsg(throwable = it)
@@ -367,7 +368,8 @@ class MethodFinder @PublishedApi internal constructor(
@YukiPrivateApi
override fun process() = runCatching {
- build(isBind = true)
+ hookerManager.isMemberBinded = true
+ internalBuild()
Process()
}.getOrElse {
onFailureMsg(throwable = it)
@@ -400,8 +402,11 @@ class MethodFinder @PublishedApi internal constructor(
* @param initiate 方法体
* @return [Result] 结果
*/
- inline fun method(initiate: MethodConditions) =
- Result().apply { remedyPlans.add(Pair(MethodFinder(hookInstance, classSet).apply(initiate), this)) }
+ inline fun method(initiate: MethodConditions) = Result().apply {
+ remedyPlans.add(Pair(MethodFinder(classSet).apply {
+ hookerManager = this@MethodFinder.hookerManager
+ }.apply(initiate), this))
+ }
/** 开始重查找 */
@PublishedApi
@@ -413,16 +418,15 @@ class MethodFinder @PublishedApi internal constructor(
remedyPlans.forEachIndexed { p, it ->
runCatching {
runBlocking {
- setInstance(isBindToHooker, it.first.result)
+ setInstance(it.first.result)
}.result { ms ->
- memberInstances.takeIf { it.isNotEmpty() }
- ?.forEach { onDebuggingMsg(msg = "Find Method [$it] takes ${ms}ms [${hookTag}]") }
+ memberInstances.takeIf { it.isNotEmpty() }?.forEach { onDebuggingMsg(msg = "Find Method [$it] takes ${ms}ms") }
}
isFindSuccess = true
it.second.onFindCallback?.invoke(memberInstances.methods())
remedyPlansCallback?.invoke()
memberInstances.takeIf { it.isNotEmpty() }
- ?.forEach { onDebuggingMsg(msg = "Method [$it] trying ${p + 1} times success by RemedyPlan [${hookTag}]") }
+ ?.forEach { onDebuggingMsg(msg = "Method [$it] trying ${p + 1} times success by RemedyPlan") }
return@run
}.onFailure {
lastError = it
@@ -437,7 +441,7 @@ class MethodFinder @PublishedApi internal constructor(
)
remedyPlans.clear()
}
- } else yLoggerW(msg = "RemedyPlan is empty, forgot it? [${hookTag}]")
+ } else yLoggerW(msg = "RemedyPlan is empty, forgot it?${hookerManager.tailTag}")
}
/**
@@ -461,7 +465,7 @@ class MethodFinder @PublishedApi internal constructor(
}
/**
- * [Method] 查找结果处理类 - 为 [hookInstance] 提供
+ * [Method] 查找结果处理类 - 为 [hookerManager] 提供
* @param isNoSuch 是否没有找 [Method] - 默认否
* @param throwable 错误信息
*/
@@ -478,14 +482,11 @@ class MethodFinder @PublishedApi internal constructor(
inline fun result(initiate: Process.() -> Unit) = apply(initiate)
/**
- * 设置全部查找条件匹配的多个 [Method] 实例结果到 [hookInstance]
+ * 设置全部查找条件匹配的多个 [Method] 实例结果到 [hookerManager]
* @return [Process] 可继续向下监听
*/
fun all(): Process {
- fun HashSet.bind() = takeIf { it.isNotEmpty() }?.apply {
- hookInstance?.members?.clear()
- forEach { hookInstance?.members?.add(it) }
- }.unit()
+ fun HashSet.bind() = takeIf { it.isNotEmpty() }?.apply { hookerManager.bindMembers(members = this) }.unit()
if (isUsingRemedyPlan)
remedyPlansCallback = { memberInstances.bind() }
else memberInstances.bind()
@@ -650,7 +651,7 @@ class MethodFinder @PublishedApi internal constructor(
/**
* 忽略异常并停止打印任何错误日志
*
- * - 若 [isNotIgnoredNoSuchMemberFailure] 为 false 则自动忽略
+ * - 若 [MemberBaseFinder.MemberHookerManager.isNotIgnoredNoSuchMemberFailure] 为 false 则自动忽略
*
* - ❗此时若要监听异常结果 - 你需要手动实现 [onNoSuchMethod] 方法
* @return [Result] 可继续向下监听