[Gradle] Ide dependency resolvers: support KlibExtra and isIdeaProjectLevel
KT-55189
This commit is contained in:
committed by
Space Team
parent
a68140e51d
commit
3dc61822bd
+5
@@ -6,7 +6,10 @@
|
||||
package org.jetbrains.kotlin.gradle.plugin.ide
|
||||
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension
|
||||
import org.jetbrains.kotlin.gradle.idea.serialize.IdeaKotlinBooleanExtrasSerializer
|
||||
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.kpm.idea.kotlinDebugKey
|
||||
import org.jetbrains.kotlin.gradle.plugin.ide.IdeMultiplatformImport.SourceSetConstraint
|
||||
import org.jetbrains.kotlin.gradle.plugin.ide.dependencyResolvers.*
|
||||
@@ -103,6 +106,8 @@ internal fun IdeMultiplatformImport(extension: KotlinProjectExtension): IdeMulti
|
||||
|
||||
registerExtrasSerializationExtension {
|
||||
register(kotlinDebugKey, IdeaKotlinExtrasSerializer.javaIoSerializable())
|
||||
register(KlibExtra.key, IdeaKotlinExtrasSerializer.javaIoSerializable())
|
||||
register(isIdeaProjectLevelKey, IdeaKotlinBooleanExtrasSerializer)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+7
-4
@@ -11,16 +11,17 @@ import org.jetbrains.kotlin.commonizer.LeafCommonizerTarget
|
||||
import org.jetbrains.kotlin.commonizer.platformLibsDir
|
||||
import org.jetbrains.kotlin.compilerRunner.konanHome
|
||||
import org.jetbrains.kotlin.compilerRunner.konanVersion
|
||||
import org.jetbrains.kotlin.gradle.idea.kpm.IdeaKpmDependency
|
||||
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.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.library.*
|
||||
import org.jetbrains.kotlin.tooling.core.mutableExtrasOf
|
||||
import java.io.File
|
||||
|
||||
object IdeNativePlatformDependencyResolver : IdeDependencyResolver {
|
||||
@@ -48,13 +49,15 @@ object IdeNativePlatformDependencyResolver : IdeDependencyResolver {
|
||||
return IdeaKotlinResolvedBinaryDependency(
|
||||
binaryType = IdeaKotlinDependency.CLASSPATH_BINARY_TYPE,
|
||||
binaryFile = file,
|
||||
extras = mutableExtrasOf(),
|
||||
coordinates = IdeaKotlinBinaryCoordinates(
|
||||
group = "org.jetbrains.kotlin.native",
|
||||
module = kotlinLibrary.packageFqName ?: kotlinLibrary.shortName ?: kotlinLibrary.uniqueName,
|
||||
version = project.konanVersion.toString()
|
||||
),
|
||||
)
|
||||
).apply {
|
||||
isIdeaProjectLevel = true
|
||||
klibExtra = KlibExtra(kotlinLibrary)
|
||||
}
|
||||
} catch (t: Throwable) {
|
||||
logger.error("Failed resolving library ${file.path}", t)
|
||||
return null
|
||||
|
||||
+30
-6
@@ -5,6 +5,8 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.ide.dependencyResolvers
|
||||
|
||||
import org.gradle.api.logging.Logger
|
||||
import org.gradle.api.logging.Logging
|
||||
import org.jetbrains.kotlin.commonizer.KonanDistribution
|
||||
import org.jetbrains.kotlin.commonizer.stdlib
|
||||
import org.jetbrains.kotlin.compilerRunner.konanHome
|
||||
@@ -12,23 +14,45 @@ import org.jetbrains.kotlin.compilerRunner.konanVersion
|
||||
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.klibExtra
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
||||
import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion
|
||||
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.tooling.core.mutableExtrasOf
|
||||
import org.jetbrains.kotlin.konan.file.File
|
||||
import org.jetbrains.kotlin.library.ToolingSingleFileKlibResolveStrategy
|
||||
import org.jetbrains.kotlin.library.resolveSingleFileKlib
|
||||
|
||||
internal object IdeNativeStdlibDependencyResolver : IdeDependencyResolver {
|
||||
private val logger: Logger = Logging.getLogger(IdeNativePlatformDependencyResolver::class.java)
|
||||
|
||||
override fun resolve(sourceSet: KotlinSourceSet): Set<IdeaKotlinDependency> {
|
||||
val binaryFile = KonanDistribution(sourceSet.project.konanHome).stdlib
|
||||
|
||||
val klibExtra = try {
|
||||
val kotlinLibrary = resolveSingleFileKlib(
|
||||
libraryFile = File(binaryFile.absolutePath),
|
||||
strategy = ToolingSingleFileKlibResolveStrategy
|
||||
)
|
||||
|
||||
KlibExtra(kotlinLibrary)
|
||||
} catch (error: Throwable) {
|
||||
logger.error("Failed to resolve Native Stdlib", error)
|
||||
null
|
||||
}
|
||||
|
||||
return setOf(
|
||||
IdeaKotlinResolvedBinaryDependency(
|
||||
binaryType = IdeaKotlinDependency.CLASSPATH_BINARY_TYPE,
|
||||
binaryFile = KonanDistribution(sourceSet.project.konanHome).stdlib,
|
||||
extras = mutableExtrasOf(),
|
||||
binaryFile = binaryFile,
|
||||
coordinates = IdeaKotlinBinaryCoordinates(
|
||||
"org.jetbrains.kotlin", "stdlib-native", sourceSet.project.konanVersion.toString(),
|
||||
"org.jetbrains.kotlin.native", "stdlib", sourceSet.project.konanVersion.toString(),
|
||||
)
|
||||
)
|
||||
).apply {
|
||||
this.isIdeaProjectLevel = true
|
||||
this.klibExtra = klibExtra
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+5
-1
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.gradle.plugin.ide.dependencyResolvers
|
||||
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.plugin.KotlinSourceSet
|
||||
import org.jetbrains.kotlin.gradle.plugin.ide.IdeDependencyResolver
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.MetadataDependencyResolution.ChooseVisibleSourceSets
|
||||
@@ -49,7 +50,10 @@ internal object IdeTransformedMetadataDependencyResolver : IdeDependencyResolver
|
||||
version = metadataProvider.moduleDependencyVersion,
|
||||
sourceSetName = visibleSourceSet
|
||||
)
|
||||
)
|
||||
).apply {
|
||||
/* Those libraries are stored in project wide .gradle and are scoped by hash */
|
||||
isIdeaProjectLevel = true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+14
@@ -11,9 +11,11 @@ import org.gradle.api.artifacts.component.ProjectComponentIdentifier
|
||||
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinBinaryCoordinates
|
||||
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinProjectCoordinates
|
||||
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinSourceCoordinates
|
||||
import org.jetbrains.kotlin.gradle.idea.tcs.extras.KlibExtra
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.currentBuildId
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.project
|
||||
import org.jetbrains.kotlin.library.*
|
||||
|
||||
|
||||
internal fun IdeaKotlinProjectCoordinates(identifier: ProjectComponentIdentifier): IdeaKotlinProjectCoordinates {
|
||||
@@ -46,3 +48,15 @@ fun IdeaKotlinBinaryCoordinates(identifier: ModuleComponentIdentifier): IdeaKotl
|
||||
version = identifier.version
|
||||
)
|
||||
}
|
||||
|
||||
internal fun KlibExtra(library: KotlinLibrary): KlibExtra {
|
||||
return KlibExtra(
|
||||
builtInsPlatform = library.builtInsPlatform,
|
||||
uniqueName = library.uniqueName,
|
||||
shortName = library.shortName,
|
||||
packageFqName = library.packageFqName,
|
||||
nativeTargets = library.nativeTargets,
|
||||
commonizerTarget = library.commonizerTarget,
|
||||
isInterop = library.isInterop
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user