[Gradle] Implement internal intransitiveMetadataConfiguration
- Implemented additional intransitiveMetadataConfiguration to support dependencies that shall not be added transitively to dependsOn edges
This commit is contained in:
Vendored
-1
@@ -1,3 +1,2 @@
|
||||
kotlin.mpp.enableGranularSourceSetsMetadata=true
|
||||
kotlin.native.enableDependencyPropagation=false
|
||||
kotlin.mpp.enableHierarchicalCommonization=false
|
||||
|
||||
+1
-1
@@ -47,4 +47,4 @@ interface KotlinSourceSet : Named, HasKotlinDependencies {
|
||||
fun requiresVisibilityOf(other: KotlinSourceSet)
|
||||
|
||||
fun addCustomSourceFilesExtensions(extensions: List<String>) {}
|
||||
}
|
||||
}
|
||||
|
||||
+3
@@ -233,6 +233,9 @@ internal class PropertiesProvider private constructor(private val project: Proje
|
||||
val enableNativeDistributionCommonizationCache: Boolean
|
||||
get() = booleanProperty("kotlin.mpp.enableNativeDistributionCommonizationCache") ?: true
|
||||
|
||||
val enableIntransitiveMetadataConfiguration: Boolean
|
||||
get() = booleanProperty("kotlin.mpp.enableIntransitiveMetadataConfiguration") ?: false
|
||||
|
||||
/**
|
||||
* Dependencies caching strategy for all targets that support caches.
|
||||
*/
|
||||
|
||||
+6
-1
@@ -21,7 +21,6 @@ import org.jetbrains.kotlin.gradle.plugin.whenEvaluated
|
||||
import org.jetbrains.kotlin.gradle.utils.*
|
||||
import java.io.File
|
||||
import java.util.*
|
||||
import kotlin.collections.HashSet
|
||||
|
||||
const val METADATA_CONFIGURATION_NAME_SUFFIX = "DependenciesMetadata"
|
||||
|
||||
@@ -54,6 +53,12 @@ class DefaultKotlinSourceSet(
|
||||
override val runtimeOnlyMetadataConfigurationName: String
|
||||
get() = lowerCamelCaseName(runtimeOnlyConfigurationName, METADATA_CONFIGURATION_NAME_SUFFIX)
|
||||
|
||||
/**
|
||||
* Dependencies added to this configuration will not be exposed to any other source set.
|
||||
*/
|
||||
val intransitiveMetadataConfigurationName: String
|
||||
get() = lowerCamelCaseName(disambiguateName(INTRANSITIVE), METADATA_CONFIGURATION_NAME_SUFFIX)
|
||||
|
||||
override val kotlin: SourceDirectorySet = createDefaultSourceDirectorySet(project, "$name Kotlin source").apply {
|
||||
filter.include("**/*.java")
|
||||
filter.include("**/*.kt")
|
||||
|
||||
+6
-3
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.gradle.plugin.sources
|
||||
import org.gradle.api.NamedDomainObjectFactory
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.attributes.Usage
|
||||
import org.gradle.api.internal.file.FileResolver
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsages
|
||||
@@ -74,7 +73,8 @@ internal class DefaultKotlinSourceSetFactory(
|
||||
apiConfigurationName to apiMetadataConfigurationName,
|
||||
implementationConfigurationName to implementationMetadataConfigurationName,
|
||||
compileOnlyConfigurationName to compileOnlyMetadataConfigurationName,
|
||||
runtimeOnlyConfigurationName to runtimeOnlyMetadataConfigurationName
|
||||
runtimeOnlyConfigurationName to runtimeOnlyMetadataConfigurationName,
|
||||
null to intransitiveMetadataConfigurationName
|
||||
)
|
||||
}
|
||||
|
||||
@@ -84,7 +84,10 @@ internal class DefaultKotlinSourceSetFactory(
|
||||
attributes.attribute(Usage.USAGE_ATTRIBUTE, project.usageByName(KotlinUsages.KOTLIN_API))
|
||||
isVisible = false
|
||||
isCanBeConsumed = false
|
||||
extendsFrom(project.configurations.maybeCreate(configurationName))
|
||||
|
||||
if (configurationName != null) {
|
||||
extendsFrom(project.configurations.maybeCreate(configurationName))
|
||||
}
|
||||
|
||||
if (project.isKotlinGranularMetadataEnabled) {
|
||||
attributes.attribute(Usage.USAGE_ATTRIBUTE, project.usageByName(KotlinUsages.KOTLIN_METADATA))
|
||||
|
||||
+6
-2
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.CompilationSourceSetUtil.compilationsBySourceSets
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService
|
||||
import org.jetbrains.kotlin.gradle.targets.native.internal.*
|
||||
import org.jetbrains.kotlin.gradle.targets.native.internal.commonizeCInteropTask
|
||||
import org.jetbrains.kotlin.gradle.targets.native.internal.copyCommonizeCInteropForIdeTask
|
||||
import org.jetbrains.kotlin.gradle.targets.native.internal.getLibraries
|
||||
@@ -329,8 +330,11 @@ class KotlinMetadataTargetConfigurator(kotlinPluginVersion: String) :
|
||||
}
|
||||
project.copyCommonizeCInteropForIdeTask?.let { task ->
|
||||
val libraries = task.getLibraries(this)
|
||||
kotlinSourceSetsIncludingDefault.forEach { sourceSet ->
|
||||
project.dependencies.add(sourceSet.implementationMetadataConfigurationName, libraries)
|
||||
kotlinSourceSetsIncludingDefault.filterIsInstance<DefaultKotlinSourceSet>().forEach { sourceSet ->
|
||||
val dependencyConfigurationName =
|
||||
if (project.isIntransitiveMetadataConfigurationEnabled) sourceSet.intransitiveMetadataConfigurationName
|
||||
else sourceSet.implementationMetadataConfigurationName
|
||||
project.dependencies.add(dependencyConfigurationName, libraries)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+3
@@ -18,6 +18,9 @@ internal val Project.isCInteropCommonizationEnabled: Boolean get() = PropertiesP
|
||||
|
||||
internal val Project.isHierarchicalCommonizationEnabled: Boolean get() = PropertiesProvider(this).enableHierarchicalCommonization
|
||||
|
||||
internal val Project.isIntransitiveMetadataConfigurationEnabled: Boolean
|
||||
get() = PropertiesProvider(this).enableIntransitiveMetadataConfiguration
|
||||
|
||||
internal val Project.commonizeTask: TaskProvider<Task>
|
||||
get() = locateOrRegisterTask(
|
||||
"commonize",
|
||||
|
||||
+7
-1
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.commonizer.*
|
||||
import org.jetbrains.kotlin.compilerRunner.konanHome
|
||||
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSet
|
||||
import org.jetbrains.kotlin.gradle.targets.metadata.getMetadataCompilationForSourceSet
|
||||
import org.jetbrains.kotlin.gradle.utils.filesProvider
|
||||
|
||||
@@ -53,7 +54,12 @@ private fun Project.addDependencies(sourceSet: KotlinSourceSet, libraries: FileC
|
||||
getMetadataCompilationForSourceSet(sourceSet)?.let { compilation ->
|
||||
compilation.compileDependencyFiles += libraries
|
||||
}
|
||||
dependencies.add(sourceSet.implementationMetadataConfigurationName, libraries)
|
||||
if (sourceSet is DefaultKotlinSourceSet) {
|
||||
val metadataConfigurationName =
|
||||
if (project.isIntransitiveMetadataConfigurationEnabled) sourceSet.intransitiveMetadataConfigurationName
|
||||
else sourceSet.implementationMetadataConfigurationName
|
||||
dependencies.add(metadataConfigurationName, libraries)
|
||||
}
|
||||
}
|
||||
|
||||
private val Project.konanDistribution: KonanDistribution
|
||||
|
||||
+2
-1
@@ -10,4 +10,5 @@ const val COMPILE = "compile"
|
||||
const val IMPLEMENTATION = "implementation"
|
||||
const val API = "api"
|
||||
const val RUNTIME_ONLY = "runtimeOnly"
|
||||
const val RUNTIME = "runtime"
|
||||
const val RUNTIME = "runtime"
|
||||
internal const val INTRANSITIVE = "intransitive"
|
||||
|
||||
Reference in New Issue
Block a user