@@ -3,32 +3,29 @@ package app.revanced.patcher.util
3
3
import app.revanced.patcher.patch.PatchException
4
4
import app.revanced.patcher.util.proxy.mutableTypes.MutableClass
5
5
import com.android.tools.smali.dexlib2.iface.ClassDef
6
- import kotlin.collections.mutableMapOf
7
6
8
7
@Deprecated(" Instead use PatchClasses" )
9
8
typealias ProxyClassList = PatchClasses
10
9
11
10
/* *
12
- * A set of all classes for the target app and any extension classes.
11
+ * All classes for the target app and any extension classes.
13
12
*/
14
13
class PatchClasses internal constructor(
15
14
/* *
16
15
* Pool of both immutable and mutable classes.
17
16
*/
18
17
internal val pool : MutableMap <String , ClassDef >
19
18
) {
20
- /* *
21
- * Mutable classes. All instances are also found in [pool].
22
- */
23
- private val mutablePool = mutableMapOf<String , MutableClass >()
19
+
20
+ internal constructor (set: Set <ClassDef >) :
21
+ this (set.associateByTo(mutableMapOf ()) { it.type })
24
22
25
23
internal fun addClass (classDef : ClassDef ) {
26
24
pool[classDef.type] = classDef
27
25
}
28
26
29
27
internal fun close () {
30
28
pool.clear()
31
- mutablePool.clear()
32
29
}
33
30
34
31
/* *
@@ -61,33 +58,31 @@ class PatchClasses internal constructor(
61
58
* @param classDefType The full classname.
62
59
* @return A mutable version of the class type.
63
60
*/
64
- fun mutableClassBy (classDefType : String ) =
65
- mutablePool[classDefType] ? : MutableClass (
66
- pool.get(classDefType) ? : throw PatchException (" Could not find class: $classDefType " )
67
- ).also {
68
- mutablePool[classDefType] = it
69
- pool[classDefType] = it
61
+ fun mutableClassBy (classDefType : String ) : MutableClass {
62
+ var classDef = pool[classDefType] ? : throw PatchException (" Could not find class: $classDefType " )
63
+ if (classDef is MutableClass ) {
64
+ return classDef
70
65
}
66
+ classDef = MutableClass (classDef)
67
+ pool[classDefType] = classDef
68
+ return classDef
69
+ }
71
70
72
71
/* *
73
- * Find a class with a predicate.
74
- *
75
72
* @param classDef An immutable class.
76
73
* @return A mutable version of the class definition.
77
74
*/
78
75
fun mutableClassBy (classDef : ClassDef ) =
79
- mutablePool[classDef.type] ? : MutableClass (classDef).also {
80
- val classType = classDef.type
81
- mutablePool[classType] = it
82
- pool[classType] = it
83
- }
76
+ if (classDef is MutableClass ) classDef else mutableClassBy(classDef.type)
84
77
85
78
/* *
86
- * Find a class with a predicate.
79
+ * Find a mutable class with a predicate.
87
80
*
88
81
* @param predicate A predicate to match the class.
89
82
* @return A mutable class that matches the predicate.
90
83
*/
91
84
fun mutableClassBy (predicate : (ClassDef ) -> Boolean ) =
92
- mutablePool.values.find { predicate(it) } ? : pool.values.find(predicate)?.let { mutableClassBy(it) }
85
+ classBy(predicate)?.let {
86
+ if (it is MutableClass ) it else mutableClassBy(it.type)
87
+ }
93
88
}
0 commit comments