[Gradle] Multiplatform Import: Support intellij/gradle 'idea.gradle.download.sources' flag
^KT-60441 Verification Pending
This commit is contained in:
committed by
Space Team
parent
3cdb28e95f
commit
e5ac2f2788
-14
@@ -125,20 +125,6 @@ internal fun IdeMultiplatformImport(extension: KotlinProjectExtension): IdeMulti
|
|||||||
priority = IdeMultiplatformImport.Priority.normal
|
priority = IdeMultiplatformImport.Priority.normal
|
||||||
)
|
)
|
||||||
|
|
||||||
registerDependencyResolver(
|
|
||||||
resolver = IdePlatformSourcesResolver(),
|
|
||||||
constraint = SourceSetConstraint.isSinglePlatformType,
|
|
||||||
phase = IdeMultiplatformImport.DependencyResolutionPhase.SourcesAndDocumentationResolution,
|
|
||||||
priority = IdeMultiplatformImport.Priority.normal
|
|
||||||
)
|
|
||||||
|
|
||||||
registerAdditionalArtifactResolver(
|
|
||||||
resolver = IdeMetadataSourcesResolver(),
|
|
||||||
constraint = !SourceSetConstraint.isSinglePlatformType,
|
|
||||||
phase = IdeMultiplatformImport.AdditionalArtifactResolutionPhase.SourcesAndDocumentationResolution,
|
|
||||||
priority = IdeMultiplatformImport.Priority.normal
|
|
||||||
)
|
|
||||||
|
|
||||||
if (extension.project.kotlinPropertiesProvider.enableSlowIdeSourcesJarResolver) {
|
if (extension.project.kotlinPropertiesProvider.enableSlowIdeSourcesJarResolver) {
|
||||||
registerAdditionalArtifactResolver(
|
registerAdditionalArtifactResolver(
|
||||||
resolver = IdeArtifactResolutionQuerySourcesAndDocumentationResolver,
|
resolver = IdeArtifactResolutionQuerySourcesAndDocumentationResolver,
|
||||||
|
|||||||
+23
-6
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.gradle.kpm.idea.IdeaSerializationContext
|
|||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
||||||
import org.jetbrains.kotlin.gradle.plugin.ide.IdeDependencyResolver.Companion.resolvedBy
|
import org.jetbrains.kotlin.gradle.plugin.ide.IdeDependencyResolver.Companion.resolvedBy
|
||||||
import org.jetbrains.kotlin.gradle.plugin.ide.IdeMultiplatformImport.*
|
import org.jetbrains.kotlin.gradle.plugin.ide.IdeMultiplatformImport.*
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.ide.IdeMultiplatformImport.AdditionalArtifactResolutionPhase.SourcesAndDocumentationResolution
|
||||||
import org.jetbrains.kotlin.gradle.plugin.ide.IdeMultiplatformImport.Companion.logger
|
import org.jetbrains.kotlin.gradle.plugin.ide.IdeMultiplatformImport.Companion.logger
|
||||||
import org.jetbrains.kotlin.tooling.core.Extras
|
import org.jetbrains.kotlin.tooling.core.Extras
|
||||||
import org.jetbrains.kotlin.tooling.core.HasMutableExtras
|
import org.jetbrains.kotlin.tooling.core.HasMutableExtras
|
||||||
@@ -22,7 +23,7 @@ import org.jetbrains.kotlin.utils.addToStdlib.measureTimeMillisWithResult
|
|||||||
import kotlin.system.measureTimeMillis
|
import kotlin.system.measureTimeMillis
|
||||||
|
|
||||||
internal class IdeMultiplatformImportImpl(
|
internal class IdeMultiplatformImportImpl(
|
||||||
private val extension: KotlinProjectExtension
|
private val extension: KotlinProjectExtension,
|
||||||
) : IdeMultiplatformImport {
|
) : IdeMultiplatformImport {
|
||||||
|
|
||||||
override fun resolveDependencies(sourceSetName: String): Set<IdeaKotlinDependency> {
|
override fun resolveDependencies(sourceSetName: String): Set<IdeaKotlinDependency> {
|
||||||
@@ -58,6 +59,14 @@ internal class IdeMultiplatformImportImpl(
|
|||||||
private val registeredDependencyEffects = mutableListOf<RegisteredDependencyEffect>()
|
private val registeredDependencyEffects = mutableListOf<RegisteredDependencyEffect>()
|
||||||
private val registeredExtrasSerializationExtensions = mutableListOf<IdeaKotlinExtrasSerializationExtension>()
|
private val registeredExtrasSerializationExtensions = mutableListOf<IdeaKotlinExtrasSerializationExtension>()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* System property passed down by the IDE, reflecting the users setting of 'Download sources during sync'
|
||||||
|
* This property is expected to be present in IDEs > 23.3
|
||||||
|
* If 'true' the import is instructed to download all sources.jar eagerly.
|
||||||
|
* If 'false' the import is instructed to not download any sources.jar
|
||||||
|
*/
|
||||||
|
private val ideaGradleDownloadSourcesProperty = extension.project.providers.systemProperty("idea.gradle.download.sources")
|
||||||
|
|
||||||
@OptIn(Idea222Api::class)
|
@OptIn(Idea222Api::class)
|
||||||
override fun registerDependencyResolver(
|
override fun registerDependencyResolver(
|
||||||
resolver: IdeDependencyResolver,
|
resolver: IdeDependencyResolver,
|
||||||
@@ -80,7 +89,7 @@ internal class IdeMultiplatformImportImpl(
|
|||||||
override fun registerDependencyTransformer(
|
override fun registerDependencyTransformer(
|
||||||
transformer: IdeDependencyTransformer,
|
transformer: IdeDependencyTransformer,
|
||||||
constraint: SourceSetConstraint,
|
constraint: SourceSetConstraint,
|
||||||
phase: DependencyTransformationPhase
|
phase: DependencyTransformationPhase,
|
||||||
) {
|
) {
|
||||||
registeredDependencyTransformers.add(
|
registeredDependencyTransformers.add(
|
||||||
RegisteredDependencyTransformer(transformer, constraint, phase)
|
RegisteredDependencyTransformer(transformer, constraint, phase)
|
||||||
@@ -91,7 +100,7 @@ internal class IdeMultiplatformImportImpl(
|
|||||||
resolver: IdeAdditionalArtifactResolver,
|
resolver: IdeAdditionalArtifactResolver,
|
||||||
constraint: SourceSetConstraint,
|
constraint: SourceSetConstraint,
|
||||||
phase: AdditionalArtifactResolutionPhase,
|
phase: AdditionalArtifactResolutionPhase,
|
||||||
priority: Priority
|
priority: Priority,
|
||||||
) {
|
) {
|
||||||
registeredAdditionalArtifactResolvers.add(
|
registeredAdditionalArtifactResolvers.add(
|
||||||
RegisteredAdditionalArtifactResolver(
|
RegisteredAdditionalArtifactResolver(
|
||||||
@@ -140,8 +149,15 @@ internal class IdeMultiplatformImportImpl(
|
|||||||
private fun createAdditionalArtifactsResolver() = IdeAdditionalArtifactResolver(
|
private fun createAdditionalArtifactsResolver() = IdeAdditionalArtifactResolver(
|
||||||
AdditionalArtifactResolutionPhase.values().map { phase -> createAdditionalArtifactsResolver(phase) })
|
AdditionalArtifactResolutionPhase.values().map { phase -> createAdditionalArtifactsResolver(phase) })
|
||||||
|
|
||||||
private fun createAdditionalArtifactsResolver(phase: AdditionalArtifactResolutionPhase) =
|
private fun createAdditionalArtifactsResolver(phase: AdditionalArtifactResolutionPhase): IdeAdditionalArtifactResolver {
|
||||||
IdeAdditionalArtifactResolver resolve@{ sourceSet, dependencies ->
|
/*
|
||||||
|
Skip resolving sources if IDE instructs us to (ideaGradleDownloadSourcesProperty is passed by the IDE, reflecting user settings)
|
||||||
|
*/
|
||||||
|
if (phase == SourcesAndDocumentationResolution && ideaGradleDownloadSourcesProperty.orNull?.toBoolean() == false) {
|
||||||
|
return IdeAdditionalArtifactResolver.empty
|
||||||
|
}
|
||||||
|
|
||||||
|
return IdeAdditionalArtifactResolver resolve@{ sourceSet, dependencies ->
|
||||||
val applicableResolvers = registeredAdditionalArtifactResolvers
|
val applicableResolvers = registeredAdditionalArtifactResolvers
|
||||||
.filter { it.phase == phase }
|
.filter { it.phase == phase }
|
||||||
.filter { it.constraint(sourceSet) }
|
.filter { it.constraint(sourceSet) }
|
||||||
@@ -155,6 +171,7 @@ internal class IdeMultiplatformImportImpl(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun createDependencyTransformer(): IdeDependencyTransformer {
|
private fun createDependencyTransformer(): IdeDependencyTransformer {
|
||||||
return IdeDependencyTransformer(DependencyTransformationPhase.values().map { phase ->
|
return IdeDependencyTransformer(DependencyTransformationPhase.values().map { phase ->
|
||||||
@@ -189,7 +206,7 @@ internal class IdeMultiplatformImportImpl(
|
|||||||
private data class RegisteredDependencyTransformer(
|
private data class RegisteredDependencyTransformer(
|
||||||
val transformer: IdeDependencyTransformer,
|
val transformer: IdeDependencyTransformer,
|
||||||
val constraint: SourceSetConstraint,
|
val constraint: SourceSetConstraint,
|
||||||
val phase: DependencyTransformationPhase
|
val phase: DependencyTransformationPhase,
|
||||||
)
|
)
|
||||||
|
|
||||||
private data class RegisteredDependencyEffect(
|
private data class RegisteredDependencyEffect(
|
||||||
|
|||||||
+2
-13
@@ -10,11 +10,9 @@ import org.gradle.api.artifacts.component.ModuleComponentIdentifier
|
|||||||
import org.gradle.api.artifacts.result.ResolvedArtifactResult
|
import org.gradle.api.artifacts.result.ResolvedArtifactResult
|
||||||
import org.gradle.jvm.JvmLibrary
|
import org.gradle.jvm.JvmLibrary
|
||||||
import org.gradle.language.base.artifact.SourcesArtifact
|
import org.gradle.language.base.artifact.SourcesArtifact
|
||||||
import org.gradle.language.java.artifact.JavadocArtifact
|
|
||||||
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.documentationClasspath
|
|
||||||
import org.jetbrains.kotlin.gradle.idea.tcs.extras.sourcesClasspath
|
import org.jetbrains.kotlin.gradle.idea.tcs.extras.sourcesClasspath
|
||||||
import org.jetbrains.kotlin.gradle.idea.tcs.isKotlinCompileBinaryType
|
import org.jetbrains.kotlin.gradle.idea.tcs.isKotlinCompileBinaryType
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||||
@@ -41,9 +39,10 @@ internal object IdeArtifactResolutionQuerySourcesAndDocumentationResolver : IdeA
|
|||||||
|
|
||||||
val project = sourceSet.project
|
val project = sourceSet.project
|
||||||
val configuration = selectConfiguration(sourceSet)
|
val configuration = selectConfiguration(sourceSet)
|
||||||
|
|
||||||
val resolutionResult = project.dependencies.createArtifactResolutionQuery()
|
val resolutionResult = project.dependencies.createArtifactResolutionQuery()
|
||||||
.forComponents(configuration.incoming.resolutionResult.allComponents.map { it.id })
|
.forComponents(configuration.incoming.resolutionResult.allComponents.map { it.id })
|
||||||
.withArtifacts(JvmLibrary::class.java, SourcesArtifact::class.java, JavadocArtifact::class.java)
|
.withArtifacts(JvmLibrary::class.java, SourcesArtifact::class.java)
|
||||||
.execute()
|
.execute()
|
||||||
|
|
||||||
val sourcesArtifacts = resolutionResult.resolvedComponents.flatMap { resolved ->
|
val sourcesArtifacts = resolutionResult.resolvedComponents.flatMap { resolved ->
|
||||||
@@ -55,16 +54,6 @@ internal object IdeArtifactResolutionQuerySourcesAndDocumentationResolver : IdeA
|
|||||||
dependency.sourcesClasspath.add(artifact.file)
|
dependency.sourcesClasspath.add(artifact.file)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val javadocArtifacts = resolutionResult.resolvedComponents.flatMap { resolved ->
|
|
||||||
resolved.getArtifacts(JavadocArtifact::class.java).filterIsInstance<ResolvedArtifactResult>()
|
|
||||||
}
|
|
||||||
|
|
||||||
javadocArtifacts.forEach { artifact ->
|
|
||||||
binaryDependencies[Coordinates(artifact)]?.forEach { dependency ->
|
|
||||||
dependency.documentationClasspath.add(artifact.file)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun selectConfiguration(sourceSet: KotlinSourceSet): Configuration {
|
private fun selectConfiguration(sourceSet: KotlinSourceSet): Configuration {
|
||||||
|
|||||||
-28
@@ -1,28 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
@file:Suppress("FunctionName")
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.gradle.plugin.ide.dependencyResolvers
|
|
||||||
|
|
||||||
import org.gradle.api.attributes.Category
|
|
||||||
import org.gradle.api.attributes.DocsType
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.ide.IdeAdditionalArtifactResolver
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.ide.IdeDependencyResolver
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.ide.asAdditionalArtifactResolver
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.resolvableMetadataConfiguration
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.sources.internal
|
|
||||||
import org.jetbrains.kotlin.gradle.utils.named
|
|
||||||
|
|
||||||
internal fun IdeMetadataSourcesResolver(): IdeAdditionalArtifactResolver = IdeBinaryDependencyResolver(
|
|
||||||
binaryType = IdeDependencyResolver.SOURCES_BINARY_TYPE,
|
|
||||||
artifactResolutionStrategy = IdeBinaryDependencyResolver.ArtifactResolutionStrategy.ResolvableConfiguration(
|
|
||||||
configurationSelector = { it.internal.resolvableMetadataConfiguration },
|
|
||||||
setupArtifactViewAttributes = {
|
|
||||||
attribute(Category.CATEGORY_ATTRIBUTE, it.project.objects.named(Category.DOCUMENTATION))
|
|
||||||
attribute(DocsType.DOCS_TYPE_ATTRIBUTE, it.project.objects.named(DocsType.SOURCES))
|
|
||||||
}
|
|
||||||
)
|
|
||||||
).asAdditionalArtifactResolver()
|
|
||||||
-23
@@ -1,23 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
@file:Suppress("FunctionName")
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.gradle.plugin.ide.dependencyResolvers
|
|
||||||
|
|
||||||
import org.gradle.api.attributes.Category
|
|
||||||
import org.gradle.api.attributes.DocsType
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.ide.IdeDependencyResolver
|
|
||||||
import org.jetbrains.kotlin.gradle.utils.named
|
|
||||||
|
|
||||||
internal fun IdePlatformSourcesResolver(): IdeBinaryDependencyResolver = IdeBinaryDependencyResolver(
|
|
||||||
binaryType = IdeDependencyResolver.SOURCES_BINARY_TYPE,
|
|
||||||
artifactResolutionStrategy = IdeBinaryDependencyResolver.ArtifactResolutionStrategy.Compilation(
|
|
||||||
setupArtifactViewAttributes = {
|
|
||||||
attribute(Category.CATEGORY_ATTRIBUTE, it.project.objects.named(Category.DOCUMENTATION))
|
|
||||||
attribute(DocsType.DOCS_TYPE_ATTRIBUTE, it.project.objects.named(DocsType.SOURCES))
|
|
||||||
}
|
|
||||||
)
|
|
||||||
)
|
|
||||||
Reference in New Issue
Block a user