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.93` `修改`
|
||||
|
||||
新增 `Class` 的描述符判断
|
||||
|
||||
**功能描述**
|
||||
|
||||
> 这是一个 `Member` 描述符定义类。
|
||||
> 这是一个 `Class`、`Member` 描述符定义类。
|
||||
|
||||
可对 R8 混淆后的 `Member` 进行更加详细的定位。
|
||||
可对 R8 混淆后的 `Class`、`Member` 进行更加详细的定位。
|
||||
|
||||
### ~~asPublic *- method*~~ <!-- {docsify-ignore} -->
|
||||
|
||||
@@ -146,7 +150,7 @@ fun isPublic()
|
||||
|
||||
**功能描述**
|
||||
|
||||
> 添加描述 `Member` 类型包含 `public`。
|
||||
> 添加描述 `Class`、`Member` 类型包含 `public`。
|
||||
|
||||
### isPrivate *- method*
|
||||
|
||||
@@ -160,7 +164,7 @@ fun isPrivate()
|
||||
|
||||
**功能描述**
|
||||
|
||||
> 添加描述 `Member` 类型包含 `private`。
|
||||
> 添加描述 `Class`、`Member` 类型包含 `private`。
|
||||
|
||||
### isProtected *- method*
|
||||
|
||||
@@ -174,7 +178,7 @@ fun isProtected()
|
||||
|
||||
**功能描述**
|
||||
|
||||
> 添加描述 `Member` 类型包含 `protected`。
|
||||
> 添加描述 `Class`、`Member` 类型包含 `protected`。
|
||||
|
||||
### isStatic *- method*
|
||||
|
||||
@@ -188,9 +192,9 @@ fun isStatic()
|
||||
|
||||
**功能描述**
|
||||
|
||||
> 添加描述 `Member` 类型包含 `static`。
|
||||
> 添加描述 `Class`、`Member` 类型包含 `static`。
|
||||
|
||||
对于任意的静态 `Member` 可添加此描述进行确定。
|
||||
对于任意的静态 `Class`、`Member` 可添加此描述进行确定。
|
||||
|
||||
!> 特别注意 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*
|
||||
|
||||
@@ -222,7 +226,7 @@ fun isSynchronized()
|
||||
|
||||
**功能描述**
|
||||
|
||||
> 添加描述 `Member` 类型包含 `synchronized`。
|
||||
> 添加描述 `Class`、`Member` 类型包含 `synchronized`。
|
||||
|
||||
### isVolatile *- method*
|
||||
|
||||
@@ -236,7 +240,7 @@ fun isVolatile()
|
||||
|
||||
**功能描述**
|
||||
|
||||
> 添加描述 `Member` 类型包含 `volatile`。
|
||||
> 添加描述 `Class`、`Member` 类型包含 `volatile`。
|
||||
|
||||
### isTransient *- method*
|
||||
|
||||
@@ -250,7 +254,7 @@ fun isTransient()
|
||||
|
||||
**功能描述**
|
||||
|
||||
> 添加描述 `Member` 类型包含 `transient`。
|
||||
> 添加描述 `Class`、`Member` 类型包含 `transient`。
|
||||
|
||||
### isNative *- method*
|
||||
|
||||
@@ -264,9 +268,9 @@ fun isNative()
|
||||
|
||||
**功能描述**
|
||||
|
||||
> 添加描述 `Member` 类型包含 `native`。
|
||||
> 添加描述 `Class`、`Member` 类型包含 `native`。
|
||||
|
||||
对于任意 JNI 对接的 `Member` 可添加此描述进行确定。
|
||||
对于任意 JNI 对接的 `Class`、`Member` 可添加此描述进行确定。
|
||||
|
||||
### isInterface *- method*
|
||||
|
||||
@@ -280,7 +284,7 @@ fun isInterface()
|
||||
|
||||
**功能描述**
|
||||
|
||||
> 添加描述 `Member` 类型包含 `interface`。
|
||||
> 添加描述 `Class`、`Member` 类型包含 `interface`。
|
||||
|
||||
### isAbstract *- method*
|
||||
|
||||
@@ -294,9 +298,9 @@ fun isAbstract()
|
||||
|
||||
**功能描述**
|
||||
|
||||
> 添加描述 `Member` 类型包含 `abstract`。
|
||||
> 添加描述 `Class`、`Member` 类型包含 `abstract`。
|
||||
|
||||
对于任意的抽象 `Member` 可添加此描述进行确定。
|
||||
对于任意的抽象 `Class`、`Member` 可添加此描述进行确定。
|
||||
|
||||
### 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` 中匹配的描述符。
|
||||
|
||||
### Class.hasModifiers *- ext-method*
|
||||
|
||||
```kotlin
|
||||
inline fun Class<*>.hasModifiers(initiate: ModifierRules.() -> Unit): Boolean
|
||||
```
|
||||
|
||||
**变更记录**
|
||||
|
||||
`v1.0.93` `新增`
|
||||
|
||||
**功能描述**
|
||||
|
||||
> 查询 `Class` 中匹配的描述符。
|
||||
|
||||
### ~~obtainStaticFieldAny *- method*~~ <!-- {docsify-ignore} -->
|
||||
|
||||
**变更记录**
|
||||
|
@@ -33,9 +33,9 @@ import java.lang.reflect.Member
|
||||
import java.lang.reflect.Modifier
|
||||
|
||||
/**
|
||||
* 这是一个 [Member] 描述符定义类
|
||||
* 这是一个 [Class]、[Member] 描述符定义类
|
||||
*
|
||||
* 可对 R8 混淆后的 [Member] 进行更加详细的定位
|
||||
* 可对 R8 混淆后的 [Class]、[Member] 进行更加详细的定位
|
||||
*/
|
||||
class ModifierRules @PublishedApi internal constructor() {
|
||||
|
||||
@@ -171,25 +171,25 @@ class ModifierRules @PublishedApi internal constructor() {
|
||||
@Deprecated(message = "请使用新的命名方法", replaceWith = ReplaceWith(expression = "isStrict()"))
|
||||
fun asStrict() = isStrict()
|
||||
|
||||
/** 添加描述 [Member] 类型包含 public */
|
||||
/** 添加描述 [Class]、[Member] 类型包含 public */
|
||||
fun isPublic() {
|
||||
isPublic = true
|
||||
}
|
||||
|
||||
/** 添加描述 [Member] 类型包含 private */
|
||||
/** 添加描述 [Class]、[Member] 类型包含 private */
|
||||
fun isPrivate() {
|
||||
isPrivate = true
|
||||
}
|
||||
|
||||
/** 添加描述 [Member] 类型包含 protected */
|
||||
/** 添加描述 [Class]、[Member] 类型包含 protected */
|
||||
fun isProtected() {
|
||||
isProtected = true
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加描述 [Member] 类型包含 static
|
||||
* 添加描述 [Class]、[Member] 类型包含 static
|
||||
*
|
||||
* 对于任意的静态 [Member] 可添加此描述进行确定
|
||||
* 对于任意的静态 [Class]、[Member] 可添加此描述进行确定
|
||||
*
|
||||
* - ❗注意 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() {
|
||||
isFinal = true
|
||||
}
|
||||
|
||||
/** 添加描述 [Member] 类型包含 synchronized */
|
||||
/** 添加描述 [Class]、[Member] 类型包含 synchronized */
|
||||
fun isSynchronized() {
|
||||
isSynchronized = true
|
||||
}
|
||||
|
||||
/** 添加描述 [Member] 类型包含 volatile */
|
||||
/** 添加描述 [Class]、[Member] 类型包含 volatile */
|
||||
fun isVolatile() {
|
||||
isVolatile = true
|
||||
}
|
||||
|
||||
/** 添加描述 [Member] 类型包含 transient */
|
||||
/** 添加描述 [Class]、[Member] 类型包含 transient */
|
||||
fun isTransient() {
|
||||
isTransient = true
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加描述 [Member] 类型包含 native
|
||||
* 添加描述 [Class]、[Member] 类型包含 native
|
||||
*
|
||||
* 对于任意 JNI 对接的 [Member] 可添加此描述进行确定
|
||||
* 对于任意 JNI 对接的 [Class]、[Member] 可添加此描述进行确定
|
||||
*/
|
||||
fun isNative() {
|
||||
isNative = true
|
||||
}
|
||||
|
||||
/** 添加描述 [Member] 类型包含 interface */
|
||||
/** 添加描述 [Class]、[Member] 类型包含 interface */
|
||||
fun isInterface() {
|
||||
isInterface = true
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加描述 [Member] 类型包含 abstract
|
||||
* 添加描述 [Class]、[Member] 类型包含 abstract
|
||||
*
|
||||
* 对于任意的抽象 [Member] 可添加此描述进行确定
|
||||
* 对于任意的抽象 [Class]、[Member] 可添加此描述进行确定
|
||||
*/
|
||||
fun isAbstract() {
|
||||
isAbstract = true
|
||||
}
|
||||
|
||||
/** 添加描述 [Member] 类型包含 strict */
|
||||
/** 添加描述 [Class]、[Member] 类型包含 strict */
|
||||
fun isStrict() {
|
||||
isStrict = true
|
||||
}
|
||||
|
||||
/**
|
||||
* 对比 [Member] 类型是否符合条件
|
||||
* @param member 实例
|
||||
* 对比 [Class]、[Member] 类型是否符合条件
|
||||
* @param reflects 实例 - 只能是 [Class] or [Member]
|
||||
* @return [Boolean] 是否符合条件
|
||||
*/
|
||||
@PublishedApi
|
||||
internal fun contains(member: Member): Boolean {
|
||||
internal fun contains(reflects: Any): Boolean {
|
||||
var conditions = true
|
||||
if (isPublic) conditions = Modifier.isPublic(member.modifiers)
|
||||
if (isPrivate) conditions = conditions && Modifier.isPrivate(member.modifiers)
|
||||
if (isProtected) conditions = conditions && Modifier.isProtected(member.modifiers)
|
||||
if (isStatic) conditions = conditions && Modifier.isStatic(member.modifiers)
|
||||
if (isFinal) conditions = conditions && Modifier.isFinal(member.modifiers)
|
||||
if (isSynchronized) conditions = conditions && Modifier.isSynchronized(member.modifiers)
|
||||
if (isVolatile) conditions = conditions && Modifier.isVolatile(member.modifiers)
|
||||
if (isTransient) conditions = conditions && Modifier.isTransient(member.modifiers)
|
||||
if (isNative) conditions = conditions && Modifier.isNative(member.modifiers)
|
||||
if (isInterface) conditions = conditions && Modifier.isInterface(member.modifiers)
|
||||
if (isAbstract) conditions = conditions && Modifier.isAbstract(member.modifiers)
|
||||
if (isStrict) conditions = conditions && Modifier.isStrict(member.modifiers)
|
||||
Reflects(reflects).also {
|
||||
if (isPublic) conditions = Modifier.isPublic(it.modifiers)
|
||||
if (isPrivate) conditions = conditions && Modifier.isPrivate(it.modifiers)
|
||||
if (isProtected) conditions = conditions && Modifier.isProtected(it.modifiers)
|
||||
if (isStatic) conditions = conditions && Modifier.isStatic(it.modifiers)
|
||||
if (isFinal) conditions = conditions && Modifier.isFinal(it.modifiers)
|
||||
if (isSynchronized) conditions = conditions && Modifier.isSynchronized(it.modifiers)
|
||||
if (isVolatile) conditions = conditions && Modifier.isVolatile(it.modifiers)
|
||||
if (isTransient) conditions = conditions && Modifier.isTransient(it.modifiers)
|
||||
if (isNative) conditions = conditions && Modifier.isNative(it.modifiers)
|
||||
if (isInterface) conditions = conditions && Modifier.isInterface(it.modifiers)
|
||||
if (isAbstract) conditions = conditions && Modifier.isAbstract(it.modifiers)
|
||||
if (isStrict) conditions = conditions && Modifier.isStrict(it.modifiers)
|
||||
}
|
||||
return conditions
|
||||
}
|
||||
|
||||
@@ -288,4 +290,22 @@ class ModifierRules @PublishedApi internal constructor() {
|
||||
if (isStrict) conditions += "<strict> "
|
||||
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)
|
||||
|
||||
/**
|
||||
* 查询 [Class] 中匹配的描述符
|
||||
* @param initiate 方法体
|
||||
* @return [Boolean] 是否存在
|
||||
*/
|
||||
inline fun Class<*>.hasModifiers(initiate: ModifierRules.() -> Unit) = ModifierRules().apply(initiate).contains(this)
|
||||
|
||||
/**
|
||||
* 查找并得到变量
|
||||
* @param initiate 查找方法体
|
||||
|
Reference in New Issue
Block a user