Skip to content

Commit

Permalink
Fix compatibility issues on old Gradle versions that don't know how t…
Browse files Browse the repository at this point in the history
…o unwrap Providers (#443)

Signed-off-by: Alex Saveau <[email protected]>
  • Loading branch information
SUPERCILEX authored and bhurling committed Oct 21, 2018
1 parent f686d08 commit f4f43be
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import com.github.triplet.gradle.play.internal.ACCOUNT_CONFIG
import com.github.triplet.gradle.play.internal.AccountConfig
import com.github.triplet.gradle.play.internal.PLAY_PATH
import com.github.triplet.gradle.play.internal.configure
import com.github.triplet.gradle.play.internal.dependsOnCompat
import com.github.triplet.gradle.play.internal.get
import com.github.triplet.gradle.play.internal.newTask
import com.github.triplet.gradle.play.internal.set
Expand Down Expand Up @@ -107,7 +108,7 @@ class PlayPublisherPlugin : Plugin<Project> {
"bootstrap${variantName}PlayResources",
"Downloads the Play Store listing metadata for $variantName."
) { init() }
bootstrapAllTask.configure { dependsOn(bootstrapTask) }
bootstrapAllTask.configure { dependsOnCompat(bootstrapTask) }

val playResourcesTask = project.newTask<GenerateResources>(
"generate${variantName}PlayResources",
Expand All @@ -124,12 +125,12 @@ class PlayPublisherPlugin : Plugin<Project> {
init()
resDir = playResourcesTask.get().resDir

dependsOn(playResourcesTask)
dependsOnCompat(playResourcesTask)
}
publishListingAllTask.configure { dependsOn(publishListingTask) }
publishListingAllTask.configure { dependsOnCompat(publishListingTask) }
// TODO Remove in v3.0
project.newTask("publishListing$variantName", "", null) {
dependsOn(publishListingTask)
dependsOnCompat(publishListingTask)
doFirst { logger.warn("$name is deprecated, use ${publishListingTask.get().name} instead") }
}

Expand All @@ -140,9 +141,9 @@ class PlayPublisherPlugin : Plugin<Project> {
init()
resDir = playResourcesTask.get().resDir

dependsOn(playResourcesTask)
dependsOnCompat(playResourcesTask)
}
publishProductsAllTask.configure { dependsOn(publishProductsTask) }
publishProductsAllTask.configure { dependsOnCompat(publishProductsTask) }

val processPackageMetadata = project.newTask<ProcessPackageMetadata>(
"process${variantName}Metadata",
Expand All @@ -153,7 +154,7 @@ class PlayPublisherPlugin : Plugin<Project> {
checkManifestProvider.configure { dependsOn(processPackageMetadata) }
} catch (e: NoSuchMethodError) {
@Suppress("DEPRECATION")
checkManifest.dependsOn(processPackageMetadata)
checkManifest.dependsOnCompat(processPackageMetadata)
}

val publishApkTask = project.newTask<PublishApk>(
Expand All @@ -163,8 +164,8 @@ class PlayPublisherPlugin : Plugin<Project> {
init()
resDir = playResourcesTask.get().resDir

dependsOn(processPackageMetadata)
dependsOn(playResourcesTask)
dependsOnCompat(processPackageMetadata)
dependsOnCompat(playResourcesTask)
try {
variant.assembleProvider
} catch (e: NoSuchMethodError) {
Expand All @@ -173,10 +174,10 @@ class PlayPublisherPlugin : Plugin<Project> {
}?.let { dependsOn(it) }
?: logger.warn("Assemble task not found. Publishing APKs may not work.")
}
publishApkAllTask.configure { dependsOn(publishApkTask) }
publishApkAllTask.configure { dependsOnCompat(publishApkTask) }
// TODO Remove in v3.0
project.newTask("publishApk$variantName", "", null) {
dependsOn(publishApkTask)
dependsOnCompat(publishApkTask)
doFirst { logger.warn("$name is deprecated, use ${publishApkTask.get().name} instead") }
}

Expand All @@ -187,8 +188,8 @@ class PlayPublisherPlugin : Plugin<Project> {
init()
resDir = playResourcesTask.get().resDir

dependsOn(processPackageMetadata)
dependsOn(playResourcesTask)
dependsOnCompat(processPackageMetadata)
dependsOnCompat(playResourcesTask)
// Remove hack when AGP 3.2 reaches stable channel
project.tasks.findByName(
(variant as InstallableVariantImpl).variantData.getTaskName("bundle", ""))
Expand All @@ -197,7 +198,7 @@ class PlayPublisherPlugin : Plugin<Project> {
"'com.android.tools.build:gradle' v3.2+. " +
"Publishing App Bundles may not work.")
}
publishBundleAllTask.configure { dependsOn(publishBundleTask) }
publishBundleAllTask.configure { dependsOnCompat(publishBundleTask) }

val promoteReleaseTask = project.newTask<PromoteRelease>(
"promote${variantName}Artifact",
Expand All @@ -206,22 +207,22 @@ class PlayPublisherPlugin : Plugin<Project> {
init()
resDir = playResourcesTask.get().resDir

dependsOn(playResourcesTask)
dependsOnCompat(playResourcesTask)
}
promoteReleaseAllTask.configure { dependsOn(promoteReleaseTask) }
promoteReleaseAllTask.configure { dependsOnCompat(promoteReleaseTask) }

val publishTask = project.newTask<LifecycleHelperTask>(
"publish$variantName",
"Uploads APK or App Bundle and all Play Store metadata for $variantName."
) {
this.extension = extension

dependsOn(
dependsOnCompat(
if (extension.defaultToAppBundles) publishBundleTask else publishApkTask)
dependsOn(publishListingTask)
dependsOn(publishProductsTask)
dependsOnCompat(publishListingTask)
dependsOnCompat(publishProductsTask)
}
publishAllTask.configure { dependsOn(publishTask) }
publishAllTask.configure { dependsOnCompat(publishTask) }
}

project.afterEvaluate {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,9 @@ internal fun <T : Task> Provider<T>.configure(block: T.() -> Unit) {
}
}

internal fun Task.dependsOnCompat(lazy: Provider<out Task>) =
dependsOn(if (isConfigurationAvoidanceSupported) lazy else lazy.get())

internal operator fun ProductFlavor.get(name: String) = extras[name]

internal operator fun ProductFlavor.set(name: String, value: Any?) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ class CompatibilityTest(
.withPluginClasspath()
.withGradleDistribution(URI(gradleDist))
.withProjectDir(testProject.projectDir)
.withArguments("tasks")
.withArguments("checkReleaseManifest")
.build()
GradleRunner.create()
.withPluginClasspath()
Expand Down

0 comments on commit f4f43be

Please sign in to comment.