Modify change hooking callback delegate parameter to fix effective immediately function in HookCompatHelper, YukiHookDelegateFactory

This commit is contained in:
2023-01-31 20:39:05 +08:00
parent c0855e089c
commit 686bcdb674
2 changed files with 36 additions and 38 deletions

View File

@@ -48,7 +48,11 @@ internal object HookCompatHelper {
* 兼容对接已 Hook 的 [Member] 接口
* @return [YukiMemberHook.HookedMember]
*/
private fun XC_MethodHook.Unhook.compat() = YukiHookCallbackDelegate.createHookedMemberCallback(hookedMethod) { unhook() }
private fun XC_MethodHook.Unhook.compat() =
YukiHookCallbackDelegate.createHookedMemberCallback(
member = { hookedMethod },
onRemove = { unhook() }
)
/**
* [HookApiCategory.ROVO89_XPOSED]
@@ -58,14 +62,12 @@ internal object HookCompatHelper {
*/
private fun XC_MethodHook.MethodHookParam.compat() =
YukiHookCallbackDelegate.createParamCallback(
member = method,
instance = thisObject,
args = args,
hasThrowable = hasThrowable(),
resultCallback = { result = it },
throwableCallback = { throwable = it },
result = result,
throwable = throwable
member = { method },
instance = { thisObject },
args = { args },
hasThrowable = { hasThrowable() },
result = { it, assign -> if (assign) result = it; result },
throwable = { it, assign -> if (assign) throwable = it; throwable }
)
/**

View File

@@ -40,54 +40,50 @@ internal object YukiHookCallbackDelegate {
/**
* 创建 [YukiMemberHook.HookedMember] 实例
* @param member 当前 [Member]
* @param removeCallback 回调解除 Hook 事件
* @param member [Member] 实例 (代理回调)
* @param onRemove 回调解除 Hook 事件 (代理回调)
* @return [YukiMemberHook.HookedMember]
*/
internal fun createHookedMemberCallback(member: Member, removeCallback: () -> Unit) =
internal fun createHookedMemberCallback(member: () -> Member?, onRemove: () -> Unit) =
object : YukiMemberHook.HookedMember() {
override val member get() = member
override val member get() = member()
override fun remove() {
removeCallback()
onRemove()
runCatching { YukiHookCacheStore.hookedMembers.remove(this) }
}
}
/**
* 创建 [YukiHookCallback.Param] 实例
* @param member [Member] 实例
* @param instance 当前实例对象
* @param args 方法、构造方法数组
* @param hasThrowable 是否存在设置过的方法调用抛出异常
* @param resultCallback 回调设置当前 Hook 方法返回值 (结果)
* @param throwableCallback 回调设置当前 Hook 方法调用抛出的异常
* @param result 当前 Hook 方法返回值 (结果)
* @param throwable 当前 Hook 方法调用抛出的异常
* @param member [Member] 实例 (代理回调)
* @param instance 当前实例对象 (代理回调)
* @param args 方法、构造方法数组 (代理回调)
* @param hasThrowable 是否存在设置过的方法调用抛出异常 (代理回调)
* @param result 当前 Hook 方法返回值 (结果) (代理回调)
* @param throwable 当前 Hook 方法调用抛出的异常 (代理回调)
* @return [YukiHookCallback.Param]
*/
internal fun createParamCallback(
member: Member?,
instance: Any?,
args: Array<Any?>?,
hasThrowable: Boolean,
resultCallback: (Any?) -> Unit,
throwableCallback: (Throwable?) -> Unit,
result: Any?,
throwable: Throwable?
member: () -> Member?,
instance: () -> Any?,
args: () -> Array<Any?>?,
hasThrowable: () -> Boolean,
result: (Any?, Boolean) -> Any?,
throwable: (Throwable?, Boolean) -> Throwable?
) = object : YukiHookCallback.Param {
override val member get() = member
override val instance get() = instance
override val args get() = args
override val hasThrowable get() = hasThrowable
override val member get() = member()
override val instance get() = instance()
override val args get() = args()
override val hasThrowable get() = hasThrowable()
override var result
get() = result
get() = result(null, false)
set(value) {
resultCallback(value)
result(value, true)
}
override var throwable
get() = throwable
get() = throwable(null, false)
set(value) {
throwableCallback(value)
throwable(value, true)
}
}
}