From 113719b0d2328007a36cd8a2fc85ab2fb9ef9978 Mon Sep 17 00:00:00 2001 From: fankesyooni Date: Mon, 12 Sep 2022 23:06:27 +0800 Subject: [PATCH] Added length { ... } function in NameConditions --- docs/api/public/NameConditions.md | 6 +++++- .../hook/core/finder/type/NameConditions.kt | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/docs/api/public/NameConditions.md b/docs/api/public/NameConditions.md index 8bbd8d61..0aa0e973 100644 --- a/docs/api/public/NameConditions.md +++ b/docs/api/public/NameConditions.md @@ -98,13 +98,17 @@ fun length(num: Int) fun length(numRange: IntRange) ``` +```kotlin +fun length(conditions: IntConditions) +``` + **变更记录** `v1.0.93` `新增` **功能描述** -> 字符长度与范围匹配。 +> 字符长度与范围及条件匹配。 ### thisSynthetic0 *- method* diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/type/NameConditions.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/type/NameConditions.kt index 2420d85d..b167c791 100644 --- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/type/NameConditions.kt +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/type/NameConditions.kt @@ -29,6 +29,7 @@ package com.highcapable.yukihookapi.hook.core.finder.type +import com.highcapable.yukihookapi.hook.utils.IntConditions import java.lang.reflect.Field import java.lang.reflect.Member import java.lang.reflect.Method @@ -61,6 +62,9 @@ class NameConditions @PublishedApi internal constructor() { /** 字符长度范围匹配条件 */ private var cdsLengthRange = IntRange.EMPTY + /** 字符长度条件匹配条件 */ + private var cdsLengthConditions: IntConditions? = null + /** 标识为匿名类的主类调用对象条件 */ private var isThisSynthetic0 = false @@ -165,6 +169,14 @@ class NameConditions @PublishedApi internal constructor() { cdsLengthRange = numRange } + /** + * 字符长度条件匹配 + * @param conditions 条件方法体 + */ + fun length(conditions: IntConditions) { + cdsLengthConditions = conditions + } + /** * 标识为匿名类的主类调用对象 * @@ -271,6 +283,7 @@ class NameConditions @PublishedApi internal constructor() { if (cdsMatches != null) cdsMatches?.apply { conditions = conditions && it.matches(regex = this) } if (cdsLength >= 0) conditions = conditions && it.length == cdsLength if (cdsLengthRange.isEmpty().not()) conditions = conditions && it.length in cdsLengthRange + if (cdsLengthConditions != null) conditions = conditions && cdsLengthConditions?.invoke(it.length) == true } return conditions } @@ -291,6 +304,7 @@ class NameConditions @PublishedApi internal constructor() { if (cdsMatches != null) cdsMatches?.apply { conditions += " " } if (cdsLength >= 0) conditions += " " if (cdsLengthRange.isEmpty().not()) conditions += " " + if (cdsLengthConditions != null) conditions += " " return "[${conditions.trim()}]" } } \ No newline at end of file