[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
|
package org.jetbrains.kotlin.gradle.plugin.ide
|
||||||
|
|
||||||
import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension
|
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.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.kpm.idea.kotlinDebugKey
|
||||||
import org.jetbrains.kotlin.gradle.plugin.ide.IdeMultiplatformImport.SourceSetConstraint
|
import org.jetbrains.kotlin.gradle.plugin.ide.IdeMultiplatformImport.SourceSetConstraint
|
||||||
import org.jetbrains.kotlin.gradle.plugin.ide.dependencyResolvers.*
|
import org.jetbrains.kotlin.gradle.plugin.ide.dependencyResolvers.*
|
||||||
@@ -103,6 +106,8 @@ internal fun IdeMultiplatformImport(extension: KotlinProjectExtension): IdeMulti
|
|||||||
|
|
||||||
registerExtrasSerializationExtension {
|
registerExtrasSerializationExtension {
|
||||||
register(kotlinDebugKey, IdeaKotlinExtrasSerializer.javaIoSerializable())
|
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.commonizer.platformLibsDir
|
||||||
import org.jetbrains.kotlin.compilerRunner.konanHome
|
import org.jetbrains.kotlin.compilerRunner.konanHome
|
||||||
import org.jetbrains.kotlin.compilerRunner.konanVersion
|
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.IdeaKotlinBinaryCoordinates
|
||||||
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinDependency
|
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinDependency
|
||||||
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinResolvedBinaryDependency
|
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.KotlinSourceSet
|
||||||
import org.jetbrains.kotlin.gradle.plugin.ide.IdeDependencyResolver
|
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.plugin.sources.project
|
||||||
import org.jetbrains.kotlin.gradle.targets.native.internal.getCommonizerTarget
|
import org.jetbrains.kotlin.gradle.targets.native.internal.getCommonizerTarget
|
||||||
import org.jetbrains.kotlin.library.*
|
import org.jetbrains.kotlin.library.*
|
||||||
import org.jetbrains.kotlin.tooling.core.mutableExtrasOf
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
object IdeNativePlatformDependencyResolver : IdeDependencyResolver {
|
object IdeNativePlatformDependencyResolver : IdeDependencyResolver {
|
||||||
@@ -48,13 +49,15 @@ object IdeNativePlatformDependencyResolver : IdeDependencyResolver {
|
|||||||
return IdeaKotlinResolvedBinaryDependency(
|
return IdeaKotlinResolvedBinaryDependency(
|
||||||
binaryType = IdeaKotlinDependency.CLASSPATH_BINARY_TYPE,
|
binaryType = IdeaKotlinDependency.CLASSPATH_BINARY_TYPE,
|
||||||
binaryFile = file,
|
binaryFile = file,
|
||||||
extras = mutableExtrasOf(),
|
|
||||||
coordinates = IdeaKotlinBinaryCoordinates(
|
coordinates = IdeaKotlinBinaryCoordinates(
|
||||||
group = "org.jetbrains.kotlin.native",
|
group = "org.jetbrains.kotlin.native",
|
||||||
module = kotlinLibrary.packageFqName ?: kotlinLibrary.shortName ?: kotlinLibrary.uniqueName,
|
module = kotlinLibrary.packageFqName ?: kotlinLibrary.shortName ?: kotlinLibrary.uniqueName,
|
||||||
version = project.konanVersion.toString()
|
version = project.konanVersion.toString()
|
||||||
),
|
),
|
||||||
)
|
).apply {
|
||||||
|
isIdeaProjectLevel = true
|
||||||
|
klibExtra = KlibExtra(kotlinLibrary)
|
||||||
|
}
|
||||||
} catch (t: Throwable) {
|
} catch (t: Throwable) {
|
||||||
logger.error("Failed resolving library ${file.path}", t)
|
logger.error("Failed resolving library ${file.path}", t)
|
||||||
return null
|
return null
|
||||||
|
|||||||
+30
-6
@@ -5,6 +5,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.gradle.plugin.ide.dependencyResolvers
|
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.KonanDistribution
|
||||||
import org.jetbrains.kotlin.commonizer.stdlib
|
import org.jetbrains.kotlin.commonizer.stdlib
|
||||||
import org.jetbrains.kotlin.compilerRunner.konanHome
|
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.IdeaKotlinBinaryCoordinates
|
||||||
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinDependency
|
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinDependency
|
||||||
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinResolvedBinaryDependency
|
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.KotlinSourceSet
|
||||||
import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.ide.IdeDependencyResolver
|
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.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 {
|
internal object IdeNativeStdlibDependencyResolver : IdeDependencyResolver {
|
||||||
|
private val logger: Logger = Logging.getLogger(IdeNativePlatformDependencyResolver::class.java)
|
||||||
|
|
||||||
override fun resolve(sourceSet: KotlinSourceSet): Set<IdeaKotlinDependency> {
|
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(
|
return setOf(
|
||||||
IdeaKotlinResolvedBinaryDependency(
|
IdeaKotlinResolvedBinaryDependency(
|
||||||
binaryType = IdeaKotlinDependency.CLASSPATH_BINARY_TYPE,
|
binaryType = IdeaKotlinDependency.CLASSPATH_BINARY_TYPE,
|
||||||
binaryFile = KonanDistribution(sourceSet.project.konanHome).stdlib,
|
binaryFile = binaryFile,
|
||||||
extras = mutableExtrasOf(),
|
|
||||||
coordinates = IdeaKotlinBinaryCoordinates(
|
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.IdeaKotlinBinaryCoordinates
|
||||||
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinDependency
|
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinDependency
|
||||||
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinResolvedBinaryDependency
|
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.KotlinSourceSet
|
||||||
import org.jetbrains.kotlin.gradle.plugin.ide.IdeDependencyResolver
|
import org.jetbrains.kotlin.gradle.plugin.ide.IdeDependencyResolver
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.MetadataDependencyResolution.ChooseVisibleSourceSets
|
import org.jetbrains.kotlin.gradle.plugin.mpp.MetadataDependencyResolution.ChooseVisibleSourceSets
|
||||||
@@ -49,7 +50,10 @@ internal object IdeTransformedMetadataDependencyResolver : IdeDependencyResolver
|
|||||||
version = metadataProvider.moduleDependencyVersion,
|
version = metadataProvider.moduleDependencyVersion,
|
||||||
sourceSetName = visibleSourceSet
|
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.IdeaKotlinBinaryCoordinates
|
||||||
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinProjectCoordinates
|
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinProjectCoordinates
|
||||||
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinSourceCoordinates
|
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.KotlinSourceSet
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.currentBuildId
|
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.currentBuildId
|
||||||
import org.jetbrains.kotlin.gradle.plugin.sources.project
|
import org.jetbrains.kotlin.gradle.plugin.sources.project
|
||||||
|
import org.jetbrains.kotlin.library.*
|
||||||
|
|
||||||
|
|
||||||
internal fun IdeaKotlinProjectCoordinates(identifier: ProjectComponentIdentifier): IdeaKotlinProjectCoordinates {
|
internal fun IdeaKotlinProjectCoordinates(identifier: ProjectComponentIdentifier): IdeaKotlinProjectCoordinates {
|
||||||
@@ -46,3 +48,15 @@ fun IdeaKotlinBinaryCoordinates(identifier: ModuleComponentIdentifier): IdeaKotl
|
|||||||
version = identifier.version
|
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