@@ -8,6 +8,7 @@ import app.revanced.extension.shared.Logger
88import app.revanced.extension.shared.Utils
99import de.robv.android.xposed.XC_MethodHook
1010import de.robv.android.xposed.XposedBridge
11+ import de.robv.android.xposed.XposedHelpers
1112import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam
1213import io.github.chsbuffer.revancedxposed.BuildConfig.DEBUG
1314import org.luckypray.dexkit.DexKitBridge
@@ -17,7 +18,9 @@ import org.luckypray.dexkit.result.MethodData
1718import org.luckypray.dexkit.wrap.DexClass
1819import org.luckypray.dexkit.wrap.DexField
1920import org.luckypray.dexkit.wrap.DexMethod
21+ import java.lang.reflect.Constructor
2022import java.lang.reflect.Member
23+ import java.lang.reflect.Method
2124import kotlin.reflect.KFunction0
2225import kotlin.system.measureTimeMillis
2326
@@ -36,11 +39,30 @@ interface IHook {
3639 }
3740
3841 fun DexClass.toClass () = getInstance(classLoader)
39- fun DexMethod.toMethod () = getMethodInstance(classLoader)
40- fun DexMethod.toMember () = when {
41- isMethod -> getMethodInstance(classLoader)
42- isConstructor -> getConstructorInstance(classLoader)
43- else -> throw NotImplementedError ()
42+ fun DexMethod.toMethod (): Method {
43+ var clz = classLoader.loadClass(className)
44+ do {
45+ return XposedHelpers .findMethodExactIfExists(clz, name, * paramTypeNames.toTypedArray())
46+ ? : continue
47+ } while (clz.superclass.also { clz = it } != null )
48+ throw NoSuchMethodException (" Method $this not found" )
49+ }
50+
51+ fun DexMethod.toConstructor (): Constructor <* > {
52+ var clz = classLoader.loadClass(className)
53+ do {
54+ return XposedHelpers .findConstructorExactIfExists(clz, * paramTypeNames.toTypedArray())
55+ ? : continue
56+ } while (clz.superclass.also { clz = it } != null )
57+ throw NoSuchMethodException (" Method $this not found" )
58+ }
59+
60+ fun DexMethod.toMember (): Member {
61+ return when {
62+ isMethod -> toMethod()
63+ isConstructor -> toConstructor()
64+ else -> throw NotImplementedError ()
65+ }
4466 }
4567
4668 fun DexField.toField () = getFieldInstance(classLoader)
0 commit comments