[Gradle] Mark dependencies coming from nativeDistribution
KT-55189
This commit is contained in:
committed by
Space Team
parent
45ebbede2f
commit
e002bbe906
+1
@@ -21,6 +21,7 @@ data class KlibExtra(
|
||||
val shortName: String?,
|
||||
val packageFqName: String?,
|
||||
val nativeTargets: List<String>?,
|
||||
val commonizerNativeTargets: List<String>?,
|
||||
val commonizerTarget: String?,
|
||||
val isInterop: Boolean?
|
||||
) : Serializable {
|
||||
|
||||
+18
-1
@@ -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<Boolean>("IdeaKotlinBinaryDependency.isIdeaProjectLevel")
|
||||
val isIdeaProjectLevelKey = extrasKeyOf<Boolean>("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<Boolean>("isNativeDistribution")
|
||||
|
||||
|
||||
/**
|
||||
* Marks this dependency as 'coming from the native distribution'
|
||||
*/
|
||||
var IdeaKotlinBinaryDependency.isNativeDistribution by isNativeDistributionKey
|
||||
|
||||
|
||||
val isNativeStdlibKey = extrasKeyOf<Boolean>("isNativeStdlib")
|
||||
|
||||
/**
|
||||
* Marks the dependency as the native stdlib (which is special in the native distribution)
|
||||
*/
|
||||
var IdeaKotlinBinaryDependency.isNativeStdlib by isNativeStdlibKey
|
||||
+4
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+7
-3
@@ -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) {
|
||||
|
||||
+4
@@ -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
|
||||
}
|
||||
|
||||
+2
-1
@@ -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
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
-1
@@ -20,7 +20,6 @@ operator fun <T : Any> Extras.Key<T>.getValue(receiver: HasExtras, property: KPr
|
||||
return receiver.extras[this]
|
||||
}
|
||||
|
||||
|
||||
operator fun <T : Any> Extras.Key<T>.setValue(receiver: HasMutableExtras, property: KProperty<*>, value: T?) {
|
||||
if (value == null) {
|
||||
receiver.extras.remove(this)
|
||||
|
||||
Reference in New Issue
Block a user