[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
|
package org.jetbrains.kotlin.gradle.plugin.ide
|
||||||
|
|
||||||
import org.gradle.api.Project
|
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.ExternalKotlinTargetApi
|
||||||
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
||||||
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
|
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
|
||||||
@@ -159,6 +161,8 @@ interface IdeMultiplatformImport {
|
|||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
internal val logger: Logger = Logging.getLogger(IdeMultiplatformImport::class.java)
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun instance(project: Project): IdeMultiplatformImport {
|
fun instance(project: Project): IdeMultiplatformImport {
|
||||||
return project.extraProperties.getOrPut(IdeMultiplatformImport::class.java.name) {
|
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.kpm.idea.IdeaSerializationContext
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
||||||
import org.jetbrains.kotlin.gradle.plugin.ide.IdeMultiplatformImport.*
|
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
|
import org.jetbrains.kotlin.tooling.core.Extras
|
||||||
|
|
||||||
|
|
||||||
@@ -43,24 +44,6 @@ internal class IdeMultiplatformImportImpl(
|
|||||||
return context.extrasSerializationExtension.serializer(key)?.serialize(context, value)
|
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 registeredDependencyResolvers = mutableListOf<RegisteredDependencyResolver>()
|
||||||
private val registeredDependencyTransformers = mutableListOf<RegisteredDependencyTransformer>()
|
private val registeredDependencyTransformers = mutableListOf<RegisteredDependencyTransformer>()
|
||||||
private val registeredDependencyEffects = mutableListOf<RegisteredDependencyEffect>()
|
private val registeredDependencyEffects = mutableListOf<RegisteredDependencyEffect>()
|
||||||
@@ -116,7 +99,7 @@ internal class IdeMultiplatformImportImpl(
|
|||||||
|
|
||||||
/* Find resolvers in the highest resolution level and only consider those */
|
/* Find resolvers in the highest resolution level and only consider those */
|
||||||
DependencyResolutionLevel.values().reversed().forEach { level ->
|
DependencyResolutionLevel.values().reversed().forEach { level ->
|
||||||
val resolvers = applicableResolvers[level].orEmpty().map { it.resolver }
|
val resolvers = applicableResolvers[level].orEmpty()
|
||||||
if (resolvers.isNotEmpty()) {
|
if (resolvers.isNotEmpty()) {
|
||||||
return@resolve IdeDependencyResolver(resolvers).resolve(sourceSet)
|
return@resolve IdeDependencyResolver(resolvers).resolve(sourceSet)
|
||||||
}
|
}
|
||||||
@@ -155,4 +138,39 @@ internal class IdeMultiplatformImportImpl(
|
|||||||
extrasSerializationExtensions = registeredExtrasSerializationExtensions.toList()
|
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