[Gradle] Add missing kotlin-multiplatform tasks descriptions

#KT-31573 Fixed
This commit is contained in:
Alexander Likhachev
2022-08-23 00:38:39 +02:00
parent b7a7fce34e
commit bc684b8d36
9 changed files with 58 additions and 31 deletions
@@ -9,6 +9,7 @@ import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.attributes.AttributeContainer
import org.gradle.api.file.DuplicatesStrategy
import org.gradle.api.plugins.BasePlugin
import org.gradle.api.plugins.JavaBasePlugin
import org.gradle.api.tasks.TaskProvider
import org.gradle.jvm.tasks.Jar
@@ -27,7 +28,6 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.setupFragmentsMetadataForKpmM
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.setupKpmModulesPublication
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.copyAttributes
import org.jetbrains.kotlin.gradle.plugin.sources.DefaultLanguageSettingsBuilder
import org.jetbrains.kotlin.gradle.plugin.sources.SourceSetMetadataStorageForIde
import org.jetbrains.kotlin.gradle.plugin.sources.checkSourceSetVisibilityRequirements
import org.jetbrains.kotlin.gradle.plugin.sources.internal
import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService
@@ -302,21 +302,23 @@ private fun applyUserDefinedAttributesWithLegacyModel(
}
}
internal fun sourcesJarTask(compilation: KotlinCompilation<*>, componentName: String?, artifactNameAppendix: String): TaskProvider<Jar> =
internal fun sourcesJarTask(compilation: KotlinCompilation<*>, componentName: String, artifactNameAppendix: String): TaskProvider<Jar> =
sourcesJarTask(compilation.target.project, lazy { compilation.allKotlinSourceSets.associate { it.name to it.kotlin } }, componentName, artifactNameAppendix)
internal fun sourcesJarTask(
private fun sourcesJarTask(
project: Project,
sourceSets: Lazy<Map<String, Iterable<File>>>,
componentName: String?,
taskNamePrefix: String,
artifactNameAppendix: String
): TaskProvider<Jar> = sourcesJarTaskNamed(lowerCamelCaseName(componentName, "sourcesJar"), project, sourceSets, artifactNameAppendix)
): TaskProvider<Jar> = sourcesJarTaskNamed(lowerCamelCaseName(taskNamePrefix, "sourcesJar"), taskNamePrefix, project, sourceSets, artifactNameAppendix)
internal fun sourcesJarTaskNamed(
taskName: String,
componentName: String,
project: Project,
sourceSets: Lazy<Map<String, Iterable<File>>>,
artifactNameAppendix: String
artifactNameAppendix: String,
componentTypeName: String = "target",
): TaskProvider<Jar> {
project.locateTask<Jar>(taskName)?.let {
return it
@@ -327,6 +329,8 @@ internal fun sourcesJarTaskNamed(
sourcesJar.archiveClassifier.set("sources")
sourcesJar.isPreserveFileTimestamps = false
sourcesJar.isReproducibleFileOrder = true
sourcesJar.group = BasePlugin.BUILD_GROUP
sourcesJar.description = "Assembles a jar archive containing the sources of $componentTypeName '$componentName'."
}
project.whenEvaluated {
@@ -94,10 +94,11 @@ abstract class KotlinSoftwareComponent(
}
val sourcesArtifacts: Set<PublishArtifact> by lazy {
val sourcesJarTask = sourcesJarTask(
val sourcesJarTask = sourcesJarTaskNamed(
"sourcesJar",
name,
project,
lazy { project.kotlinExtension.sourceSets.associate { it.name to it.kotlin } },
null,
name.toLowerCase()
)
val sourcesJarArtifact = project.artifacts.add(Dependency.ARCHIVES_CONFIGURATION, sourcesJarTask) { sourcesJarArtifact ->
@@ -17,12 +17,14 @@ object GradleKpmDefaultKotlinSourceArchiveTaskConfigurator : GradleKpmSourceArch
override fun registerSourceArchiveTask(variant: GradleKpmVariant): TaskProvider<*> {
return sourcesJarTaskNamed(
taskName = variant.sourceArchiveTaskName,
componentName = variant.name,
project = variant.project,
sourceSets = lazy {
GradleKpmFragmentSourcesProvider().getSourcesFromRefinesClosureAsMap(variant)
.entries.associate { it.key.unambiguousNameInProject to it.value.get() }
},
artifactNameAppendix = variant.name
artifactNameAppendix = variant.name,
componentTypeName = "variant",
)
}
}
@@ -73,9 +73,11 @@ private fun configureMetadataExposure(module: GradleKpmModule) {
val sourcesArtifactAppendix = dashSeparatedName(module.moduleClassifier, "all", "sources")
val sourcesArtifact = sourcesJarTaskNamed(
module.disambiguateName("allSourcesJar"),
module.name,
project,
lazy { GradleKpmFragmentSourcesProvider().getAllFragmentSourcesAsMap(module).entries.associate { it.key.fragmentName to it.value.get() } },
sourcesArtifactAppendix
sourcesArtifactAppendix,
"module",
)
DocumentationVariantConfigurator().createSourcesElementsConfiguration(
project, sourceElementsConfigurationName(module),
@@ -341,7 +341,9 @@ class KotlinMetadataTargetConfigurator :
project.registerTask<TransformKotlinGranularMetadata>(
transformGranularMetadataTaskName(compilation.name),
listOf(sourceSet)
) { }
) {
it.description = "Generates serialized dependencies metadata for compilation '${compilation.name}' of target '${compilation.target.name}' (for tooling)"
}
compilation.compileDependencyFiles += createMetadataDependencyTransformationClasspath(
project.configurations.getByName(ALL_COMPILE_METADATA_CONFIGURATION_NAME),
@@ -498,11 +500,13 @@ internal class NativeSharedCompilationProcessor(
internal fun Project.createGenerateProjectStructureMetadataTask(module: GradleKpmModule): TaskProvider<GenerateProjectStructureMetadata> =
project.registerTask(lowerCamelCaseName("generate", module.moduleClassifier, "ProjectStructureMetadata")) { task ->
task.lazyKotlinProjectStructureMetadata = lazy { buildProjectStructureMetadata(module) }
task.description = "Generates serialized project structure metadata of module '${module.name}' (for tooling)"
}
internal fun Project.createGenerateProjectStructureMetadataTask(): TaskProvider<GenerateProjectStructureMetadata> =
project.registerTask(lowerCamelCaseName("generateProjectStructureMetadata")) { task ->
task.lazyKotlinProjectStructureMetadata = lazy { project.multiplatformExtension.kotlinProjectStructureMetadata }
task.description = "Generates serialized project structure metadata of the current project (for tooling)"
}
internal interface ResolvedMetadataFilesProvider {
@@ -10,6 +10,7 @@ import org.gradle.api.NamedDomainObjectContainer
import org.gradle.api.Project
import org.gradle.api.artifacts.Dependency
import org.gradle.api.attributes.Attribute
import org.gradle.api.plugins.BasePlugin
import org.gradle.jvm.tasks.Jar
import org.jetbrains.kotlin.gradle.dsl.KotlinNativeBinaryContainer
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
@@ -65,6 +66,8 @@ abstract class KotlinNativeTarget @Inject constructor(
val hostSpecificMetadataJar = project.locateOrRegisterTask<Jar>(hostSpecificMetadataJarTaskName) { metadataJar ->
metadataJar.archiveAppendix.set(project.provider { disambiguationClassifier.orEmpty().toLowerCase() })
metadataJar.archiveClassifier.set("metadata")
metadataJar.group = BasePlugin.BUILD_GROUP
metadataJar.description = "Assembles Kotlin metadata of target '${name}'."
val publishable = this@KotlinNativeTarget.publishable
metadataJar.onlyIf { publishable }
@@ -66,8 +66,8 @@ open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget> : AbstractKotl
if (binary !is TestExecutable) {
tasks.named(binary.compilation.target.artifactsTaskName).configure { it.dependsOn(result) }
locateOrRegisterTask<Task>(LifecycleBasePlugin.ASSEMBLE_TASK_NAME).configure { it.dependsOn(result) }
tasks.named(binary.compilation.target.artifactsTaskName).dependsOn(result)
locateOrRegisterTask<Task>(LifecycleBasePlugin.ASSEMBLE_TASK_NAME).dependsOn(result)
}
if (binary is Framework) {
@@ -254,7 +254,10 @@ open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget> : AbstractKotl
}
override fun configureArchivesAndComponent(target: T): Unit = with(target.project) {
registerTask<DefaultTask>(target.artifactsTaskName) { }
registerTask<DefaultTask>(target.artifactsTaskName) {
it.group = BasePlugin.BUILD_GROUP
it.description = "Assembles outputs for target '${target.name}'."
}
target.compilations.all { createKlibCompilationTask(it) }
val apiElements = configurations.getByName(target.apiElementsConfigurationName)
@@ -299,7 +302,10 @@ open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget> : AbstractKotl
}
target.binaries.prefixGroups.all { prefixGroup ->
val linkGroupTask = project.tasks.maybeCreate(prefixGroup.linkTaskName)
val linkGroupTask = project.locateOrRegisterTask<Task>(prefixGroup.linkTaskName) {
it.group = BasePlugin.BUILD_GROUP
it.description = "Links all binaries for target '${target.name}'."
}
prefixGroup.binaries.all {
linkGroupTask.dependsOn(it.linkTaskName)
}
@@ -307,7 +313,10 @@ open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget> : AbstractKotl
// Create an aggregate link task for each compilation.
target.compilations.all {
project.registerTask<DefaultTask>(it.binariesTaskName)
project.registerTask<DefaultTask>(it.binariesTaskName) { task ->
task.group = BasePlugin.BUILD_GROUP
task.description = "Links all binaries for compilation '${it.name}' of target '${it.target.name}'."
}
}
project.whenEvaluated {
@@ -435,20 +444,14 @@ open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget> : AbstractKotl
compilation.output.classesDirs.from(compileTaskProvider.map { it.outputFile })
project.project.tasks.named(compilation.compileAllTaskName).configure {
it.dependsOn(compileTaskProvider)
}
project.project.tasks.named(compilation.compileAllTaskName).dependsOn(compileTaskProvider)
if (compilation.isMainCompilationData()) {
if (compilation is KotlinNativeCompilation) {
project.project.tasks.named(compilation.target.artifactsTaskName).configure {
it.dependsOn(compileTaskProvider)
}
project.project.tasks.named(compilation.target.artifactsTaskName).dependsOn(compileTaskProvider)
}
project.project.tasks.named(LifecycleBasePlugin.ASSEMBLE_TASK_NAME).configure {
it.dependsOn(compileTaskProvider)
}
project.project.tasks.named(LifecycleBasePlugin.ASSEMBLE_TASK_NAME).dependsOn(compileTaskProvider)
}
val shouldAddCompileOutputsToElements = compilation.owner is GradleKpmVariant || compilation.isMainCompilationData()
if (shouldAddCompileOutputsToElements) {
@@ -552,7 +555,10 @@ internal class GradleKpmNativeTargetConfigurator<T : KotlinNativeTarget>(private
}
private fun configureBinariesTask(target: T) {
target.project.registerTask<DefaultTask>(target.artifactsTaskName) { }
target.project.registerTask<DefaultTask>(target.artifactsTaskName) {
it.group = BasePlugin.BUILD_GROUP
it.description = "Assembles outputs for target '${target.name}'."
}
}
}
@@ -58,6 +58,8 @@ internal fun TaskProvider<*>.dependsOn(other: TaskProvider<*>) = configure { it.
internal fun TaskProvider<*>.dependsOn(other: Task) = configure { it.dependsOn(other) }
internal fun TaskProvider<*>.dependsOn(otherPath: String) = configure { it.dependsOn(otherPath) }
internal inline fun <reified S : Task> TaskCollection<in S>.withType(): TaskCollection<S> = withType(S::class.java)
/**
@@ -7,15 +7,16 @@ package org.jetbrains.kotlin.gradle.testing.internal
import org.gradle.api.Project
import org.gradle.api.Task
import org.gradle.api.plugins.BasePlugin
import org.gradle.api.plugins.JavaBasePlugin
import org.gradle.api.tasks.TaskProvider
import org.gradle.api.tasks.testing.AbstractTestTask
import org.gradle.language.base.plugins.LifecycleBasePlugin
import org.jetbrains.kotlin.gradle.tasks.dependsOn
import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask
import org.jetbrains.kotlin.gradle.tasks.registerTask
import org.jetbrains.kotlin.gradle.tasks.locateTask
import org.jetbrains.kotlin.gradle.utils.getSystemProperty
import org.jetbrains.kotlin.gradle.utils.isConfigurationCacheAvailable
/**
* Internal service for creating aggregated test tasks and registering all test tasks.
@@ -102,10 +103,12 @@ class KotlinTestsRegistry(val project: Project, val allTestsTaskName: String = "
private val Project.cleanAllTestTask: TaskProvider<*>
get() {
val taskName = cleanTaskName(allTestsTask.name)
return project.locateTask<Task>(taskName)
?: project.registerTask<Task>(taskName).also { cleanAllTest ->
tasks.named(LifecycleBasePlugin.CLEAN_TASK_NAME).dependsOn(cleanAllTest)
}
return project.locateOrRegisterTask<Task>(taskName) { cleanAllTest ->
cleanAllTest.group = BasePlugin.BUILD_GROUP
cleanAllTest.description = "Deletes all the test results."
}.also { cleanAllTest ->
tasks.named(LifecycleBasePlugin.CLEAN_TASK_NAME).dependsOn(cleanAllTest)
}
}
companion object {