diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport.kt index 5eb11e3ebdc..4c5d0b4dac7 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport.kt @@ -7,6 +7,8 @@ package org.jetbrains.kotlin.gradle.plugin.ide import org.gradle.api.Project +import org.gradle.api.logging.Logger +import org.gradle.api.logging.Logging import org.jetbrains.kotlin.gradle.ExternalKotlinTargetApi import org.jetbrains.kotlin.gradle.dsl.kotlinExtension import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull @@ -159,6 +161,8 @@ interface IdeMultiplatformImport { } companion object { + internal val logger: Logger = Logging.getLogger(IdeMultiplatformImport::class.java) + @JvmStatic fun instance(project: Project): IdeMultiplatformImport { return project.extraProperties.getOrPut(IdeMultiplatformImport::class.java.name) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImportImpl.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImportImpl.kt index 98f25ff4769..7d4b386cb6b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImportImpl.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImportImpl.kt @@ -14,6 +14,7 @@ import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinDependency import org.jetbrains.kotlin.gradle.kpm.idea.IdeaSerializationContext import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.ide.IdeMultiplatformImport.* +import org.jetbrains.kotlin.gradle.plugin.ide.IdeMultiplatformImport.Companion.logger import org.jetbrains.kotlin.tooling.core.Extras @@ -43,24 +44,6 @@ internal class IdeMultiplatformImportImpl( return context.extrasSerializationExtension.serializer(key)?.serialize(context, value) } - private data class RegisteredDependencyResolver( - val resolver: IdeDependencyResolver, - val constraint: SourceSetConstraint, - val phase: DependencyResolutionPhase, - val level: DependencyResolutionLevel, - ) - - private data class RegisteredDependencyTransformer( - val transformer: IdeDependencyTransformer, - val constraint: SourceSetConstraint, - val phase: DependencyTransformationPhase - ) - - private data class RegisteredDependencyEffect( - val effect: IdeDependencyEffect, - val constraint: SourceSetConstraint, - ) - private val registeredDependencyResolvers = mutableListOf() private val registeredDependencyTransformers = mutableListOf() private val registeredDependencyEffects = mutableListOf() @@ -116,7 +99,7 @@ internal class IdeMultiplatformImportImpl( /* Find resolvers in the highest resolution level and only consider those */ DependencyResolutionLevel.values().reversed().forEach { level -> - val resolvers = applicableResolvers[level].orEmpty().map { it.resolver } + val resolvers = applicableResolvers[level].orEmpty() if (resolvers.isNotEmpty()) { return@resolve IdeDependencyResolver(resolvers).resolve(sourceSet) } @@ -155,4 +138,39 @@ internal class IdeMultiplatformImportImpl( extrasSerializationExtensions = registeredExtrasSerializationExtensions.toList() ) } + + private data class RegisteredDependencyTransformer( + val transformer: IdeDependencyTransformer, + val constraint: SourceSetConstraint, + val phase: DependencyTransformationPhase + ) + + private data class RegisteredDependencyEffect( + val effect: IdeDependencyEffect, + val constraint: SourceSetConstraint, + ) + + private class RegisteredDependencyResolver( + private val resolver: IdeDependencyResolver, + val constraint: SourceSetConstraint, + val phase: DependencyResolutionPhase, + val level: DependencyResolutionLevel, + ) : IdeDependencyResolver { + + override fun resolve(sourceSet: KotlinSourceSet): Set { + return runCatching { resolver.resolve(sourceSet) } + .onFailure { error -> reportError(sourceSet, error) } + .onSuccess { dependencies -> reportSuccess(sourceSet, dependencies) } + .getOrNull().orEmpty() + } + + private fun reportError(sourceSet: KotlinSourceSet, error: Throwable) { + logger.error("e: ${resolver::class.java.name} failed on ${IdeaKotlinSourceCoordinates(sourceSet)}", error) + } + + private fun reportSuccess(sourceSet: KotlinSourceSet, dependencies: Set) { + if (!logger.isDebugEnabled) return + logger.debug("${resolver::class.java.name} resolved on ${IdeaKotlinSourceCoordinates(sourceSet)}: $dependencies") + } + } }