From e002bbe90672d8fb3ce3fb5735cd99b8c0db6e65 Mon Sep 17 00:00:00 2001 From: Sebastian Sellmair Date: Thu, 1 Dec 2022 10:04:42 +0100 Subject: [PATCH] [Gradle] Mark dependencies coming from nativeDistribution KT-55189 --- .../gradle/idea/tcs/extras/KlibExtra.kt | 1 + ...IdeaProjectLevel.kt => primitiveExtras.kt} | 19 ++++++++++++++++++- .../ide/IdeMultiplatformImportFactory.kt | 4 ++++ .../IdeNativePlatformDependencyResolver.kt | 10 +++++++--- .../IdeNativeStdlibDependencyResolver.kt | 4 ++++ .../kotlin/gradle/plugin/ide/factories.kt | 3 ++- .../kotlin/tooling/core/HasExtras.kt | 1 - 7 files changed, 36 insertions(+), 6 deletions(-) rename libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/idea/tcs/extras/{isIdeaProjectLevel.kt => primitiveExtras.kt} (58%) diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/idea/tcs/extras/KlibExtra.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/idea/tcs/extras/KlibExtra.kt index 18a52f33bbc..c946a37bc5c 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/idea/tcs/extras/KlibExtra.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/idea/tcs/extras/KlibExtra.kt @@ -21,6 +21,7 @@ data class KlibExtra( val shortName: String?, val packageFqName: String?, val nativeTargets: List?, + val commonizerNativeTargets: List?, val commonizerTarget: String?, val isInterop: Boolean? ) : Serializable { diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/idea/tcs/extras/isIdeaProjectLevel.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/idea/tcs/extras/primitiveExtras.kt similarity index 58% rename from libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/idea/tcs/extras/isIdeaProjectLevel.kt rename to libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/idea/tcs/extras/primitiveExtras.kt index 5e5d524e0ae..c7fcc5fe164 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/idea/tcs/extras/isIdeaProjectLevel.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/idea/tcs/extras/primitiveExtras.kt @@ -10,10 +10,27 @@ import org.jetbrains.kotlin.tooling.core.extrasKeyOf import org.jetbrains.kotlin.tooling.core.getValue import org.jetbrains.kotlin.tooling.core.setValue -val isIdeaProjectLevelKey = extrasKeyOf("IdeaKotlinBinaryDependency.isIdeaProjectLevel") +val isIdeaProjectLevelKey = extrasKeyOf("isIdeaProjectLevel") /** * Marks any binary dependency as Global in the sense of "this library is considered * the same, no matter in which Gradle project / IntelliJ module it will be used */ var IdeaKotlinBinaryDependency.isIdeaProjectLevel by isIdeaProjectLevelKey + + +val isNativeDistributionKey = extrasKeyOf("isNativeDistribution") + + +/** + * Marks this dependency as 'coming from the native distribution' + */ +var IdeaKotlinBinaryDependency.isNativeDistribution by isNativeDistributionKey + + +val isNativeStdlibKey = extrasKeyOf("isNativeStdlib") + +/** + * Marks the dependency as the native stdlib (which is special in the native distribution) + */ +var IdeaKotlinBinaryDependency.isNativeStdlib by isNativeStdlibKey \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImportFactory.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImportFactory.kt index 75c9f099507..d79fbd171c1 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImportFactory.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImportFactory.kt @@ -10,6 +10,8 @@ import org.jetbrains.kotlin.gradle.idea.serialize.IdeaKotlinBooleanExtrasSeriali import org.jetbrains.kotlin.gradle.idea.serialize.IdeaKotlinExtrasSerializer import org.jetbrains.kotlin.gradle.idea.tcs.extras.KlibExtra import org.jetbrains.kotlin.gradle.idea.tcs.extras.isIdeaProjectLevelKey +import org.jetbrains.kotlin.gradle.idea.tcs.extras.isNativeDistributionKey +import org.jetbrains.kotlin.gradle.idea.tcs.extras.isNativeStdlibKey import org.jetbrains.kotlin.gradle.kpm.idea.kotlinDebugKey import org.jetbrains.kotlin.gradle.plugin.ide.IdeMultiplatformImport.SourceSetConstraint import org.jetbrains.kotlin.gradle.plugin.ide.dependencyResolvers.* @@ -108,6 +110,8 @@ internal fun IdeMultiplatformImport(extension: KotlinProjectExtension): IdeMulti register(kotlinDebugKey, IdeaKotlinExtrasSerializer.javaIoSerializable()) register(KlibExtra.key, IdeaKotlinExtrasSerializer.javaIoSerializable()) register(isIdeaProjectLevelKey, IdeaKotlinBooleanExtrasSerializer) + register(isNativeDistributionKey, IdeaKotlinBooleanExtrasSerializer) + register(isNativeStdlibKey, IdeaKotlinBooleanExtrasSerializer) } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeNativePlatformDependencyResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeNativePlatformDependencyResolver.kt index b7ef49c56ad..dc6e005fb22 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeNativePlatformDependencyResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeNativePlatformDependencyResolver.kt @@ -15,12 +15,14 @@ import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinBinaryCoordinates import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinDependency import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinResolvedBinaryDependency import org.jetbrains.kotlin.gradle.idea.tcs.extras.isIdeaProjectLevel +import org.jetbrains.kotlin.gradle.idea.tcs.extras.isNativeDistribution import org.jetbrains.kotlin.gradle.idea.tcs.extras.klibExtra import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.ide.IdeDependencyResolver import org.jetbrains.kotlin.gradle.plugin.ide.KlibExtra import org.jetbrains.kotlin.gradle.plugin.sources.project import org.jetbrains.kotlin.gradle.targets.native.internal.getCommonizerTarget +import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.library.* import java.io.File @@ -32,14 +34,14 @@ object IdeNativePlatformDependencyResolver : IdeDependencyResolver { return sourceSet.project.konanDistribution.platformLibsDir.resolve(konanTarget.name) .listFiles().orEmpty() .filter { it.isDirectory || it.extension == KLIB_FILE_EXTENSION } - .mapNotNull { libraryFile -> sourceSet.project.resolveKlib(libraryFile) } + .mapNotNull { libraryFile -> sourceSet.project.resolveKlib(libraryFile, konanTarget) } .toSet() } private val Project.konanDistribution: KonanDistribution get() = KonanDistribution(project.file(konanHome)) - private fun Project.resolveKlib(file: File): IdeaKotlinResolvedBinaryDependency? { + private fun Project.resolveKlib(file: File, konanTarget: KonanTarget): IdeaKotlinResolvedBinaryDependency? { try { val kotlinLibrary = resolveSingleFileKlib( org.jetbrains.kotlin.konan.file.File(file.absolutePath), @@ -52,10 +54,12 @@ object IdeNativePlatformDependencyResolver : IdeDependencyResolver { coordinates = IdeaKotlinBinaryCoordinates( group = "org.jetbrains.kotlin.native", module = kotlinLibrary.packageFqName ?: kotlinLibrary.shortName ?: kotlinLibrary.uniqueName, - version = project.konanVersion.toString() + version = project.konanVersion.toString(), + sourceSetName = konanTarget.toString() ), ).apply { isIdeaProjectLevel = true + isNativeDistribution = true klibExtra = KlibExtra(kotlinLibrary) } } catch (t: Throwable) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeNativeStdlibDependencyResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeNativeStdlibDependencyResolver.kt index 5945a8d7791..0e3342423fe 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeNativeStdlibDependencyResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeNativeStdlibDependencyResolver.kt @@ -15,6 +15,8 @@ import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinBinaryCoordinates import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinDependency import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinResolvedBinaryDependency import org.jetbrains.kotlin.gradle.idea.tcs.extras.isIdeaProjectLevel +import org.jetbrains.kotlin.gradle.idea.tcs.extras.isNativeDistribution +import org.jetbrains.kotlin.gradle.idea.tcs.extras.isNativeStdlib import org.jetbrains.kotlin.gradle.idea.tcs.extras.klibExtra import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.ide.IdeDependencyResolver @@ -50,6 +52,8 @@ internal object IdeNativeStdlibDependencyResolver : IdeDependencyResolver { "org.jetbrains.kotlin.native", "stdlib", sourceSet.project.konanVersion.toString(), ) ).apply { + this.isNativeDistribution = true + this.isNativeStdlib = true this.isIdeaProjectLevel = true this.klibExtra = klibExtra } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/factories.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/factories.kt index 0319bcf6735..9882beaa57a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/factories.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/factories.kt @@ -56,7 +56,8 @@ internal fun KlibExtra(library: KotlinLibrary): KlibExtra { shortName = library.shortName, packageFqName = library.packageFqName, nativeTargets = library.nativeTargets, + commonizerNativeTargets = library.commonizerNativeTargets, commonizerTarget = library.commonizerTarget, isInterop = library.isInterop ) -} \ No newline at end of file +} diff --git a/libraries/tools/kotlin-tooling-core/src/main/kotlin/org/jetbrains/kotlin/tooling/core/HasExtras.kt b/libraries/tools/kotlin-tooling-core/src/main/kotlin/org/jetbrains/kotlin/tooling/core/HasExtras.kt index b36ca8715ae..7519b201449 100644 --- a/libraries/tools/kotlin-tooling-core/src/main/kotlin/org/jetbrains/kotlin/tooling/core/HasExtras.kt +++ b/libraries/tools/kotlin-tooling-core/src/main/kotlin/org/jetbrains/kotlin/tooling/core/HasExtras.kt @@ -20,7 +20,6 @@ operator fun Extras.Key.getValue(receiver: HasExtras, property: KPr return receiver.extras[this] } - operator fun Extras.Key.setValue(receiver: HasMutableExtras, property: KProperty<*>, value: T?) { if (value == null) { receiver.extras.remove(this)