Modify add allMembers function param type and add class MembersType in ReflectionFactory

This commit is contained in:
2022-08-12 01:00:01 +08:00
parent 293ae08b0e
commit dcc428270f
4 changed files with 86 additions and 10 deletions

View File

@@ -8,6 +8,62 @@
> 这是自定义 `Member` 和 `Class` 相关功能的查找匹配以及 `invoke` 的封装类。
### MembersType [class]
```kotlin
enum class MembersType
```
**变更记录**
`v1.0.93` `新增`
**功能描述**
> 定义一个 `Class` 中的 `Member` 类型
#### ALL [enum]
```kotlin
ALL
```
**变更记录**
`v1.0.93` `新增`
**功能描述**
> 全部 `Method` 与 `Constructor`。
#### METHOD [enum]
```kotlin
METHOD
```
**变更记录**
`v1.0.93` `新增`
**功能描述**
> 全部 `Method`。
#### CONSTRUCTOR [enum]
```kotlin
CONSTRUCTOR
```
**变更记录**
`v1.0.93` `新增`
**功能描述**
> 全部 `Constructor`。
### ~~hookClass [field]~~ <!-- {docsify-ignore} -->
**变更记录**

View File

@@ -230,12 +230,12 @@ injectMember {
`v1.0.93` `作废`
请使用 `constructor().all()` 来取代它
请使用 `allMembers(MembersType.CONSTRUCTOR)` 来取代它
#### allMembers [method]
```kotlin
fun allMembers()
fun allMembers(type: MembersType)
```
**变更记录**

View File

@@ -237,11 +237,11 @@ class YukiMemberHookCreater(@PublishedApi internal val packageParam: PackagePara
*
* - ❗此方法已弃用 - 在之后的版本中将直接被删除
*
* - ❗请现在转移到 [MethodFinder]
* - ❗请现在转移到 [MethodFinder] 或 [allMembers]
* @param name 方法名称
* @return [ArrayList]<[MethodFinder.Result.Instance]>
*/
@Deprecated("请使用新方式来实现 Hook 所有方法", ReplaceWith(expression = "method { this.name = name }.all()"))
@Deprecated(message = "请使用新方式来实现 Hook 所有方法", ReplaceWith(expression = "method { this.name = name }.all()"))
fun allMethods(name: String) = method { this.name = name }.all()
/**
@@ -249,11 +249,14 @@ class YukiMemberHookCreater(@PublishedApi internal val packageParam: PackagePara
*
* - ❗此方法已弃用 - 在之后的版本中将直接被删除
*
* - ❗请现在转移到 [ConstructorFinder]
* - ❗请现在转移到 [ConstructorFinder] 或 [allMembers]
* @return [ArrayList]<[ConstructorFinder.Result.Instance]>
*/
@Deprecated("请使用新方式来实现 Hook 所有构造方法", ReplaceWith(expression = "constructor().all()"))
fun allConstructors() = constructor().all()
@Deprecated(
message = "请使用新方式来实现 Hook 所有构造方法",
ReplaceWith(expression = "allMembers(MembersType.CONSTRUCTOR)", "com.highcapable.yukihookapi.hook.factory.MembersType")
)
fun allConstructors() = allMembers(MembersType.CONSTRUCTOR)
/**
* 查找并 Hook [hookClass] 中的全部方法、构造方法
@@ -263,11 +266,14 @@ class YukiMemberHookCreater(@PublishedApi internal val packageParam: PackagePara
* - ❗警告:无法准确处理每个方法的返回值和 param - 建议使用 [method] or [constructor] 对每个方法单独 Hook
*
* - ❗如果 [hookClass] 中没有方法可能会发生错误
* @param type 过滤 [Member] 类型 - 默认为 [MembersType.ALL]
*/
fun allMembers() {
fun allMembers(type: MembersType = MembersType.ALL) {
members.clear()
hookClass.instance?.allConstructors { _, constructor -> members.add(constructor) }
hookClass.instance?.allMethods { _, method -> members.add(method) }
if (type == MembersType.ALL || type == MembersType.CONSTRUCTOR)
hookClass.instance?.allConstructors { _, constructor -> members.add(constructor) }
if (type == MembersType.ALL || type == MembersType.METHOD)
hookClass.instance?.allMethods { _, method -> members.add(method) }
isHookMemberSetup = true
}

View File

@@ -51,6 +51,20 @@ internal typealias MethodCondition = MethodFinder.() -> Unit
/** 定义 [ConstructorFinder] 方法体类型 */
internal typealias ConstructorCondition = ConstructorFinder.() -> Unit
/**
* 定义一个 [Class] 中的 [Member] 类型
*/
enum class MembersType {
/** 全部 [Method] 与 [Constructor] */
ALL,
/** 全部 [Method] */
METHOD,
/** 全部 [Constructor] */
CONSTRUCTOR
}
/**
* 当前 [Class] 是否有继承关系 - 父类是 [Any] 将被认为没有继承关系
* @return [Boolean]