Add TaskProvider property for Kotlin compile tasks in compilations

This commit is contained in:
Sergey Igushkin
2020-06-16 01:44:40 +03:00
parent 1ebb116056
commit f4e4baa253
8 changed files with 29 additions and 6 deletions
@@ -11,6 +11,7 @@ import org.gradle.api.attributes.AttributeContainer
import org.gradle.api.attributes.HasAttributes import org.gradle.api.attributes.HasAttributes
import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.file.FileCollection import org.gradle.api.file.FileCollection
import org.gradle.api.tasks.TaskProvider
import org.gradle.util.ConfigureUtil import org.gradle.util.ConfigureUtil
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
import org.jetbrains.kotlin.gradle.dsl.KotlinCompile import org.jetbrains.kotlin.gradle.dsl.KotlinCompile
@@ -52,6 +53,8 @@ interface KotlinCompilation<out T : KotlinCommonOptions> : Named, HasAttributes,
val compileKotlinTask: KotlinCompile<T> val compileKotlinTask: KotlinCompile<T>
val compileKotlinTaskProvider: TaskProvider<out KotlinCompile<T>>
val kotlinOptions: T val kotlinOptions: T
fun kotlinOptions(configure: T.() -> Unit) fun kotlinOptions(configure: T.() -> Unit)
@@ -52,9 +52,10 @@ abstract class AbstractKotlinCompilation<T : KotlinCommonOptions>(
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
override val compileKotlinTask: KotlinCompile<T> override val compileKotlinTask: KotlinCompile<T>
get() = (target.project.tasks.getByName(compileKotlinTaskName) as KotlinCompile<T>) get() = compileKotlinTaskProvider.get()
val compileKotlinTaskHolder: TaskProvider<KotlinCompile<T>> @Suppress("UNCHECKED_CAST")
override val compileKotlinTaskProvider: TaskProvider<out KotlinCompile<T>>
get() = target.project.locateTask(compileKotlinTaskName)!! get() = target.project.locateTask(compileKotlinTaskName)!!
// Don't declare this property in the constructor to avoid NPE // Don't declare this property in the constructor to avoid NPE
@@ -8,6 +8,7 @@
// Old package for compatibility // Old package for compatibility
package org.jetbrains.kotlin.gradle.plugin.mpp package org.jetbrains.kotlin.gradle.plugin.mpp
import org.gradle.api.tasks.TaskProvider
import org.gradle.util.WrapUtil import org.gradle.util.WrapUtil
import org.jetbrains.kotlin.gradle.dsl.KotlinJsOptions import org.jetbrains.kotlin.gradle.dsl.KotlinJsOptions
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
@@ -49,6 +50,10 @@ open class KotlinJsCompilation(
override val compileKotlinTask: Kotlin2JsCompile override val compileKotlinTask: Kotlin2JsCompile
get() = super.compileKotlinTask as Kotlin2JsCompile get() = super.compileKotlinTask as Kotlin2JsCompile
@Suppress("UNCHECKED_CAST")
override val compileKotlinTaskProvider: TaskProvider<out Kotlin2JsCompile>
get() = super.compileKotlinTaskProvider as TaskProvider<out Kotlin2JsCompile>
internal val packageJsonHandlers = mutableListOf<PackageJson.() -> Unit>() internal val packageJsonHandlers = mutableListOf<PackageJson.() -> Unit>()
@Suppress("unused") @Suppress("unused")
@@ -23,6 +23,11 @@ import org.jetbrains.kotlin.gradle.plugin.getTestedVariantData
override val compileKotlinTask: org.jetbrains.kotlin.gradle.tasks.KotlinCompile override val compileKotlinTask: org.jetbrains.kotlin.gradle.tasks.KotlinCompile
get() = super.compileKotlinTask as org.jetbrains.kotlin.gradle.tasks.KotlinCompile get() = super.compileKotlinTask as org.jetbrains.kotlin.gradle.tasks.KotlinCompile
@Suppress("UNCHECKED_CAST")
override val compileKotlinTaskProvider: TaskProvider<out org.jetbrains.kotlin.gradle.tasks.KotlinCompile>
get() = super.compileKotlinTaskProvider as TaskProvider<out org.jetbrains.kotlin.gradle.tasks.KotlinCompile>
@Suppress("UnstableApiUsage") @Suppress("UnstableApiUsage")
internal val testedVariantArtifacts: Property<FileCollection> = target.project.objects.property(FileCollection::class.java) internal val testedVariantArtifacts: Property<FileCollection> = target.project.objects.property(FileCollection::class.java)
@@ -17,6 +17,10 @@ open class KotlinJvmCompilation(
override val processResourcesTaskName: String override val processResourcesTaskName: String
get() = disambiguateName("processResources") get() = disambiguateName("processResources")
@Suppress("UNCHECKED_CAST")
override val compileKotlinTaskProvider: TaskProvider<out org.jetbrains.kotlin.gradle.tasks.KotlinCompile>
get() = super.compileKotlinTaskProvider as TaskProvider<out org.jetbrains.kotlin.gradle.tasks.KotlinCompile>
override val compileKotlinTask: org.jetbrains.kotlin.gradle.tasks.KotlinCompile override val compileKotlinTask: org.jetbrains.kotlin.gradle.tasks.KotlinCompile
get() = super.compileKotlinTask as org.jetbrains.kotlin.gradle.tasks.KotlinCompile get() = super.compileKotlinTask as org.jetbrains.kotlin.gradle.tasks.KotlinCompile
} }
@@ -76,7 +76,7 @@ class KotlinMetadataTargetConfigurator(kotlinPluginVersion: String) :
// Clear the dependencies of the compilation so that they don't take time resolving during task graph construction: // Clear the dependencies of the compilation so that they don't take time resolving during task graph construction:
compileDependencyFiles = target.project.files() compileDependencyFiles = target.project.files()
} }
compileKotlinTaskHolder.configure { it.onlyIf { target.project.isCompatibilityMetadataVariantEnabled } } compileKotlinTaskProvider.configure { it.onlyIf { target.project.isCompatibilityMetadataVariantEnabled } }
} }
createMergedAllSourceSetsConfigurations(target) createMergedAllSourceSetsConfigurations(target)
@@ -280,7 +280,7 @@ class KotlinMetadataTargetConfigurator(kotlinPluginVersion: String) :
} else { } else {
if (platformCompilations.filterIsInstance<KotlinNativeCompilation>().none { it.konanTarget.enabledOnCurrentHost }) { if (platformCompilations.filterIsInstance<KotlinNativeCompilation>().none { it.konanTarget.enabledOnCurrentHost }) {
// Then we don't have any platform module to put this compiled source set to, so disable the compilation task: // Then we don't have any platform module to put this compiled source set to, so disable the compilation task:
compileKotlinTaskHolder.configure { it.enabled = false } compileKotlinTaskProvider.configure { it.enabled = false }
// Also clear the dependency files (classpath) of the compilation so that the host-specific dependencies are // Also clear the dependency files (classpath) of the compilation so that the host-specific dependencies are
// not resolved: // not resolved:
compileDependencyFiles = project.files() compileDependencyFiles = project.files()
@@ -13,6 +13,7 @@ import org.gradle.api.Project
import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.file.FileCollection import org.gradle.api.file.FileCollection
import org.gradle.api.file.SourceDirectorySet import org.gradle.api.file.SourceDirectorySet
import org.gradle.api.tasks.TaskProvider
import org.gradle.util.ConfigureUtil import org.gradle.util.ConfigureUtil
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
@@ -23,7 +24,6 @@ import org.jetbrains.kotlin.gradle.plugin.sources.getSourceSetHierarchy
import org.jetbrains.kotlin.gradle.plugin.sources.getVisibleSourceSetsFromAssociateCompilations import org.jetbrains.kotlin.gradle.plugin.sources.getVisibleSourceSetsFromAssociateCompilations
import org.jetbrains.kotlin.gradle.targets.metadata.getMetadataCompilationForSourceSet import org.jetbrains.kotlin.gradle.targets.metadata.getMetadataCompilationForSourceSet
import org.jetbrains.kotlin.gradle.tasks.KotlinNativeCompile import org.jetbrains.kotlin.gradle.tasks.KotlinNativeCompile
import org.jetbrains.kotlin.gradle.utils.SingleWarningPerBuild
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
import org.jetbrains.kotlin.konan.target.HostManager import org.jetbrains.kotlin.konan.target.HostManager
import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.konan.target.KonanTarget
@@ -42,6 +42,10 @@ abstract class AbstractKotlinNativeCompilation(
get() = super.compileKotlinTask as KotlinNativeCompile get() = super.compileKotlinTask as KotlinNativeCompile
// A collection containing all source sets used by this compilation // A collection containing all source sets used by this compilation
@Suppress("UNCHECKED_CAST")
override val compileKotlinTaskProvider: TaskProvider<out KotlinNativeCompile>
get() = super.compileKotlinTaskProvider as TaskProvider<out KotlinNativeCompile>
// (taking into account dependencies between source sets). Used by both compilation // (taking into account dependencies between source sets). Used by both compilation
// and linking tasks. Unlike kotlinSourceSets, includes dependency source sets. // and linking tasks. Unlike kotlinSourceSets, includes dependency source sets.
// TODO: Move into the compilation task when the linking task does klib linking instead of compilation. // TODO: Move into the compilation task when the linking task does klib linking instead of compilation.
@@ -9,6 +9,7 @@ import groovy.lang.Closure
import org.gradle.api.attributes.AttributeContainer import org.gradle.api.attributes.AttributeContainer
import org.gradle.api.file.FileCollection import org.gradle.api.file.FileCollection
import org.gradle.api.file.SourceDirectorySet import org.gradle.api.file.SourceDirectorySet
import org.gradle.api.tasks.TaskProvider
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
import org.jetbrains.kotlin.gradle.dsl.KotlinCompile import org.jetbrains.kotlin.gradle.dsl.KotlinCompile
import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.*
@@ -297,7 +298,7 @@ class MockKotlinCompilation(
//region Not implemented //region Not implemented
override val target: KotlinTarget get() = throw UnsupportedOperationException() override val target: KotlinTarget get() = throw UnsupportedOperationException()
override val compileKotlinTaskProvider: TaskProvider<out KotlinCompile<KotlinCommonOptions>> get() = throw UnsupportedOperationException()
override fun getAttributes(): AttributeContainer = throw UnsupportedOperationException() override fun getAttributes(): AttributeContainer = throw UnsupportedOperationException()
override fun dependencies(configure: KotlinDependencyHandler.() -> Unit) = throw UnsupportedOperationException() override fun dependencies(configure: KotlinDependencyHandler.() -> Unit) = throw UnsupportedOperationException()
override fun dependencies(configureClosure: Closure<Any?>) = throw UnsupportedOperationException() override fun dependencies(configureClosure: Closure<Any?>) = throw UnsupportedOperationException()