[Gradle] Implement IdeDependencyResolver.WithBuildDependencies
KT-55238
This commit is contained in:
committed by
Space Team
parent
4b036cc627
commit
ee07fcc00b
+8
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.gradle.plugin.ide
|
package org.jetbrains.kotlin.gradle.plugin.ide
|
||||||
|
|
||||||
|
import org.gradle.api.Project
|
||||||
import org.gradle.api.artifacts.result.ResolvedArtifactResult
|
import org.gradle.api.artifacts.result.ResolvedArtifactResult
|
||||||
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinDependency
|
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinDependency
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
||||||
@@ -13,6 +14,13 @@ import org.jetbrains.kotlin.tooling.core.extrasReadWriteProperty
|
|||||||
fun interface IdeDependencyResolver {
|
fun interface IdeDependencyResolver {
|
||||||
fun resolve(sourceSet: KotlinSourceSet): Set<IdeaKotlinDependency>
|
fun resolve(sourceSet: KotlinSourceSet): Set<IdeaKotlinDependency>
|
||||||
|
|
||||||
|
interface WithBuildDependencies {
|
||||||
|
/**
|
||||||
|
* return anything accepted to be passed to [org.gradle.api.Task.dependsOn]
|
||||||
|
*/
|
||||||
|
fun dependencies(project: Project): Iterable<Any>
|
||||||
|
}
|
||||||
|
|
||||||
object Empty : IdeDependencyResolver {
|
object Empty : IdeDependencyResolver {
|
||||||
override fun resolve(sourceSet: KotlinSourceSet): Set<IdeaKotlinDependency> = emptySet()
|
override fun resolve(sourceSet: KotlinSourceSet): Set<IdeaKotlinDependency> = emptySet()
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-13
@@ -6,11 +6,6 @@
|
|||||||
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.tcs.extras.*
|
|
||||||
import org.jetbrains.kotlin.gradle.kpm.idea.kotlinDebugKey
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
|
||||||
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.*
|
||||||
import org.jetbrains.kotlin.gradle.plugin.ide.dependencyTransformers.IdePlatformStdlibCommonDependencyFilter
|
import org.jetbrains.kotlin.gradle.plugin.ide.dependencyTransformers.IdePlatformStdlibCommonDependencyFilter
|
||||||
@@ -118,13 +113,6 @@ internal fun IdeMultiplatformImport(extension: KotlinProjectExtension): IdeMulti
|
|||||||
constraint = SourceSetConstraint.unconstrained
|
constraint = SourceSetConstraint.unconstrained
|
||||||
)
|
)
|
||||||
|
|
||||||
registerExtrasSerializationExtension {
|
registerExtrasSerializationExtension(kotlinExtrasSerialization)
|
||||||
register(kotlinDebugKey, IdeaKotlinExtrasSerializer.javaIoSerializable())
|
|
||||||
register(KlibExtra.key, IdeaKotlinExtrasSerializer.javaIoSerializable())
|
|
||||||
register(isIdeaProjectLevelKey, IdeaKotlinBooleanExtrasSerializer)
|
|
||||||
register(isNativeDistributionKey, IdeaKotlinBooleanExtrasSerializer)
|
|
||||||
register(isNativeStdlibKey, IdeaKotlinBooleanExtrasSerializer)
|
|
||||||
register(isCommonizedKey, IdeaKotlinBooleanExtrasSerializer)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+8
@@ -50,6 +50,7 @@ internal class IdeMultiplatformImportImpl(
|
|||||||
private val registeredDependencyEffects = mutableListOf<RegisteredDependencyEffect>()
|
private val registeredDependencyEffects = mutableListOf<RegisteredDependencyEffect>()
|
||||||
private val registeredExtrasSerializationExtensions = mutableListOf<IdeaKotlinExtrasSerializationExtension>()
|
private val registeredExtrasSerializationExtensions = mutableListOf<IdeaKotlinExtrasSerializationExtension>()
|
||||||
|
|
||||||
|
@OptIn(Idea222Api::class)
|
||||||
@ExternalKotlinTargetApi
|
@ExternalKotlinTargetApi
|
||||||
override fun registerDependencyResolver(
|
override fun registerDependencyResolver(
|
||||||
resolver: IdeDependencyResolver,
|
resolver: IdeDependencyResolver,
|
||||||
@@ -60,6 +61,13 @@ internal class IdeMultiplatformImportImpl(
|
|||||||
registeredDependencyResolvers.add(
|
registeredDependencyResolvers.add(
|
||||||
RegisteredDependencyResolver(resolver, constraint, phase, level)
|
RegisteredDependencyResolver(resolver, constraint, phase, level)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if (resolver is IdeDependencyResolver.WithBuildDependencies) {
|
||||||
|
val project = extension.project
|
||||||
|
val dependencies = project.provider { resolver.dependencies(project) }
|
||||||
|
extension.project.locateOrRegisterIdeResolveDependenciesTask().configure { it.dependsOn(dependencies) }
|
||||||
|
extension.project.prepareKotlinIdeaImportTask.configure { it.dependsOn(dependencies) }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ExternalKotlinTargetApi
|
@ExternalKotlinTargetApi
|
||||||
|
|||||||
+1
-1
@@ -18,7 +18,7 @@ internal fun Project.ideaImportDependsOn(task: TaskProvider<*>) {
|
|||||||
prepareKotlinIdeaImportTask.dependsOn(task)
|
prepareKotlinIdeaImportTask.dependsOn(task)
|
||||||
}
|
}
|
||||||
|
|
||||||
@UnsafeApi("Use 'ideaImportDependsOn' instead")
|
@Idea222Api
|
||||||
internal val Project.prepareKotlinIdeaImportTask: TaskProvider<Task>
|
internal val Project.prepareKotlinIdeaImportTask: TaskProvider<Task>
|
||||||
get() = locateOrRegisterTask(
|
get() = locateOrRegisterTask(
|
||||||
"prepareKotlinIdeaImport",
|
"prepareKotlinIdeaImport",
|
||||||
|
|||||||
+8
-1
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.gradle.plugin.ide.dependencyResolvers
|
package org.jetbrains.kotlin.gradle.plugin.ide.dependencyResolvers
|
||||||
|
|
||||||
|
import org.gradle.api.Project
|
||||||
import org.jetbrains.kotlin.commonizer.CommonizerOutputFileLayout.resolveCommonizedDirectory
|
import org.jetbrains.kotlin.commonizer.CommonizerOutputFileLayout.resolveCommonizedDirectory
|
||||||
import org.jetbrains.kotlin.commonizer.SharedCommonizerTarget
|
import org.jetbrains.kotlin.commonizer.SharedCommonizerTarget
|
||||||
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinDependency
|
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinDependency
|
||||||
@@ -16,7 +17,9 @@ import org.jetbrains.kotlin.gradle.targets.native.internal.commonizeNativeDistri
|
|||||||
import org.jetbrains.kotlin.gradle.targets.native.internal.getCommonizerTarget
|
import org.jetbrains.kotlin.gradle.targets.native.internal.getCommonizerTarget
|
||||||
import org.jetbrains.kotlin.library.KLIB_FILE_EXTENSION
|
import org.jetbrains.kotlin.library.KLIB_FILE_EXTENSION
|
||||||
|
|
||||||
internal object IdeCommonizedNativePlatformDependencyResolver : IdeDependencyResolver {
|
internal object IdeCommonizedNativePlatformDependencyResolver :
|
||||||
|
IdeDependencyResolver, IdeDependencyResolver.WithBuildDependencies {
|
||||||
|
|
||||||
override fun resolve(sourceSet: KotlinSourceSet): Set<IdeaKotlinDependency> {
|
override fun resolve(sourceSet: KotlinSourceSet): Set<IdeaKotlinDependency> {
|
||||||
val project = sourceSet.project
|
val project = sourceSet.project
|
||||||
val commonizerTarget = getCommonizerTarget(sourceSet) as? SharedCommonizerTarget ?: return emptySet()
|
val commonizerTarget = getCommonizerTarget(sourceSet) as? SharedCommonizerTarget ?: return emptySet()
|
||||||
@@ -29,4 +32,8 @@ internal object IdeCommonizedNativePlatformDependencyResolver : IdeDependencyRes
|
|||||||
.onEach { dependency -> dependency.isCommonized = true }
|
.onEach { dependency -> dependency.isCommonized = true }
|
||||||
.toSet()
|
.toSet()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun dependencies(project: Project): Iterable<Any> {
|
||||||
|
return listOfNotNull(project.commonizeNativeDistributionTask)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+23
@@ -0,0 +1,23 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.gradle.plugin.ide
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.gradle.InternalKotlinGradlePluginApi
|
||||||
|
import org.jetbrains.kotlin.gradle.idea.serialize.IdeaKotlinBooleanExtrasSerializer
|
||||||
|
import org.jetbrains.kotlin.gradle.idea.serialize.IdeaKotlinExtrasSerializationExtension
|
||||||
|
import org.jetbrains.kotlin.gradle.idea.serialize.IdeaKotlinExtrasSerializer.Companion.javaIoSerializable
|
||||||
|
import org.jetbrains.kotlin.gradle.idea.tcs.extras.*
|
||||||
|
import org.jetbrains.kotlin.gradle.kpm.idea.kotlinDebugKey
|
||||||
|
|
||||||
|
@InternalKotlinGradlePluginApi
|
||||||
|
val kotlinExtrasSerialization = IdeaKotlinExtrasSerializationExtension {
|
||||||
|
register(kotlinDebugKey, javaIoSerializable())
|
||||||
|
register(KlibExtra.key, javaIoSerializable())
|
||||||
|
register(isIdeaProjectLevelKey, IdeaKotlinBooleanExtrasSerializer)
|
||||||
|
register(isNativeDistributionKey, IdeaKotlinBooleanExtrasSerializer)
|
||||||
|
register(isNativeStdlibKey, IdeaKotlinBooleanExtrasSerializer)
|
||||||
|
register(isCommonizedKey, IdeaKotlinBooleanExtrasSerializer)
|
||||||
|
}
|
||||||
+3
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
|
|||||||
import org.jetbrains.kotlin.gradle.internal.customizeKotlinDependencies
|
import org.jetbrains.kotlin.gradle.internal.customizeKotlinDependencies
|
||||||
import org.jetbrains.kotlin.gradle.plugin.*
|
import org.jetbrains.kotlin.gradle.plugin.*
|
||||||
import org.jetbrains.kotlin.gradle.plugin.ide.IdeResolveDependenciesTask
|
import org.jetbrains.kotlin.gradle.plugin.ide.IdeResolveDependenciesTask
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.ide.kotlinIdeMultiplatformImport
|
||||||
import org.jetbrains.kotlin.gradle.plugin.ide.locateOrRegisterIdeResolveDependenciesTask
|
import org.jetbrains.kotlin.gradle.plugin.ide.locateOrRegisterIdeResolveDependenciesTask
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMultiplatformPlugin.Companion.sourceSetFreeCompilerArgsPropertyName
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMultiplatformPlugin.Companion.sourceSetFreeCompilerArgsPropertyName
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.internal.handleHierarchicalStructureFlagsMigration
|
import org.jetbrains.kotlin.gradle.plugin.mpp.internal.handleHierarchicalStructureFlagsMigration
|
||||||
@@ -80,6 +81,8 @@ class KotlinMultiplatformPlugin : Plugin<Project> {
|
|||||||
|
|
||||||
exportProjectStructureMetadataForOtherBuilds(kotlinMultiplatformExtension)
|
exportProjectStructureMetadataForOtherBuilds(kotlinMultiplatformExtension)
|
||||||
|
|
||||||
|
// Ensure that the instance is created and configured during apply
|
||||||
|
project.kotlinIdeMultiplatformImport
|
||||||
project.locateOrRegisterIdeResolveDependenciesTask()
|
project.locateOrRegisterIdeResolveDependenciesTask()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user