@@ -84,32 +84,43 @@ internal abstract class MethodHookAsmClassVisitorFactory :
84
84
*/
85
85
private fun getConfigForClassData (classData : ClassData ): List <Config > = configs()
86
86
.asSequence()
87
- .filter { config ->
87
+ .filterByPackage(classData)
88
+ .filterBySuperClass(classData)
89
+ .filterByInterfaces(classData)
90
+ .filterByClasses(classData)
91
+ .toList()
92
+
93
+ private fun Sequence<Config>.filterByPackage (classData : ClassData ): Sequence <Config > =
94
+ this .filter { config ->
88
95
if (config.packageId.isAll()) return @filter true
89
96
90
97
val configPackage = config.packageId.valueOrThrow()
91
98
classData.className.startsWith(" $configPackage ." )
92
99
}
93
- .filter { config ->
100
+
101
+ private fun Sequence<Config>.filterBySuperClass (classData : ClassData ): Sequence <Config > =
102
+ this .filter { config ->
94
103
if (config.superClass.isAll()) return @filter true
95
104
96
105
val configSuperClass = config.superClass.valueOrThrow()
97
106
classData.superClasses.contains(configSuperClass)
98
107
}
99
- .filter { config ->
108
+
109
+ private fun Sequence<Config>.filterByInterfaces (classData : ClassData ): Sequence <Config > =
110
+ this .filter { config ->
100
111
if (config.interfaces.isAll()) return @filter true
101
112
102
113
val configInterfaces = config.interfaces.valueOrThrow()
103
114
classData.interfaces.intersect(configInterfaces.toSet()).isNotEmpty()
104
115
}
105
- .filter { config ->
116
+
117
+ private fun Sequence<Config>.filterByClasses (classData : ClassData ): Sequence <Config > =
118
+ this .filter { config ->
106
119
if (config.clazz.isAll()) return @filter true
107
120
108
121
val configClass = config.clazz.valueOrThrow()
109
122
classData.className == configClass
110
123
}
111
- .toList()
112
-
113
124
114
125
/* *
115
126
* Loads and returns the list of configurations for method hooking.
0 commit comments