mirror of
https://github.com/ReVanced/revanced-patcher.git
synced 2026-01-29 14:11:03 +00:00
41 lines
1.2 KiB
Kotlin
41 lines
1.2 KiB
Kotlin
package app.revanced.patcher.util.proxy
|
|
|
|
import app.revanced.patcher.util.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 allocates a mutable clone for the original class if needed.
|
|
* @param immutableClass The class to proxy
|
|
*/
|
|
class ClassProxy(
|
|
val immutableClass: ClassDef,
|
|
) {
|
|
internal var proxyUsed = false
|
|
internal lateinit var mutatedClass: MutableClass
|
|
|
|
init {
|
|
// in the instance, that a [MutableClass] is being proxied,
|
|
// do not create an additional clone and reuse the [MutableClass] instance
|
|
if (immutableClass is MutableClass) {
|
|
mutatedClass = immutableClass
|
|
proxyUsed = true
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Allocates 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.
|
|
* @return A mutable clone of the original class.
|
|
*/
|
|
fun resolve(): MutableClass {
|
|
if (!proxyUsed) {
|
|
proxyUsed = true
|
|
mutatedClass = MutableClass(immutableClass)
|
|
}
|
|
return mutatedClass
|
|
}
|
|
} |