feat: apply changes from ReVanced Patcher

BREAKING-CHANGE: Some annotations have been removed regarding fingerprints and patches.
This commit is contained in:
oSumAtrIX 2022-11-23 00:01:40 +01:00
parent 75df245ec3
commit ba9d998681
No known key found for this signature in database
GPG Key ID: A9B3094ACDB604B4
6 changed files with 10 additions and 56 deletions

View File

@ -3,7 +3,6 @@ package app.revanced.patcher
import app.revanced.patcher.data.Context import app.revanced.patcher.data.Context
import app.revanced.patcher.data.findIndexed import app.revanced.patcher.data.findIndexed
import app.revanced.patcher.extensions.PatchExtensions.dependencies import app.revanced.patcher.extensions.PatchExtensions.dependencies
import app.revanced.patcher.extensions.PatchExtensions.deprecated
import app.revanced.patcher.extensions.PatchExtensions.patchName import app.revanced.patcher.extensions.PatchExtensions.patchName
import app.revanced.patcher.extensions.nullOutputStream import app.revanced.patcher.extensions.nullOutputStream
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint.Companion.resolve import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint.Companion.resolve
@ -316,11 +315,6 @@ class Patcher(private val options: PatcherOptions) {
return PatchResultError("'$patchName' depends on '${dependency.patchName}' but the following error was raised: $errorMessage") return PatchResultError("'$patchName' depends on '${dependency.patchName}' but the following error was raised: $errorMessage")
} }
patchClass.deprecated?.let { (reason, replacement) ->
logger.warn("'$patchName' is deprecated, reason: $reason")
if (replacement != null) logger.warn("Use '${replacement.java.patchName}' instead")
}
val isResourcePatch = ResourcePatch::class.java.isAssignableFrom(patchClass) val isResourcePatch = ResourcePatch::class.java.isAssignableFrom(patchClass)
val patchInstance = patchClass.getDeclaredConstructor().newInstance() val patchInstance = patchClass.getDeclaredConstructor().newInstance()

View File

@ -1,11 +1,10 @@
package app.revanced.patcher.annotation package app.revanced.patcher.annotation
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import app.revanced.patcher.patch.Patch import app.revanced.patcher.patch.Patch
/** /**
* Annotation to constrain a [Patch] or [MethodFingerprint] to compatible packages. * Annotation to constrain a [Patch] to compatible packages.
* @param compatiblePackages A list of packages a [Patch] or [MethodFingerprint] is compatible with. * @param compatiblePackages A list of packages a [Patch] is compatible with.
*/ */
@Target(AnnotationTarget.CLASS) @Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME) @Retention(AnnotationRetention.RUNTIME)
@ -17,7 +16,7 @@ annotation class Compatibility(
/** /**
* Annotation to represent packages a patch can be compatible with. * Annotation to represent packages a patch can be compatible with.
* @param name The package identifier name. * @param name The package identifier name.
* @param versions The versions of the package the [Patch] or [MethodFingerprint]is compatible with. * @param versions The versions of the package the [Patch] is compatible with.
*/ */
@Target() @Target()
@Retention(AnnotationRetention.RUNTIME) @Retention(AnnotationRetention.RUNTIME)

View File

@ -1,19 +0,0 @@
package app.revanced.patcher.annotation
import app.revanced.patcher.data.Context
import app.revanced.patcher.patch.Patch
import kotlin.reflect.KClass
/**
* Declares a [Patch] deprecated for removal.
* @param reason The reason why the patch is deprecated.
* @param replacement The replacement for the deprecated patch, if any.
*/
@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME)
@MustBeDocumented
annotation class PatchDeprecated(
val reason: String,
val replacement: KClass<out Patch<Context>> = Patch::class
// Values cannot be nullable in annotations, so this will have to do.
)

View File

@ -1,11 +1,10 @@
package app.revanced.patcher.annotation package app.revanced.patcher.annotation
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import app.revanced.patcher.patch.Patch import app.revanced.patcher.patch.Patch
/** /**
* Annotation to name a [Patch] or [MethodFingerprint]. * Annotation to name a [Patch].
* @param name A suggestive name for the [Patch] or [MethodFingerprint]. * @param name A suggestive name for the [Patch].
*/ */
@Target(AnnotationTarget.CLASS) @Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME) @Retention(AnnotationRetention.RUNTIME)
@ -15,8 +14,8 @@ annotation class Name(
) )
/** /**
* Annotation to describe a [Patch] or [MethodFingerprint]. * Annotation to describe a [Patch].
* @param description A description for the [Patch] or [MethodFingerprint]. * @param description A description for the [Patch].
*/ */
@Target(AnnotationTarget.CLASS) @Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME) @Retention(AnnotationRetention.RUNTIME)
@ -27,8 +26,8 @@ annotation class Description(
/** /**
* Annotation to version a [Patch] or [MethodFingerprint]. * Annotation to version a [Patch].
* @param version The version of a [Patch] or [MethodFingerprint]. * @param version The version of a [Patch].
*/ */
@Target(AnnotationTarget.CLASS) @Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME) @Retention(AnnotationRetention.RUNTIME)

View File

@ -65,24 +65,11 @@ object PatchExtensions {
(it as? OptionsContainer)?.options (it as? OptionsContainer)?.options
} }
} }
val Class<out Patch<Context>>.deprecated: Pair<String, KClass<out Patch<Context>>?>?
get() = findAnnotationRecursively(PatchDeprecated::class)?.let {
it.reason to it.replacement.let { cl ->
if (cl == Patch::class) null else cl
}
}
} }
object MethodFingerprintExtensions { object MethodFingerprintExtensions {
val MethodFingerprint.name: String val MethodFingerprint.name: String
get() = javaClass.findAnnotationRecursively(Name::class)?.name ?: this.javaClass.simpleName get() = this.javaClass.simpleName
val MethodFingerprint.version
get() = javaClass.findAnnotationRecursively(Version::class)?.version ?: "0.0.1"
val MethodFingerprint.description
get() = javaClass.findAnnotationRecursively(Description::class)?.description
val MethodFingerprint.fuzzyPatternScanMethod val MethodFingerprint.fuzzyPatternScanMethod
get() = javaClass.findAnnotationRecursively(FuzzyPatternScanMethod::class) get() = javaClass.findAnnotationRecursively(FuzzyPatternScanMethod::class)

View File

@ -1,17 +1,11 @@
package app.revanced.patcher.usage.bytecode package app.revanced.patcher.usage.bytecode
import app.revanced.patcher.annotation.Name
import app.revanced.patcher.annotation.Version
import app.revanced.patcher.extensions.or import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.method.annotation.FuzzyPatternScanMethod import app.revanced.patcher.fingerprint.method.annotation.FuzzyPatternScanMethod
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import org.jf.dexlib2.AccessFlags import org.jf.dexlib2.AccessFlags
import org.jf.dexlib2.Opcode import org.jf.dexlib2.Opcode
@Name("example-fingerprint")
@FuzzyPatternScanMethod(2) @FuzzyPatternScanMethod(2)
@ExampleBytecodeCompatibility
@Version("0.0.1")
object ExampleFingerprint : MethodFingerprint( object ExampleFingerprint : MethodFingerprint(
"V", "V",
AccessFlags.PUBLIC or AccessFlags.STATIC, AccessFlags.PUBLIC or AccessFlags.STATIC,