forked from ReVanced/revanced-patcher
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ClassProxy.kt
31 lines (28 loc) 路 999 Bytes
/
ClassProxy.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package app.revanced.patcher.proxy
import app.revanced.patcher.proxy.mutableTypes.MutableClass
import org.jf.dexlib2.iface.ClassDef
/**
* A proxy class for a [ClassDef]
* A class proxy simply holds a reference to the original class
* and creates a mutable clone for the original class if needed.
* @param immutableClass The class to proxy
* @param originalIndex The original index of the class in the list of classes
*/
class ClassProxy(
val immutableClass: ClassDef,
val originalIndex: Int,
) {
internal var proxyUsed = false
internal lateinit var mutatedClass: MutableClass
/**
* Creates and returns a mutable clone of the original class
* A patch should always use the original immutable class reference to avoid unnecessary allocations for the mutable class
*/
fun resolve(): MutableClass {
if (!proxyUsed) {
proxyUsed = true
mutatedClass = MutableClass(immutableClass)
}
return mutatedClass
}
}