mirror of
https://github.com/HighCapable/YukiHookAPI.git
synced 2025-09-04 09:45:19 +08:00
fix: HookParam call timing problem and refactor HookParam
This commit is contained in:
@@ -13,7 +13,7 @@ You can use the **Chrome Translation Plugin** to translate entire pages for refe
|
||||
# HookParam <span class="symbol">- class</span>
|
||||
|
||||
```kotlin:no-line-numbers
|
||||
class HookParam internal constructor(
|
||||
class HookParam private constructor(
|
||||
private val creatorInstance: YukiMemberHookCreator,
|
||||
private var paramId: String,
|
||||
private var param: YukiHookCallback.Param?
|
||||
@@ -34,6 +34,10 @@ class HookParam internal constructor(
|
||||
|
||||
新增 `paramId` 参数
|
||||
|
||||
`v1.2.0` `modified`
|
||||
|
||||
不再开放构造方法
|
||||
|
||||
**Function Illustrate**
|
||||
|
||||
> Hook 方法、构造方法的目标对象实现类。
|
||||
|
@@ -5,7 +5,7 @@ pageClass: code-page
|
||||
# HookParam <span class="symbol">- class</span>
|
||||
|
||||
```kotlin:no-line-numbers
|
||||
class HookParam internal constructor(
|
||||
class HookParam private constructor(
|
||||
private val creatorInstance: YukiMemberHookCreator,
|
||||
private var paramId: String,
|
||||
private var param: YukiHookCallback.Param?
|
||||
@@ -26,6 +26,10 @@ class HookParam internal constructor(
|
||||
|
||||
新增 `paramId` 参数
|
||||
|
||||
`v1.2.0` `修改`
|
||||
|
||||
不再开放构造方法
|
||||
|
||||
**功能描述**
|
||||
|
||||
> Hook 方法、构造方法的目标对象实现类。
|
||||
|
@@ -585,13 +585,10 @@ class YukiMemberHookCreator internal constructor(private val packageParam: Packa
|
||||
* @return [YukiHookResult]
|
||||
*/
|
||||
private fun Member.hook(): YukiHookResult {
|
||||
/** 定义替换 Hook 的 [HookParam] */
|
||||
val replaceHookParam = HookParam(creatorInstance = this@YukiMemberHookCreator)
|
||||
|
||||
/** 定义替换 Hook 回调方法体 */
|
||||
val replaceMent = object : YukiMemberReplacement(priority.toPriority()) {
|
||||
override fun replaceHookedMember(param: Param) =
|
||||
replaceHookParam.assign(replaceHookId, param).let { assign ->
|
||||
HookParam.create(this@YukiMemberHookCreator, replaceHookId, param).let { assign ->
|
||||
runCatching {
|
||||
replaceHookCallback?.invoke(assign).also {
|
||||
checkingReturnType((param.member as? Method?)?.returnType, it?.javaClass)
|
||||
@@ -608,16 +605,10 @@ class YukiMemberHookCreator internal constructor(private val packageParam: Packa
|
||||
}
|
||||
}
|
||||
|
||||
/** 定义前 Hook 的 [HookParam] */
|
||||
val beforeHookParam = HookParam(creatorInstance = this@YukiMemberHookCreator)
|
||||
|
||||
/** 定义后 Hook 的 [HookParam] */
|
||||
val afterHookParam = HookParam(creatorInstance = this@YukiMemberHookCreator)
|
||||
|
||||
/** 定义前后 Hook 回调方法体 */
|
||||
val beforeAfterHook = object : YukiMemberHook(priority.toPriority()) {
|
||||
override fun beforeHookedMember(param: Param) {
|
||||
beforeHookParam.assign(beforeHookId, param).also { assign ->
|
||||
HookParam.create(this@YukiMemberHookCreator, beforeHookId, param).also { assign ->
|
||||
runCatching {
|
||||
beforeHookCallback?.invoke(assign)
|
||||
checkingReturnType((param.member as? Method?)?.returnType, param.result?.javaClass)
|
||||
@@ -633,7 +624,7 @@ class YukiMemberHookCreator internal constructor(private val packageParam: Packa
|
||||
}
|
||||
|
||||
override fun afterHookedMember(param: Param) {
|
||||
afterHookParam.assign(afterHookId, param).also { assign ->
|
||||
HookParam.create(this@YukiMemberHookCreator, afterHookId, param).also { assign ->
|
||||
runCatching {
|
||||
afterHookCallback?.invoke(assign)
|
||||
if (afterHookCallback != null) YLog.innerD("After Hook Member [${this@hook}] done [$tag]")
|
||||
|
@@ -46,7 +46,7 @@ import java.lang.reflect.Method
|
||||
* @param paramId 当前回调方法体 ID
|
||||
* @param param Hook 结果回调接口
|
||||
*/
|
||||
class HookParam internal constructor(
|
||||
class HookParam private constructor(
|
||||
private val creatorInstance: YukiMemberHookCreator,
|
||||
private var paramId: String = "",
|
||||
private var param: YukiHookCallback.Param? = null
|
||||
@@ -60,24 +60,22 @@ class HookParam internal constructor(
|
||||
/** [HookParam] 是否已经执行首次回调事件 */
|
||||
internal var isCallbackCalled = false
|
||||
|
||||
/**
|
||||
* 创建新的 [HookParam]
|
||||
* @param creatorInstance [YukiMemberHookCreator] 的实例对象
|
||||
* @param paramId 当前回调方法体 ID
|
||||
* @param param Hook 结果回调接口
|
||||
* @return [HookParam]
|
||||
*/
|
||||
internal fun create(creatorInstance: YukiMemberHookCreator, paramId: String, param: YukiHookCallback.Param) =
|
||||
HookParam(creatorInstance, paramId, param)
|
||||
|
||||
/** 设置 [HookParam] 执行首次回调事件 */
|
||||
internal fun invoke() {
|
||||
isCallbackCalled = true
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 在回调中设置 [HookParam] 使用的 [YukiHookCallback.Param]
|
||||
* @param paramId 当前回调方法体 ID
|
||||
* @param param Hook 结果回调接口
|
||||
* @return [HookParam]
|
||||
*/
|
||||
internal fun assign(paramId: String, param: YukiHookCallback.Param): HookParam {
|
||||
this.paramId = paramId
|
||||
this.param = param
|
||||
return this
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前 Hook 对象 [method] or [constructor] 的参数对象数组
|
||||
*
|
||||
|
Reference in New Issue
Block a user