Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Avoid eager task initialization #261

Merged
merged 14 commits into from
Aug 17, 2020
6 changes: 3 additions & 3 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ buildscript {
}

dependencies {
classpath "com.android.tools.build:gradle:4.1.0-beta04" // compile against 4.1.0-beta04, but maintain compat to 3.4.0
classpath "com.android.tools.build:gradle:4.1.0-rc01" // compile against 4.1.0-rc01, but maintain compat to 3.4.0
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.72"
classpath "io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.9.1"
}
Expand Down Expand Up @@ -58,7 +58,7 @@ tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
// Build dependencies
dependencies {
kapt "com.squareup.moshi:moshi-kotlin-codegen:1.9.3"
compileOnly "com.android.tools.build:gradle:4.1.0-beta04"
compileOnly "com.android.tools.build:gradle:4.1.0-rc01"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.72"

// For uploading proguard/ndk files
Expand All @@ -73,7 +73,7 @@ dependencies {
// For multiple I/O use cases
implementation "com.squareup.okio:okio:2.7.0"

testImplementation "com.android.tools.build:gradle:4.0.0"
testImplementation "com.android.tools.build:gradle:4.1.0-rc01"
testImplementation "junit:junit:4.12"
testImplementation "org.mockito:mockito-core:2.28.2"
testImplementation "com.squareup.okhttp3:mockwebserver:4.8.0"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,11 @@ abstract class BaseBugsnagManifestUuidTask(objects: ObjectFactory) : DefaultTask
*/
open class BugsnagManifestUuidTask @Inject constructor(objects: ObjectFactory) : BaseBugsnagManifestUuidTask(objects) {

companion object {
private const val ASSEMBLE_TASK = "assemble"
private const val BUNDLE_TASK = "bundle"
}

@get:Internal
internal lateinit var variantOutput: ApkVariantOutput

Expand Down Expand Up @@ -157,7 +162,7 @@ open class BugsnagManifestUuidTask @Inject constructor(objects: ObjectFactory) :
private fun isRunningAssembleTask(project: Project,
variant: ApkVariant,
output: ApkVariantOutput): Boolean {
return isRunningTaskWithPrefix(project, variant, output, BugsnagPlugin.ASSEMBLE_TASK)
return isRunningTaskWithPrefix(project, variant, output, ASSEMBLE_TASK)
}

/**
Expand All @@ -166,7 +171,7 @@ open class BugsnagManifestUuidTask @Inject constructor(objects: ObjectFactory) :
private fun isRunningBundleTask(project: Project,
variant: ApkVariant,
output: ApkVariantOutput): Boolean {
return isRunningTaskWithPrefix(project, variant, output, BugsnagPlugin.BUNDLE_TASK)
return isRunningTaskWithPrefix(project, variant, output, BUNDLE_TASK)
}

/**
Expand All @@ -178,13 +183,42 @@ open class BugsnagManifestUuidTask @Inject constructor(objects: ObjectFactory) :
output: ApkVariantOutput,
prefix: String): Boolean {
val taskNames = HashSet<String>()
val plugin = project.plugins.getPlugin(BugsnagPlugin::class.java)
taskNames.addAll(plugin.findTaskNamesForPrefix(variant, output, prefix))
taskNames.addAll(findTaskNamesForPrefix(variant, output, prefix))

return project.gradle.taskGraph.allTasks.any { task ->
taskNames.any {
task.name.endsWith(it)
}
}
}



/**
* Finds all the task names which can be used to assemble a variant, and replaces 'assemble' with the given
* prefix.
*
* E.g. [bundle, bundleRelease, bundleFooRelease]
*/
internal fun findTaskNamesForPrefix(variant: ApkVariant,
output: ApkVariantOutput,
prefix: String): Set<String> {
val variantName = output.name.split("-")[0].capitalize()
val assembleTask = variant.assembleProvider.orNull

val taskNames = HashSet<String>()
taskNames.add(prefix)

if (assembleTask != null) {
val assembleTaskName = assembleTask.name
val buildTypeTaskName = assembleTaskName.replace(variantName, "")
val buildType = buildTypeTaskName.replace(ASSEMBLE_TASK, "")
val variantTaskName = assembleTaskName.replace(buildType, "")

taskNames.add(assembleTaskName.replace(ASSEMBLE_TASK, prefix))
taskNames.add(buildTypeTaskName.replace(ASSEMBLE_TASK, prefix))
taskNames.add(variantTaskName.replace(ASSEMBLE_TASK, prefix))
}
return taskNames
}
}
Loading