mirror of
https://github.com/HighCapable/YukiHookAPI.git
synced 2025-09-04 09:45:19 +08:00
Added Class.hasModifiers function in ReflectionFactory
This commit is contained in:
@@ -8,11 +8,15 @@ class ModifierRules internal constructor()
|
|||||||
|
|
||||||
`v1.0.67` `新增`
|
`v1.0.67` `新增`
|
||||||
|
|
||||||
|
`v1.0.93` `修改`
|
||||||
|
|
||||||
|
新增 `Class` 的描述符判断
|
||||||
|
|
||||||
**功能描述**
|
**功能描述**
|
||||||
|
|
||||||
> 这是一个 `Member` 描述符定义类。
|
> 这是一个 `Class`、`Member` 描述符定义类。
|
||||||
|
|
||||||
可对 R8 混淆后的 `Member` 进行更加详细的定位。
|
可对 R8 混淆后的 `Class`、`Member` 进行更加详细的定位。
|
||||||
|
|
||||||
### ~~asPublic *- method*~~ <!-- {docsify-ignore} -->
|
### ~~asPublic *- method*~~ <!-- {docsify-ignore} -->
|
||||||
|
|
||||||
@@ -146,7 +150,7 @@ fun isPublic()
|
|||||||
|
|
||||||
**功能描述**
|
**功能描述**
|
||||||
|
|
||||||
> 添加描述 `Member` 类型包含 `public`。
|
> 添加描述 `Class`、`Member` 类型包含 `public`。
|
||||||
|
|
||||||
### isPrivate *- method*
|
### isPrivate *- method*
|
||||||
|
|
||||||
@@ -160,7 +164,7 @@ fun isPrivate()
|
|||||||
|
|
||||||
**功能描述**
|
**功能描述**
|
||||||
|
|
||||||
> 添加描述 `Member` 类型包含 `private`。
|
> 添加描述 `Class`、`Member` 类型包含 `private`。
|
||||||
|
|
||||||
### isProtected *- method*
|
### isProtected *- method*
|
||||||
|
|
||||||
@@ -174,7 +178,7 @@ fun isProtected()
|
|||||||
|
|
||||||
**功能描述**
|
**功能描述**
|
||||||
|
|
||||||
> 添加描述 `Member` 类型包含 `protected`。
|
> 添加描述 `Class`、`Member` 类型包含 `protected`。
|
||||||
|
|
||||||
### isStatic *- method*
|
### isStatic *- method*
|
||||||
|
|
||||||
@@ -188,9 +192,9 @@ fun isStatic()
|
|||||||
|
|
||||||
**功能描述**
|
**功能描述**
|
||||||
|
|
||||||
> 添加描述 `Member` 类型包含 `static`。
|
> 添加描述 `Class`、`Member` 类型包含 `static`。
|
||||||
|
|
||||||
对于任意的静态 `Member` 可添加此描述进行确定。
|
对于任意的静态 `Class`、`Member` 可添加此描述进行确定。
|
||||||
|
|
||||||
!> 特别注意 Kotlin -> Jvm 后的 `object` 类中的方法并不是静态的。
|
!> 特别注意 Kotlin -> Jvm 后的 `object` 类中的方法并不是静态的。
|
||||||
|
|
||||||
@@ -206,9 +210,9 @@ fun isFinal()
|
|||||||
|
|
||||||
**功能描述**
|
**功能描述**
|
||||||
|
|
||||||
> 添加描述 `Member` 类型包含 `final`。
|
> 添加描述 `Class`、`Member` 类型包含 `final`。
|
||||||
|
|
||||||
!> 特别注意在 Kotlin -> Jvm 后没有 `open` 标识的 `Member` 和没有任何关联的 `Member` 都将为 `final`。
|
!> 特别注意在 Kotlin -> Jvm 后没有 `open` 标识的 `Class`、`Member` 和没有任何关联的 `Class`、`Member` 都将为 `final`。
|
||||||
|
|
||||||
### isSynchronized *- method*
|
### isSynchronized *- method*
|
||||||
|
|
||||||
@@ -222,7 +226,7 @@ fun isSynchronized()
|
|||||||
|
|
||||||
**功能描述**
|
**功能描述**
|
||||||
|
|
||||||
> 添加描述 `Member` 类型包含 `synchronized`。
|
> 添加描述 `Class`、`Member` 类型包含 `synchronized`。
|
||||||
|
|
||||||
### isVolatile *- method*
|
### isVolatile *- method*
|
||||||
|
|
||||||
@@ -236,7 +240,7 @@ fun isVolatile()
|
|||||||
|
|
||||||
**功能描述**
|
**功能描述**
|
||||||
|
|
||||||
> 添加描述 `Member` 类型包含 `volatile`。
|
> 添加描述 `Class`、`Member` 类型包含 `volatile`。
|
||||||
|
|
||||||
### isTransient *- method*
|
### isTransient *- method*
|
||||||
|
|
||||||
@@ -250,7 +254,7 @@ fun isTransient()
|
|||||||
|
|
||||||
**功能描述**
|
**功能描述**
|
||||||
|
|
||||||
> 添加描述 `Member` 类型包含 `transient`。
|
> 添加描述 `Class`、`Member` 类型包含 `transient`。
|
||||||
|
|
||||||
### isNative *- method*
|
### isNative *- method*
|
||||||
|
|
||||||
@@ -264,9 +268,9 @@ fun isNative()
|
|||||||
|
|
||||||
**功能描述**
|
**功能描述**
|
||||||
|
|
||||||
> 添加描述 `Member` 类型包含 `native`。
|
> 添加描述 `Class`、`Member` 类型包含 `native`。
|
||||||
|
|
||||||
对于任意 JNI 对接的 `Member` 可添加此描述进行确定。
|
对于任意 JNI 对接的 `Class`、`Member` 可添加此描述进行确定。
|
||||||
|
|
||||||
### isInterface *- method*
|
### isInterface *- method*
|
||||||
|
|
||||||
@@ -280,7 +284,7 @@ fun isInterface()
|
|||||||
|
|
||||||
**功能描述**
|
**功能描述**
|
||||||
|
|
||||||
> 添加描述 `Member` 类型包含 `interface`。
|
> 添加描述 `Class`、`Member` 类型包含 `interface`。
|
||||||
|
|
||||||
### isAbstract *- method*
|
### isAbstract *- method*
|
||||||
|
|
||||||
@@ -294,9 +298,9 @@ fun isAbstract()
|
|||||||
|
|
||||||
**功能描述**
|
**功能描述**
|
||||||
|
|
||||||
> 添加描述 `Member` 类型包含 `abstract`。
|
> 添加描述 `Class`、`Member` 类型包含 `abstract`。
|
||||||
|
|
||||||
对于任意的抽象 `Member` 可添加此描述进行确定。
|
对于任意的抽象 `Class`、`Member` 可添加此描述进行确定。
|
||||||
|
|
||||||
### isStrict *- method*
|
### isStrict *- method*
|
||||||
|
|
||||||
@@ -310,4 +314,4 @@ fun isStrict()
|
|||||||
|
|
||||||
**功能描述**
|
**功能描述**
|
||||||
|
|
||||||
> 添加描述 `Member` 类型包含 `strict`。
|
> 添加描述 `Class`、`Member` 类型包含 `strict`。
|
@@ -311,6 +311,20 @@ inline fun Member.hasModifiers(initiate: ModifierRules.() -> Unit): Boolean
|
|||||||
|
|
||||||
> 查询 `Member` 中匹配的描述符。
|
> 查询 `Member` 中匹配的描述符。
|
||||||
|
|
||||||
|
### Class.hasModifiers *- ext-method*
|
||||||
|
|
||||||
|
```kotlin
|
||||||
|
inline fun Class<*>.hasModifiers(initiate: ModifierRules.() -> Unit): Boolean
|
||||||
|
```
|
||||||
|
|
||||||
|
**变更记录**
|
||||||
|
|
||||||
|
`v1.0.93` `新增`
|
||||||
|
|
||||||
|
**功能描述**
|
||||||
|
|
||||||
|
> 查询 `Class` 中匹配的描述符。
|
||||||
|
|
||||||
### ~~obtainStaticFieldAny *- method*~~ <!-- {docsify-ignore} -->
|
### ~~obtainStaticFieldAny *- method*~~ <!-- {docsify-ignore} -->
|
||||||
|
|
||||||
**变更记录**
|
**变更记录**
|
||||||
|
@@ -33,9 +33,9 @@ import java.lang.reflect.Member
|
|||||||
import java.lang.reflect.Modifier
|
import java.lang.reflect.Modifier
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 这是一个 [Member] 描述符定义类
|
* 这是一个 [Class]、[Member] 描述符定义类
|
||||||
*
|
*
|
||||||
* 可对 R8 混淆后的 [Member] 进行更加详细的定位
|
* 可对 R8 混淆后的 [Class]、[Member] 进行更加详细的定位
|
||||||
*/
|
*/
|
||||||
class ModifierRules @PublishedApi internal constructor() {
|
class ModifierRules @PublishedApi internal constructor() {
|
||||||
|
|
||||||
@@ -171,25 +171,25 @@ class ModifierRules @PublishedApi internal constructor() {
|
|||||||
@Deprecated(message = "请使用新的命名方法", replaceWith = ReplaceWith(expression = "isStrict()"))
|
@Deprecated(message = "请使用新的命名方法", replaceWith = ReplaceWith(expression = "isStrict()"))
|
||||||
fun asStrict() = isStrict()
|
fun asStrict() = isStrict()
|
||||||
|
|
||||||
/** 添加描述 [Member] 类型包含 public */
|
/** 添加描述 [Class]、[Member] 类型包含 public */
|
||||||
fun isPublic() {
|
fun isPublic() {
|
||||||
isPublic = true
|
isPublic = true
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 添加描述 [Member] 类型包含 private */
|
/** 添加描述 [Class]、[Member] 类型包含 private */
|
||||||
fun isPrivate() {
|
fun isPrivate() {
|
||||||
isPrivate = true
|
isPrivate = true
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 添加描述 [Member] 类型包含 protected */
|
/** 添加描述 [Class]、[Member] 类型包含 protected */
|
||||||
fun isProtected() {
|
fun isProtected() {
|
||||||
isProtected = true
|
isProtected = true
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 添加描述 [Member] 类型包含 static
|
* 添加描述 [Class]、[Member] 类型包含 static
|
||||||
*
|
*
|
||||||
* 对于任意的静态 [Member] 可添加此描述进行确定
|
* 对于任意的静态 [Class]、[Member] 可添加此描述进行确定
|
||||||
*
|
*
|
||||||
* - ❗注意 Kotlin → Jvm 后的 object 类中的方法并不是静态的
|
* - ❗注意 Kotlin → Jvm 后的 object 类中的方法并不是静态的
|
||||||
*/
|
*/
|
||||||
@@ -198,77 +198,79 @@ class ModifierRules @PublishedApi internal constructor() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 添加描述 [Member] 类型包含 final
|
* 添加描述 [Class]、[Member] 类型包含 final
|
||||||
*
|
*
|
||||||
* - ❗注意 Kotlin → Jvm 后没有 open 标识的 [Member] 和没有任何关联的 [Member] 都将为 final
|
* - ❗注意 Kotlin → Jvm 后没有 open 标识的 [Class]、[Member] 和没有任何关联的 [Class]、[Member] 都将为 final
|
||||||
*/
|
*/
|
||||||
fun isFinal() {
|
fun isFinal() {
|
||||||
isFinal = true
|
isFinal = true
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 添加描述 [Member] 类型包含 synchronized */
|
/** 添加描述 [Class]、[Member] 类型包含 synchronized */
|
||||||
fun isSynchronized() {
|
fun isSynchronized() {
|
||||||
isSynchronized = true
|
isSynchronized = true
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 添加描述 [Member] 类型包含 volatile */
|
/** 添加描述 [Class]、[Member] 类型包含 volatile */
|
||||||
fun isVolatile() {
|
fun isVolatile() {
|
||||||
isVolatile = true
|
isVolatile = true
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 添加描述 [Member] 类型包含 transient */
|
/** 添加描述 [Class]、[Member] 类型包含 transient */
|
||||||
fun isTransient() {
|
fun isTransient() {
|
||||||
isTransient = true
|
isTransient = true
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 添加描述 [Member] 类型包含 native
|
* 添加描述 [Class]、[Member] 类型包含 native
|
||||||
*
|
*
|
||||||
* 对于任意 JNI 对接的 [Member] 可添加此描述进行确定
|
* 对于任意 JNI 对接的 [Class]、[Member] 可添加此描述进行确定
|
||||||
*/
|
*/
|
||||||
fun isNative() {
|
fun isNative() {
|
||||||
isNative = true
|
isNative = true
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 添加描述 [Member] 类型包含 interface */
|
/** 添加描述 [Class]、[Member] 类型包含 interface */
|
||||||
fun isInterface() {
|
fun isInterface() {
|
||||||
isInterface = true
|
isInterface = true
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 添加描述 [Member] 类型包含 abstract
|
* 添加描述 [Class]、[Member] 类型包含 abstract
|
||||||
*
|
*
|
||||||
* 对于任意的抽象 [Member] 可添加此描述进行确定
|
* 对于任意的抽象 [Class]、[Member] 可添加此描述进行确定
|
||||||
*/
|
*/
|
||||||
fun isAbstract() {
|
fun isAbstract() {
|
||||||
isAbstract = true
|
isAbstract = true
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 添加描述 [Member] 类型包含 strict */
|
/** 添加描述 [Class]、[Member] 类型包含 strict */
|
||||||
fun isStrict() {
|
fun isStrict() {
|
||||||
isStrict = true
|
isStrict = true
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 对比 [Member] 类型是否符合条件
|
* 对比 [Class]、[Member] 类型是否符合条件
|
||||||
* @param member 实例
|
* @param reflects 实例 - 只能是 [Class] or [Member]
|
||||||
* @return [Boolean] 是否符合条件
|
* @return [Boolean] 是否符合条件
|
||||||
*/
|
*/
|
||||||
@PublishedApi
|
@PublishedApi
|
||||||
internal fun contains(member: Member): Boolean {
|
internal fun contains(reflects: Any): Boolean {
|
||||||
var conditions = true
|
var conditions = true
|
||||||
if (isPublic) conditions = Modifier.isPublic(member.modifiers)
|
Reflects(reflects).also {
|
||||||
if (isPrivate) conditions = conditions && Modifier.isPrivate(member.modifiers)
|
if (isPublic) conditions = Modifier.isPublic(it.modifiers)
|
||||||
if (isProtected) conditions = conditions && Modifier.isProtected(member.modifiers)
|
if (isPrivate) conditions = conditions && Modifier.isPrivate(it.modifiers)
|
||||||
if (isStatic) conditions = conditions && Modifier.isStatic(member.modifiers)
|
if (isProtected) conditions = conditions && Modifier.isProtected(it.modifiers)
|
||||||
if (isFinal) conditions = conditions && Modifier.isFinal(member.modifiers)
|
if (isStatic) conditions = conditions && Modifier.isStatic(it.modifiers)
|
||||||
if (isSynchronized) conditions = conditions && Modifier.isSynchronized(member.modifiers)
|
if (isFinal) conditions = conditions && Modifier.isFinal(it.modifiers)
|
||||||
if (isVolatile) conditions = conditions && Modifier.isVolatile(member.modifiers)
|
if (isSynchronized) conditions = conditions && Modifier.isSynchronized(it.modifiers)
|
||||||
if (isTransient) conditions = conditions && Modifier.isTransient(member.modifiers)
|
if (isVolatile) conditions = conditions && Modifier.isVolatile(it.modifiers)
|
||||||
if (isNative) conditions = conditions && Modifier.isNative(member.modifiers)
|
if (isTransient) conditions = conditions && Modifier.isTransient(it.modifiers)
|
||||||
if (isInterface) conditions = conditions && Modifier.isInterface(member.modifiers)
|
if (isNative) conditions = conditions && Modifier.isNative(it.modifiers)
|
||||||
if (isAbstract) conditions = conditions && Modifier.isAbstract(member.modifiers)
|
if (isInterface) conditions = conditions && Modifier.isInterface(it.modifiers)
|
||||||
if (isStrict) conditions = conditions && Modifier.isStrict(member.modifiers)
|
if (isAbstract) conditions = conditions && Modifier.isAbstract(it.modifiers)
|
||||||
|
if (isStrict) conditions = conditions && Modifier.isStrict(it.modifiers)
|
||||||
|
}
|
||||||
return conditions
|
return conditions
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -288,4 +290,22 @@ class ModifierRules @PublishedApi internal constructor() {
|
|||||||
if (isStrict) conditions += "<strict> "
|
if (isStrict) conditions += "<strict> "
|
||||||
return "[${conditions.trim()}]"
|
return "[${conditions.trim()}]"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 实例化反射对象接口实现类
|
||||||
|
* @param reflects 反射对象实例
|
||||||
|
*/
|
||||||
|
private class Reflects(private val reflects: Any) {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前对象的类型描述符
|
||||||
|
* @return [Int]
|
||||||
|
*/
|
||||||
|
val modifiers
|
||||||
|
get() = when (reflects) {
|
||||||
|
is Member -> reflects.modifiers
|
||||||
|
is Class<*> -> reflects.modifiers
|
||||||
|
else -> error("Invalid reflects type")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
@@ -144,6 +144,13 @@ inline fun Class<*>.hasConstructor(initiate: ConstructorCondition = { emptyParam
|
|||||||
*/
|
*/
|
||||||
inline fun Member.hasModifiers(initiate: ModifierRules.() -> Unit) = ModifierRules().apply(initiate).contains(this)
|
inline fun Member.hasModifiers(initiate: ModifierRules.() -> Unit) = ModifierRules().apply(initiate).contains(this)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询 [Class] 中匹配的描述符
|
||||||
|
* @param initiate 方法体
|
||||||
|
* @return [Boolean] 是否存在
|
||||||
|
*/
|
||||||
|
inline fun Class<*>.hasModifiers(initiate: ModifierRules.() -> Unit) = ModifierRules().apply(initiate).contains(this)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查找并得到变量
|
* 查找并得到变量
|
||||||
* @param initiate 查找方法体
|
* @param initiate 查找方法体
|
||||||
|
Reference in New Issue
Block a user