diff --git a/docs/api/public/ConstructorFinder.md b/docs/api/public/ConstructorFinder.md index 01f0e534..dd83e454 100644 --- a/docs/api/public/ConstructorFinder.md +++ b/docs/api/public/ConstructorFinder.md @@ -165,7 +165,7 @@ inner class RemedyPlan internal constructor() #### constructor [method] ```kotlin -inline fun constructor(initiate: ConstructorFinder.() -> Unit) +inline fun constructor(initiate: ConstructorCondition) ``` **变更记录** diff --git a/docs/api/public/CurrentClass.md b/docs/api/public/CurrentClass.md index da74f5e7..c064b51b 100644 --- a/docs/api/public/CurrentClass.md +++ b/docs/api/public/CurrentClass.md @@ -33,7 +33,7 @@ fun superClass(): SuperClass ### field [method] ```kotlin -inline fun field(initiate: FieldFinder.() -> Unit): FieldFinder.Result.Instance +inline fun field(initiate: FieldCondition): FieldFinder.Result.Instance ``` **变更记录** @@ -47,7 +47,7 @@ inline fun field(initiate: FieldFinder.() -> Unit): FieldFinder.Result.Instance ### method [method] ```kotlin -inline fun method(initiate: MethodFinder.() -> Unit): MethodFinder.Result.Instance +inline fun method(initiate: MethodCondition): MethodFinder.Result.Instance ``` **变更记录** @@ -75,7 +75,7 @@ inner class SuperClass internal constructor() #### field [method] ```kotlin -inline fun field(initiate: FieldFinder.() -> Unit): FieldFinder.Result.Instance +inline fun field(initiate: FieldCondition): FieldFinder.Result.Instance ``` **变更记录** @@ -89,7 +89,7 @@ inline fun field(initiate: FieldFinder.() -> Unit): FieldFinder.Result.Instance #### method [method] ```kotlin -inline fun method(initiate: MethodFinder.() -> Unit): MethodFinder.Result.Instance +inline fun method(initiate: MethodCondition): MethodFinder.Result.Instance ``` **变更记录** diff --git a/docs/api/public/FieldFinder.md b/docs/api/public/FieldFinder.md index 414a06a1..7d2edf5a 100644 --- a/docs/api/public/FieldFinder.md +++ b/docs/api/public/FieldFinder.md @@ -185,7 +185,7 @@ inner class RemedyPlan internal constructor() #### field [method] ```kotlin -inline fun field(initiate: FieldFinder.() -> Unit): Result +inline fun field(initiate: FieldCondition): Result ``` **变更记录** diff --git a/docs/api/public/MethodFinder.md b/docs/api/public/MethodFinder.md index f262aea1..1552edb7 100644 --- a/docs/api/public/MethodFinder.md +++ b/docs/api/public/MethodFinder.md @@ -267,7 +267,7 @@ inner class RemedyPlan internal constructor() #### method [method] ```kotlin -inline fun method(initiate: MethodFinder.() -> Unit): Result +inline fun method(initiate: MethodCondition): Result ``` **变更记录** diff --git a/docs/api/public/ReflectionFactory.md b/docs/api/public/ReflectionFactory.md index bdf04d50..fc43fc76 100644 --- a/docs/api/public/ReflectionFactory.md +++ b/docs/api/public/ReflectionFactory.md @@ -170,7 +170,7 @@ if("com.example.demo.DemoClass".hasClass(customClassloader)) { ### hasField [method] ```kotlin -inline fun Class<*>.hasField(initiate: FieldFinder.() -> Unit): Boolean +inline fun Class<*>.hasField(initiate: FieldCondition): Boolean ``` **变更记录** @@ -192,7 +192,7 @@ inline fun Class<*>.hasField(initiate: FieldFinder.() -> Unit): Boolean ### hasMethod [method] ```kotlin -inline fun Class<*>.hasMethod(initiate: MethodFinder.() -> Unit): Boolean +inline fun Class<*>.hasMethod(initiate: MethodCondition): Boolean ``` **变更记录** @@ -218,7 +218,7 @@ inline fun Class<*>.hasMethod(initiate: MethodFinder.() -> Unit): Boolean ### hasConstructor [method] ```kotlin -inline fun Class<*>.hasConstructor(initiate: ConstructorFinder.() -> Unit): Boolean +inline fun Class<*>.hasConstructor(initiate: ConstructorCondition): Boolean ``` **变更记录** @@ -290,7 +290,7 @@ inline fun Member.hasModifiers(initiate: ModifierRules.() -> Unit): Boolean ### field [method] ```kotlin -inline fun Class<*>.field(initiate: FieldFinder.() -> Unit): FieldFinder.Result +inline fun Class<*>.field(initiate: FieldCondition): FieldFinder.Result ``` **变更记录** @@ -308,7 +308,7 @@ inline fun Class<*>.field(initiate: FieldFinder.() -> Unit): FieldFinder.Result ### method [method] ```kotlin -inline fun Class<*>.method(initiate: MethodFinder.() -> Unit): MethodFinder.Result +inline fun Class<*>.method(initiate: MethodCondition): MethodFinder.Result ``` **变更记录** @@ -336,7 +336,7 @@ inline fun Class<*>.method(initiate: MethodFinder.() -> Unit): MethodFinder.Resu ### constructor [method] ```kotlin -inline fun Class<*>.constructor(initiate: ConstructorFinder.() -> Unit): ConstructorFinder.Result +inline fun Class<*>.constructor(initiate: ConstructorCondition): ConstructorFinder.Result ``` **变更记录** @@ -408,7 +408,7 @@ inline fun T.current(): CurrentClass ### buildOfAny [method] ```kotlin -inline fun Class<*>.buildOfAny(vararg param: Any?, initiate: ConstructorFinder.() -> Unit): Any? +inline fun Class<*>.buildOfAny(vararg param: Any?, initiate: ConstructorCondition): Any? ``` **变更记录** @@ -426,7 +426,7 @@ inline fun Class<*>.buildOfAny(vararg param: Any?, initiate: ConstructorFinder.( ### buildOf [method] ```kotlin -inline fun Class<*>.buildOf(vararg param: Any?, initiate: ConstructorFinder.() -> Unit): T? +inline fun Class<*>.buildOf(vararg param: Any?, initiate: ConstructorCondition): T? ``` **变更记录** diff --git a/docs/api/public/YukiMemberHookCreater.md b/docs/api/public/YukiMemberHookCreater.md index 001eb1cb..64802428 100644 --- a/docs/api/public/YukiMemberHookCreater.md +++ b/docs/api/public/YukiMemberHookCreater.md @@ -251,7 +251,7 @@ fun allMembers() #### method [method] ```kotlin -inline fun method(initiate: MethodFinder.() -> Unit): MethodFinder.Result +inline fun method(initiate: MethodCondition): MethodFinder.Result ``` **变更记录** @@ -287,7 +287,7 @@ injectMember { #### constructor [method] ```kotlin -inline fun constructor(initiate: ConstructorFinder.() -> Unit): ConstructorFinder.Result +inline fun constructor(initiate: ConstructorCondition): ConstructorFinder.Result ``` **变更记录** @@ -319,7 +319,7 @@ injectMember { #### field [method] ```kotlin -inline fun HookParam.field(initiate: FieldFinder.() -> Unit): FieldFinder.Result +inline fun HookParam.field(initiate: FieldCondition): FieldFinder.Result ``` **变更记录** @@ -359,7 +359,7 @@ injectMember { #### method [method] ```kotlin -inline fun HookParam.method(initiate: MethodFinder.() -> Unit): MethodFinder.Result +inline fun HookParam.method(initiate: MethodCondition): MethodFinder.Result ``` **变更记录** @@ -377,7 +377,7 @@ inline fun HookParam.method(initiate: MethodFinder.() -> Unit): MethodFinder.Res #### constructor [method] ```kotlin -inline fun HookParam.constructor(initiate: ConstructorFinder.() -> Unit): ConstructorFinder.Result +inline fun HookParam.constructor(initiate: ConstructorCondition): ConstructorFinder.Result ``` **变更记录** diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/bean/CurrentClass.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/bean/CurrentClass.kt index 3bea799c..602c56c8 100644 --- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/bean/CurrentClass.kt +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/bean/CurrentClass.kt @@ -29,6 +29,8 @@ package com.highcapable.yukihookapi.hook.bean import com.highcapable.yukihookapi.hook.core.finder.FieldFinder import com.highcapable.yukihookapi.hook.core.finder.MethodFinder +import com.highcapable.yukihookapi.hook.factory.FieldCondition +import com.highcapable.yukihookapi.hook.factory.MethodCondition import com.highcapable.yukihookapi.hook.factory.field import com.highcapable.yukihookapi.hook.factory.method @@ -50,14 +52,14 @@ class CurrentClass @PublishedApi internal constructor(@PublishedApi internal val * @param initiate 查找方法体 * @return [FieldFinder.Result.Instance] */ - inline fun field(initiate: FieldFinder.() -> Unit) = classSet.field(initiate).get(instance) + inline fun field(initiate: FieldCondition) = classSet.field(initiate).get(instance) /** * 调用当前实例中的方法 * @param initiate 查找方法体 * @return [MethodFinder.Result.Instance] */ - inline fun method(initiate: MethodFinder.() -> Unit) = classSet.method(initiate).get(instance) + inline fun method(initiate: MethodCondition) = classSet.method(initiate).get(instance) /** * 当前类的父类实例的类操作对象 @@ -71,13 +73,13 @@ class CurrentClass @PublishedApi internal constructor(@PublishedApi internal val * @param initiate 查找方法体 * @return [FieldFinder.Result.Instance] */ - inline fun field(initiate: FieldFinder.() -> Unit) = classSet.superclass.field(initiate).get(instance) + inline fun field(initiate: FieldCondition) = classSet.superclass.field(initiate).get(instance) /** * 调用父类实例中的方法 * @param initiate 查找方法体 * @return [MethodFinder.Result.Instance] */ - inline fun method(initiate: MethodFinder.() -> Unit) = classSet.superclass.method(initiate).get(instance) + inline fun method(initiate: MethodCondition) = classSet.superclass.method(initiate).get(instance) } } \ No newline at end of file diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreater.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreater.kt index 3a36b6d1..08194abd 100644 --- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreater.kt +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreater.kt @@ -35,8 +35,7 @@ import com.highcapable.yukihookapi.hook.core.finder.ConstructorFinder import com.highcapable.yukihookapi.hook.core.finder.FieldFinder import com.highcapable.yukihookapi.hook.core.finder.MethodFinder import com.highcapable.yukihookapi.hook.core.finder.base.BaseFinder -import com.highcapable.yukihookapi.hook.factory.allConstructors -import com.highcapable.yukihookapi.hook.factory.allMethods +import com.highcapable.yukihookapi.hook.factory.* import com.highcapable.yukihookapi.hook.log.yLoggerE import com.highcapable.yukihookapi.hook.log.yLoggerI import com.highcapable.yukihookapi.hook.log.yLoggerW @@ -279,7 +278,7 @@ class YukiMemberHookCreater(@PublishedApi internal val packageParam: PackagePara * @param initiate 方法体 * @return [MethodFinder.Result] */ - inline fun method(initiate: MethodFinder.() -> Unit) = try { + inline fun method(initiate: MethodCondition) = try { isHookMemberSetup = true MethodFinder(hookInstance = this, hookClass.instance).apply(initiate).apply { finder = this }.build(isBind = true) } catch (e: Throwable) { @@ -294,7 +293,7 @@ class YukiMemberHookCreater(@PublishedApi internal val packageParam: PackagePara * @param initiate 方法体 * @return [ConstructorFinder.Result] */ - inline fun constructor(initiate: ConstructorFinder.() -> Unit = { emptyParam() }) = try { + inline fun constructor(initiate: ConstructorCondition = { emptyParam() }) = try { isHookMemberSetup = true ConstructorFinder(hookInstance = this, hookClass.instance).apply(initiate).apply { finder = this }.build(isBind = true) } catch (e: Throwable) { @@ -307,7 +306,7 @@ class YukiMemberHookCreater(@PublishedApi internal val packageParam: PackagePara * @param initiate 方法体 * @return [FieldFinder.Result] */ - inline fun HookParam.field(initiate: FieldFinder.() -> Unit) = + inline fun HookParam.field(initiate: FieldCondition) = if (hookClass.instance == null) FieldFinder(hookInstance = this@MemberHookCreater).failure(hookClass.throwable) else FieldFinder(hookInstance = this@MemberHookCreater, hookClass.instance).apply(initiate).build() @@ -316,7 +315,7 @@ class YukiMemberHookCreater(@PublishedApi internal val packageParam: PackagePara * @param initiate 方法体 * @return [MethodFinder.Result] */ - inline fun HookParam.method(initiate: MethodFinder.() -> Unit) = + inline fun HookParam.method(initiate: MethodCondition) = if (hookClass.instance == null) MethodFinder(hookInstance = this@MemberHookCreater).failure(hookClass.throwable) else MethodFinder(hookInstance = this@MemberHookCreater, hookClass.instance).apply(initiate).build() @@ -325,7 +324,7 @@ class YukiMemberHookCreater(@PublishedApi internal val packageParam: PackagePara * @param initiate 方法体 * @return [ConstructorFinder.Result] */ - inline fun HookParam.constructor(initiate: ConstructorFinder.() -> Unit = { emptyParam() }) = + inline fun HookParam.constructor(initiate: ConstructorCondition = { emptyParam() }) = if (hookClass.instance == null) ConstructorFinder(hookInstance = this@MemberHookCreater).failure(hookClass.throwable) else ConstructorFinder(hookInstance = this@MemberHookCreater, hookClass.instance).apply(initiate).build() diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/ConstructorFinder.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/ConstructorFinder.kt index 8eb59a33..bffd3b49 100644 --- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/ConstructorFinder.kt +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/ConstructorFinder.kt @@ -35,6 +35,7 @@ import com.highcapable.yukihookapi.hook.core.YukiMemberHookCreater import com.highcapable.yukihookapi.hook.core.finder.base.BaseFinder import com.highcapable.yukihookapi.hook.core.finder.type.ModifierRules import com.highcapable.yukihookapi.hook.core.reflex.tools.ReflectionTool +import com.highcapable.yukihookapi.hook.factory.ConstructorCondition import com.highcapable.yukihookapi.hook.factory.hasExtends import com.highcapable.yukihookapi.hook.log.yLoggerW import com.highcapable.yukihookapi.hook.type.defined.UndefinedType @@ -245,7 +246,7 @@ class ConstructorFinder @PublishedApi internal constructor( * 若最后依然失败 - 将停止查找并输出错误日志 * @param initiate 方法体 */ - inline fun constructor(initiate: ConstructorFinder.() -> Unit) = + inline fun constructor(initiate: ConstructorCondition) = Result().apply { remedyPlans.add(Pair(ConstructorFinder(hookInstance, classSet).apply(initiate), this)) } /** 开始重查找 */ diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/FieldFinder.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/FieldFinder.kt index 964639df..c0d19704 100644 --- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/FieldFinder.kt +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/FieldFinder.kt @@ -36,6 +36,7 @@ import com.highcapable.yukihookapi.hook.core.finder.base.BaseFinder import com.highcapable.yukihookapi.hook.core.finder.type.ModifierRules import com.highcapable.yukihookapi.hook.core.finder.type.NameConditions import com.highcapable.yukihookapi.hook.core.reflex.tools.ReflectionTool +import com.highcapable.yukihookapi.hook.factory.FieldCondition import com.highcapable.yukihookapi.hook.factory.hasExtends import com.highcapable.yukihookapi.hook.log.yLoggerW import com.highcapable.yukihookapi.hook.utils.await @@ -236,7 +237,7 @@ class FieldFinder @PublishedApi internal constructor( * @param initiate 方法体 * @return [Result] 结果 */ - inline fun field(initiate: FieldFinder.() -> Unit) = + inline fun field(initiate: FieldCondition) = Result().apply { remedyPlans.add(Pair(FieldFinder(hookInstance, classSet).apply(initiate), this)) } /** 开始重查找 */ diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/MethodFinder.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/MethodFinder.kt index 48858954..fc006a06 100644 --- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/MethodFinder.kt +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/MethodFinder.kt @@ -36,6 +36,7 @@ import com.highcapable.yukihookapi.hook.core.finder.base.BaseFinder import com.highcapable.yukihookapi.hook.core.finder.type.ModifierRules import com.highcapable.yukihookapi.hook.core.finder.type.NameConditions import com.highcapable.yukihookapi.hook.core.reflex.tools.ReflectionTool +import com.highcapable.yukihookapi.hook.factory.MethodCondition import com.highcapable.yukihookapi.hook.factory.hasExtends import com.highcapable.yukihookapi.hook.log.yLoggerW import com.highcapable.yukihookapi.hook.type.defined.UndefinedType @@ -313,7 +314,7 @@ class MethodFinder @PublishedApi internal constructor( * @param initiate 方法体 * @return [Result] 结果 */ - inline fun method(initiate: MethodFinder.() -> Unit) = + inline fun method(initiate: MethodCondition) = Result().apply { remedyPlans.add(Pair(MethodFinder(hookInstance, classSet).apply(initiate), this)) } /** 开始重查找 */ diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.kt index 79f800de..11099127 100644 --- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.kt +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.kt @@ -42,6 +42,15 @@ import java.lang.reflect.Field import java.lang.reflect.Member import java.lang.reflect.Method +/** 定义 [FieldFinder] 方法体类型 */ +internal typealias FieldCondition = FieldFinder.() -> Unit + +/** 定义 [MethodFinder] 方法体类型 */ +internal typealias MethodCondition = MethodFinder.() -> Unit + +/** 定义 [ConstructorFinder] 方法体类型 */ +internal typealias ConstructorCondition = ConstructorFinder.() -> Unit + /** * 当前 [Class] 是否有继承关系 - 父类是 [Any] 将被认为没有继承关系 * @return [Boolean] @@ -96,21 +105,21 @@ fun String.hasClass(loader: ClassLoader? = null) = try { * @param initiate 方法体 * @return [Boolean] 是否存在 */ -inline fun Class<*>.hasField(initiate: FieldFinder.() -> Unit) = field(initiate).ignored().isNoSuch.not() +inline fun Class<*>.hasField(initiate: FieldCondition) = field(initiate).ignored().isNoSuch.not() /** * 查找方法是否存在 * @param initiate 方法体 * @return [Boolean] 是否存在 */ -inline fun Class<*>.hasMethod(initiate: MethodFinder.() -> Unit) = method(initiate).ignored().isNoSuch.not() +inline fun Class<*>.hasMethod(initiate: MethodCondition) = method(initiate).ignored().isNoSuch.not() /** * 查找构造方法是否存在 * @param initiate 方法体 * @return [Boolean] 是否存在 */ -inline fun Class<*>.hasConstructor(initiate: ConstructorFinder.() -> Unit = { emptyParam() }) = constructor(initiate).ignored().isNoSuch.not() +inline fun Class<*>.hasConstructor(initiate: ConstructorCondition = { emptyParam() }) = constructor(initiate).ignored().isNoSuch.not() /** * 查询 [Member] 中匹配的描述符 @@ -124,22 +133,21 @@ inline fun Member.hasModifiers(initiate: ModifierRules.() -> Unit) = ModifierRul * @param initiate 查找方法体 * @return [FieldFinder.Result] */ -inline fun Class<*>.field(initiate: FieldFinder.() -> Unit) = FieldFinder(classSet = this).apply(initiate).build() +inline fun Class<*>.field(initiate: FieldCondition) = FieldFinder(classSet = this).apply(initiate).build() /** * 查找并得到方法 * @param initiate 查找方法体 * @return [MethodFinder.Result] */ -inline fun Class<*>.method(initiate: MethodFinder.() -> Unit) = MethodFinder(classSet = this).apply(initiate).build() +inline fun Class<*>.method(initiate: MethodCondition) = MethodFinder(classSet = this).apply(initiate).build() /** * 查找并得到构造方法 * @param initiate 查找方法体 * @return [ConstructorFinder.Result] */ -inline fun Class<*>.constructor(initiate: ConstructorFinder.() -> Unit = { emptyParam() }) = - ConstructorFinder(classSet = this).apply(initiate).build() +inline fun Class<*>.constructor(initiate: ConstructorCondition = { emptyParam() }) = ConstructorFinder(classSet = this).apply(initiate).build() /** * 获得当前实例的类操作对象 @@ -167,7 +175,7 @@ inline fun T.current(): CurrentClass { * @param initiate 查找方法体 * @return [Any] or null */ -inline fun Class<*>.buildOfAny(vararg param: Any?, initiate: ConstructorFinder.() -> Unit = { emptyParam() }) = +inline fun Class<*>.buildOfAny(vararg param: Any?, initiate: ConstructorCondition = { emptyParam() }) = constructor(initiate).get().call(*param) /** @@ -176,7 +184,7 @@ inline fun Class<*>.buildOfAny(vararg param: Any?, initiate: ConstructorFinder.( * @param initiate 查找方法体 * @return [T] or null */ -inline fun Class<*>.buildOf(vararg param: Any?, initiate: ConstructorFinder.() -> Unit = { emptyParam() }) = +inline fun Class<*>.buildOf(vararg param: Any?, initiate: ConstructorCondition = { emptyParam() }) = constructor(initiate).get().newInstance(*param) /**