[Gradle] Add dependencySourcesConfigurationName to DefaultKotlinSourceSet
Move logic that creates configuration to resolve Dependency Sources to SourceSet factory from IDE resolver. Because when it is created during IDE import it will be reported as a warning. Since all configurations and tasks must be created before IDE import starts. ^KT-63226 Verification Pending
This commit is contained in:
committed by
Space Team
parent
1d4bca56b1
commit
c979e4e7be
+3
-34
@@ -5,59 +5,28 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.ide.dependencyResolvers
|
||||
|
||||
import org.gradle.api.artifacts.Configuration
|
||||
import org.gradle.api.artifacts.component.ModuleComponentIdentifier
|
||||
import org.gradle.api.artifacts.result.ResolvedVariantResult
|
||||
import org.jetbrains.kotlin.gradle.dsl.metadataTarget
|
||||
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
|
||||
import org.jetbrains.kotlin.gradle.idea.tcs.*
|
||||
import org.jetbrains.kotlin.gradle.idea.tcs.extras.sourcesClasspath
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
|
||||
import org.jetbrains.kotlin.gradle.plugin.ide.IdeAdditionalArtifactResolver
|
||||
import org.jetbrains.kotlin.gradle.plugin.ide.IdeaKotlinBinaryCapability
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.configureSourcesPublicationAttributes
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.internal
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.resolvableMetadataConfiguration
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.disambiguateName
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.internal
|
||||
import org.jetbrains.kotlin.gradle.utils.createResolvable
|
||||
import org.jetbrains.kotlin.gradle.utils.detachedResolvable
|
||||
|
||||
internal object IdeSourcesVariantsResolver : IdeAdditionalArtifactResolver {
|
||||
override fun resolve(sourceSet: KotlinSourceSet, dependencies: Set<IdeaKotlinDependency>) {
|
||||
val project = sourceSet.project
|
||||
val metadataTarget = project.multiplatformExtensionOrNull?.metadataTarget
|
||||
|
||||
val binaryDependenciesByCoordinates = dependencies
|
||||
.filterIsInstance<IdeaKotlinResolvedBinaryDependency>()
|
||||
.filter { dependency -> dependency.isKotlinCompileBinaryType }
|
||||
.groupBy { Coordinates(it.coordinates) }
|
||||
|
||||
val platformCompilation = sourceSet.internal
|
||||
.compilations
|
||||
.singleOrNull { it.platformType != KotlinPlatformType.common }
|
||||
val dependencySourceConfiguration = project.configurations
|
||||
.findByName(sourceSet.internal.dependencySourcesConfigurationName) ?: return
|
||||
|
||||
|
||||
// Shared source sets and platform source sets has different configurations for compile dependencies
|
||||
val configuration: Configuration
|
||||
val target: KotlinTarget
|
||||
if (platformCompilation == null) {
|
||||
target = metadataTarget ?: return // source set configured incorrectly, can't resolve artifact for that
|
||||
configuration = sourceSet.internal.resolvableMetadataConfiguration
|
||||
} else {
|
||||
target = platformCompilation.target
|
||||
configuration = platformCompilation.internal.configurations.compileDependencyConfiguration
|
||||
}
|
||||
|
||||
val sourcesConfig = project.configurations.detachedResolvable()
|
||||
sourcesConfig.apply {
|
||||
configureSourcesPublicationAttributes(target)
|
||||
extendsFrom(configuration)
|
||||
}
|
||||
|
||||
sourcesConfig.incoming.artifactView { it.isLenient = true }.artifacts.forEach { artifactDependency ->
|
||||
dependencySourceConfiguration.incoming.artifactView { it.isLenient = true }.artifacts.forEach { artifactDependency ->
|
||||
val coordinates = Coordinates(artifactDependency.variant)
|
||||
val binaryDependencies = binaryDependenciesByCoordinates[coordinates] ?: return@forEach
|
||||
binaryDependencies.forEach { dependency ->
|
||||
|
||||
+5
-1
@@ -11,9 +11,9 @@ import org.gradle.api.Action
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.file.SourceDirectorySet
|
||||
import org.jetbrains.kotlin.build.DEFAULT_KOTLIN_SOURCE_FILES_EXTENSIONS
|
||||
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
|
||||
import org.jetbrains.kotlin.gradle.plugin.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.launchInStage
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
||||
import org.jetbrains.kotlin.gradle.utils.*
|
||||
import org.jetbrains.kotlin.tooling.core.MutableExtras
|
||||
@@ -43,6 +43,10 @@ abstract class DefaultKotlinSourceSet @Inject constructor(
|
||||
override val runtimeOnlyConfigurationName: String
|
||||
get() = disambiguateName(RUNTIME_ONLY)
|
||||
|
||||
@ExperimentalKotlinGradlePluginApi
|
||||
override val dependencySourcesConfigurationName: String
|
||||
get() = disambiguateName("dependencySources")
|
||||
|
||||
@Deprecated("KT-55312")
|
||||
override val apiMetadataConfigurationName: String
|
||||
get() = lowerCamelCaseName(apiConfigurationName, METADATA_CONFIGURATION_NAME_SUFFIX)
|
||||
|
||||
+3
@@ -23,6 +23,9 @@ internal interface InternalKotlinSourceSet : KotlinSourceSet {
|
||||
val dependsOnClosure: ObservableSet<KotlinSourceSet>
|
||||
val withDependsOnClosure: ObservableSet<KotlinSourceSet>
|
||||
val compilations: MutableObservableSet<KotlinCompilation<*>>
|
||||
|
||||
/** Configuration that resolves into sources variants of all Source Set dependencies */
|
||||
val dependencySourcesConfigurationName: String
|
||||
}
|
||||
|
||||
internal suspend fun InternalKotlinSourceSet.awaitPlatformCompilations(): Set<KotlinCompilation<*>> {
|
||||
|
||||
+32
@@ -7,11 +7,18 @@ package org.jetbrains.kotlin.gradle.plugin.sources
|
||||
|
||||
import org.gradle.api.NamedDomainObjectFactory
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.artifacts.Configuration
|
||||
import org.gradle.api.attributes.Category
|
||||
import org.gradle.api.attributes.Usage
|
||||
import org.jetbrains.kotlin.gradle.dsl.metadataTarget
|
||||
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
|
||||
import org.jetbrains.kotlin.gradle.plugin.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsages
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.configureSourcesPublicationAttributes
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.internal
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.resolvableMetadataConfiguration
|
||||
import org.jetbrains.kotlin.gradle.targets.metadata.isKotlinGranularMetadataEnabled
|
||||
import org.jetbrains.kotlin.gradle.utils.createResolvable
|
||||
import org.jetbrains.kotlin.gradle.utils.maybeCreateDependencyScope
|
||||
import org.jetbrains.kotlin.gradle.utils.maybeCreateResolvable
|
||||
import java.io.File
|
||||
@@ -102,6 +109,31 @@ internal class DefaultKotlinSourceSetFactory(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
setupDependencySourcesConfiguration(sourceSet)
|
||||
}
|
||||
|
||||
private fun setupDependencySourcesConfiguration(sourceSet: DefaultKotlinSourceSet) {
|
||||
project.launch {
|
||||
val platformCompilation = sourceSet.awaitPlatformCompilations().singleOrNull()
|
||||
|
||||
// Shared source sets and platform source sets has different configurations for compile dependencies
|
||||
val configuration: Configuration
|
||||
val target: KotlinTarget
|
||||
if (platformCompilation == null) {
|
||||
target = project.multiplatformExtensionOrNull?.metadataTarget ?: return@launch // source set configured incorrectly, can't resolve artifact for that
|
||||
configuration = sourceSet.internal.resolvableMetadataConfiguration
|
||||
} else {
|
||||
target = platformCompilation.target
|
||||
configuration = platformCompilation.internal.configurations.compileDependencyConfiguration
|
||||
}
|
||||
|
||||
val sourcesConfig = project.configurations.createResolvable(sourceSet.dependencySourcesConfigurationName)
|
||||
sourcesConfig.apply {
|
||||
configureSourcesPublicationAttributes(target)
|
||||
extendsFrom(configuration)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun doCreateSourceSet(name: String): DefaultKotlinSourceSet =
|
||||
|
||||
+2
-1
@@ -25,11 +25,11 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsages
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType
|
||||
import org.jetbrains.kotlin.gradle.utils.targets
|
||||
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsCompilerAttribute
|
||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl
|
||||
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget
|
||||
import org.jetbrains.kotlin.gradle.util.*
|
||||
import org.jetbrains.kotlin.gradle.utils.targets
|
||||
import org.jetbrains.kotlin.gradle.utils.toMap
|
||||
import java.util.*
|
||||
import kotlin.test.*
|
||||
@@ -144,6 +144,7 @@ class ConfigurationsTest : MultiplatformExtensionTest() {
|
||||
project.evaluate()
|
||||
|
||||
project.configurations
|
||||
.filter { it.isCanBeConsumed }
|
||||
.filter { configuration ->
|
||||
configuration.attributes.contains(KotlinPlatformType.attribute) ||
|
||||
configuration.attributes.getAttribute(Usage.USAGE_ATTRIBUTE)?.name in KotlinUsages.values
|
||||
|
||||
Reference in New Issue
Block a user