[Gradle] IdeMultiplatformImportImpl: Catch exceptions in dependency resolvers
KT-54977
This commit is contained in:
committed by
Space Team
parent
fb2485f83c
commit
d268a7e117
+4
@@ -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) {
|
||||
|
||||
+37
-19
@@ -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<RegisteredDependencyResolver>()
|
||||
private val registeredDependencyTransformers = mutableListOf<RegisteredDependencyTransformer>()
|
||||
private val registeredDependencyEffects = mutableListOf<RegisteredDependencyEffect>()
|
||||
@@ -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<IdeaKotlinDependency> {
|
||||
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<IdeaKotlinDependency>) {
|
||||
if (!logger.isDebugEnabled) return
|
||||
logger.debug("${resolver::class.java.name} resolved on ${IdeaKotlinSourceCoordinates(sourceSet)}: $dependencies")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user