com.didichuxing.doraemonkit.plugin.transform.DoKitBaseTransform.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of dokitx-plugin Show documentation
Show all versions of dokitx-plugin Show documentation
DoKit is an efficiency platform for the entire life cycle of general front-end product research and development.
package com.didichuxing.doraemonkit.plugin.transform
import com.android.build.api.transform.QualifiedContent
import com.android.build.api.transform.Transform
import com.android.build.api.transform.TransformInvocation
import com.android.build.gradle.BaseExtension
import com.android.build.gradle.internal.pipeline.TransformManager
import com.didichuxing.doraemonkit.plugin.DoKitTransformInvocation
import com.didichuxing.doraemonkit.plugin.println
import com.didiglobal.booster.annotations.Priority
import com.didiglobal.booster.gradle.*
import com.didiglobal.booster.transform.AbstractKlassPool
import com.didiglobal.booster.transform.Transformer
import org.gradle.api.Project
/**
* Represents the transform base
* DoKitCommTransform 作用于 CommTransformer、BigImgTransformer、UrlConnectionTransformer、GlobalSlowMethodTransformer
* @author johnsonlee
*/
open class DoKitBaseTransform protected constructor(val project: Project) : Transform() {
/*transformers
* Preload transformers as List to fix NoSuchElementException caused by ServiceLoader in parallel mode
* booster 的默认出炉逻辑 DoKit已重写自处理
*/
open val transformers = listOf()
internal val verifyEnabled = project.getProperty(OPT_TRANSFORM_VERIFY, false)
private val android: BaseExtension = project.getAndroid()
private lateinit var androidKlassPool: AbstractKlassPool
init {
project.afterEvaluate {
androidKlassPool = object : AbstractKlassPool(android.bootClasspath) {}
}
}
val bootKlassPool: AbstractKlassPool
get() = androidKlassPool
override fun getName() = this.javaClass.simpleName
override fun isIncremental() = !verifyEnabled
override fun isCacheable() = !verifyEnabled
override fun getInputTypes(): MutableSet =
TransformManager.CONTENT_CLASS
override fun getScopes(): MutableSet = when {
transformers.isEmpty() -> mutableSetOf()
project.plugins.hasPlugin("com.android.library") -> SCOPE_PROJECT
project.plugins.hasPlugin("com.android.application") -> SCOPE_FULL_PROJECT
project.plugins.hasPlugin("com.android.dynamic-feature") -> SCOPE_FULL_WITH_FEATURES
else -> TODO("Not an Android project")
}
override fun getReferencedScopes(): MutableSet = when {
transformers.isEmpty() -> when {
project.plugins.hasPlugin("com.android.library") -> SCOPE_PROJECT
project.plugins.hasPlugin("com.android.application") -> SCOPE_FULL_PROJECT
project.plugins.hasPlugin("com.android.dynamic-feature") -> SCOPE_FULL_WITH_FEATURES
else -> TODO("Not an Android project")
}
else -> super.getReferencedScopes()
}
final override fun transform(invocation: TransformInvocation) {
DoKitTransformInvocation(invocation, this).apply {
if (isIncremental) {
doIncrementalTransform()
} else {
outputProvider?.deleteAll()
doFullTransform()
}
}
}
}
/**
* The option for transform outputs verifying, default is false
*/
private const val OPT_TRANSFORM_VERIFY = "dokit.transform.verify"
© 2015 - 2025 Weber Informatics LLC | Privacy Policy