[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
|
||||
)
|
||||
|
||||
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) {
|
||||
registerAdditionalArtifactResolver(
|
||||
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.ide.IdeDependencyResolver.Companion.resolvedBy
|
||||
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.tooling.core.Extras
|
||||
import org.jetbrains.kotlin.tooling.core.HasMutableExtras
|
||||
@@ -22,7 +23,7 @@ import org.jetbrains.kotlin.utils.addToStdlib.measureTimeMillisWithResult
|
||||
import kotlin.system.measureTimeMillis
|
||||
|
||||
internal class IdeMultiplatformImportImpl(
|
||||
private val extension: KotlinProjectExtension
|
||||
private val extension: KotlinProjectExtension,
|
||||
) : IdeMultiplatformImport {
|
||||
|
||||
override fun resolveDependencies(sourceSetName: String): Set<IdeaKotlinDependency> {
|
||||
@@ -58,6 +59,14 @@ internal class IdeMultiplatformImportImpl(
|
||||
private val registeredDependencyEffects = mutableListOf<RegisteredDependencyEffect>()
|
||||
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)
|
||||
override fun registerDependencyResolver(
|
||||
resolver: IdeDependencyResolver,
|
||||
@@ -80,7 +89,7 @@ internal class IdeMultiplatformImportImpl(
|
||||
override fun registerDependencyTransformer(
|
||||
transformer: IdeDependencyTransformer,
|
||||
constraint: SourceSetConstraint,
|
||||
phase: DependencyTransformationPhase
|
||||
phase: DependencyTransformationPhase,
|
||||
) {
|
||||
registeredDependencyTransformers.add(
|
||||
RegisteredDependencyTransformer(transformer, constraint, phase)
|
||||
@@ -91,7 +100,7 @@ internal class IdeMultiplatformImportImpl(
|
||||
resolver: IdeAdditionalArtifactResolver,
|
||||
constraint: SourceSetConstraint,
|
||||
phase: AdditionalArtifactResolutionPhase,
|
||||
priority: Priority
|
||||
priority: Priority,
|
||||
) {
|
||||
registeredAdditionalArtifactResolvers.add(
|
||||
RegisteredAdditionalArtifactResolver(
|
||||
@@ -140,8 +149,15 @@ internal class IdeMultiplatformImportImpl(
|
||||
private fun createAdditionalArtifactsResolver() = IdeAdditionalArtifactResolver(
|
||||
AdditionalArtifactResolutionPhase.values().map { phase -> createAdditionalArtifactsResolver(phase) })
|
||||
|
||||
private fun createAdditionalArtifactsResolver(phase: AdditionalArtifactResolutionPhase) =
|
||||
IdeAdditionalArtifactResolver resolve@{ sourceSet, dependencies ->
|
||||
private fun createAdditionalArtifactsResolver(phase: AdditionalArtifactResolutionPhase): IdeAdditionalArtifactResolver {
|
||||
/*
|
||||
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
|
||||
.filter { it.phase == phase }
|
||||
.filter { it.constraint(sourceSet) }
|
||||
@@ -155,6 +171,7 @@ internal class IdeMultiplatformImportImpl(
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun createDependencyTransformer(): IdeDependencyTransformer {
|
||||
return IdeDependencyTransformer(DependencyTransformationPhase.values().map { phase ->
|
||||
@@ -189,7 +206,7 @@ internal class IdeMultiplatformImportImpl(
|
||||
private data class RegisteredDependencyTransformer(
|
||||
val transformer: IdeDependencyTransformer,
|
||||
val constraint: SourceSetConstraint,
|
||||
val phase: DependencyTransformationPhase
|
||||
val phase: DependencyTransformationPhase,
|
||||
)
|
||||
|
||||
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.jvm.JvmLibrary
|
||||
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.IdeaKotlinDependency
|
||||
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.isKotlinCompileBinaryType
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||
@@ -41,9 +39,10 @@ internal object IdeArtifactResolutionQuerySourcesAndDocumentationResolver : IdeA
|
||||
|
||||
val project = sourceSet.project
|
||||
val configuration = selectConfiguration(sourceSet)
|
||||
|
||||
val resolutionResult = project.dependencies.createArtifactResolutionQuery()
|
||||
.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()
|
||||
|
||||
val sourcesArtifacts = resolutionResult.resolvedComponents.flatMap { resolved ->
|
||||
@@ -55,16 +54,6 @@ internal object IdeArtifactResolutionQuerySourcesAndDocumentationResolver : IdeA
|
||||
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 {
|
||||
|
||||
-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