[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
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.artifacts.result.ResolvedArtifactResult
|
||||
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinDependency
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
||||
@@ -13,6 +14,13 @@ import org.jetbrains.kotlin.tooling.core.extrasReadWriteProperty
|
||||
fun interface IdeDependencyResolver {
|
||||
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 {
|
||||
override fun resolve(sourceSet: KotlinSourceSet): Set<IdeaKotlinDependency> = emptySet()
|
||||
}
|
||||
|
||||
+1
-13
@@ -6,11 +6,6 @@
|
||||
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.*
|
||||
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.dependencyResolvers.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.ide.dependencyTransformers.IdePlatformStdlibCommonDependencyFilter
|
||||
@@ -118,13 +113,6 @@ internal fun IdeMultiplatformImport(extension: KotlinProjectExtension): IdeMulti
|
||||
constraint = SourceSetConstraint.unconstrained
|
||||
)
|
||||
|
||||
registerExtrasSerializationExtension {
|
||||
register(kotlinDebugKey, IdeaKotlinExtrasSerializer.javaIoSerializable())
|
||||
register(KlibExtra.key, IdeaKotlinExtrasSerializer.javaIoSerializable())
|
||||
register(isIdeaProjectLevelKey, IdeaKotlinBooleanExtrasSerializer)
|
||||
register(isNativeDistributionKey, IdeaKotlinBooleanExtrasSerializer)
|
||||
register(isNativeStdlibKey, IdeaKotlinBooleanExtrasSerializer)
|
||||
register(isCommonizedKey, IdeaKotlinBooleanExtrasSerializer)
|
||||
}
|
||||
registerExtrasSerializationExtension(kotlinExtrasSerialization)
|
||||
}
|
||||
}
|
||||
|
||||
+8
@@ -50,6 +50,7 @@ internal class IdeMultiplatformImportImpl(
|
||||
private val registeredDependencyEffects = mutableListOf<RegisteredDependencyEffect>()
|
||||
private val registeredExtrasSerializationExtensions = mutableListOf<IdeaKotlinExtrasSerializationExtension>()
|
||||
|
||||
@OptIn(Idea222Api::class)
|
||||
@ExternalKotlinTargetApi
|
||||
override fun registerDependencyResolver(
|
||||
resolver: IdeDependencyResolver,
|
||||
@@ -60,6 +61,13 @@ internal class IdeMultiplatformImportImpl(
|
||||
registeredDependencyResolvers.add(
|
||||
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
|
||||
|
||||
+1
-1
@@ -18,7 +18,7 @@ internal fun Project.ideaImportDependsOn(task: TaskProvider<*>) {
|
||||
prepareKotlinIdeaImportTask.dependsOn(task)
|
||||
}
|
||||
|
||||
@UnsafeApi("Use 'ideaImportDependsOn' instead")
|
||||
@Idea222Api
|
||||
internal val Project.prepareKotlinIdeaImportTask: TaskProvider<Task>
|
||||
get() = locateOrRegisterTask(
|
||||
"prepareKotlinIdeaImport",
|
||||
|
||||
+8
-1
@@ -5,6 +5,7 @@
|
||||
|
||||
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.SharedCommonizerTarget
|
||||
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.library.KLIB_FILE_EXTENSION
|
||||
|
||||
internal object IdeCommonizedNativePlatformDependencyResolver : IdeDependencyResolver {
|
||||
internal object IdeCommonizedNativePlatformDependencyResolver :
|
||||
IdeDependencyResolver, IdeDependencyResolver.WithBuildDependencies {
|
||||
|
||||
override fun resolve(sourceSet: KotlinSourceSet): Set<IdeaKotlinDependency> {
|
||||
val project = sourceSet.project
|
||||
val commonizerTarget = getCommonizerTarget(sourceSet) as? SharedCommonizerTarget ?: return emptySet()
|
||||
@@ -29,4 +32,8 @@ internal object IdeCommonizedNativePlatformDependencyResolver : IdeDependencyRes
|
||||
.onEach { dependency -> dependency.isCommonized = true }
|
||||
.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.plugin.*
|
||||
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.mpp.KotlinMultiplatformPlugin.Companion.sourceSetFreeCompilerArgsPropertyName
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.internal.handleHierarchicalStructureFlagsMigration
|
||||
@@ -80,6 +81,8 @@ class KotlinMultiplatformPlugin : Plugin<Project> {
|
||||
|
||||
exportProjectStructureMetadataForOtherBuilds(kotlinMultiplatformExtension)
|
||||
|
||||
// Ensure that the instance is created and configured during apply
|
||||
project.kotlinIdeMultiplatformImport
|
||||
project.locateOrRegisterIdeResolveDependenciesTask()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user