[Gradle] LazyResolvedConfiguration: Ensure lenient resolution of artifacts
^KT-56153 Verification Pending
This commit is contained in:
committed by
Space Team
parent
fc2da32eb6
commit
6d660451b5
+4
-2
@@ -31,7 +31,7 @@ internal class LazyResolvedConfiguration private constructor(
|
|||||||
// via ResolutionResult::root does. ResolutionResult can't be serialised for Configuration Cache
|
// via ResolutionResult::root does. ResolutionResult can't be serialised for Configuration Cache
|
||||||
// but ResolvedComponentResult can. Wrapping it in `lazy` makes it resolve upon serialisation.
|
// but ResolvedComponentResult can. Wrapping it in `lazy` makes it resolve upon serialisation.
|
||||||
resolvedComponentsRootProvider = configuration.incoming.resolutionResult.let { rr -> lazy { rr.root } },
|
resolvedComponentsRootProvider = configuration.incoming.resolutionResult.let { rr -> lazy { rr.root } },
|
||||||
artifactCollection = configuration.incoming.artifacts, // lazy ArtifactCollection
|
artifactCollection = configuration.incoming.artifactView { view -> view.isLenient = true }.artifacts, // lazy ArtifactCollection
|
||||||
configurationName = configuration.name
|
configurationName = configuration.name
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -39,7 +39,9 @@ internal class LazyResolvedConfiguration private constructor(
|
|||||||
|
|
||||||
val root by resolvedComponentsRootProvider
|
val root by resolvedComponentsRootProvider
|
||||||
|
|
||||||
private val resolvedArtifacts: Set<ResolvedArtifactResult> get() = artifactCollection.artifacts
|
val resolvedArtifacts: Set<ResolvedArtifactResult> get() = artifactCollection.artifacts
|
||||||
|
|
||||||
|
val resolutionFailures: Collection<Throwable> get() = artifactCollection.failures
|
||||||
|
|
||||||
private val artifactsByComponentId by TransientLazy { resolvedArtifacts.groupBy { it.id.componentIdentifier } }
|
private val artifactsByComponentId by TransientLazy { resolvedArtifacts.groupBy { it.id.componentIdentifier } }
|
||||||
|
|
||||||
|
|||||||
+26
@@ -9,6 +9,7 @@ package org.jetbrains.kotlin.gradle.dependencyResolutionTests
|
|||||||
|
|
||||||
import org.gradle.api.artifacts.Configuration
|
import org.gradle.api.artifacts.Configuration
|
||||||
import org.gradle.api.artifacts.component.ModuleComponentIdentifier
|
import org.gradle.api.artifacts.component.ModuleComponentIdentifier
|
||||||
|
import org.gradle.internal.component.external.model.DefaultModuleComponentSelector
|
||||||
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
|
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
|
||||||
import org.jetbrains.kotlin.gradle.plugin.kotlinToolingVersion
|
import org.jetbrains.kotlin.gradle.plugin.kotlinToolingVersion
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.internal
|
import org.jetbrains.kotlin.gradle.plugin.mpp.internal
|
||||||
@@ -118,4 +119,29 @@ class LazyResolvedConfigurationTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `test - unresolved dependency`() {
|
||||||
|
val project = buildProject()
|
||||||
|
val configuration = project.configurations.create("forTest")
|
||||||
|
val unresolvedDependency = project.dependencies.create("unresolved:dependency")
|
||||||
|
configuration.dependencies.add(unresolvedDependency)
|
||||||
|
|
||||||
|
val lazyConfiguration = LazyResolvedConfiguration(configuration)
|
||||||
|
if (lazyConfiguration.files.toList().isNotEmpty()) fail("Expected no files to be resolved")
|
||||||
|
if (lazyConfiguration.resolvedArtifacts.toList().isNotEmpty()) fail("Expected no artifacts to be resolved")
|
||||||
|
if (lazyConfiguration.allResolvedDependencies.isNotEmpty()) fail("Expected no resolved dependencies")
|
||||||
|
|
||||||
|
if (lazyConfiguration.resolutionFailures.size != 1) fail("Expected one resolution failure: ${lazyConfiguration.resolutionFailures}")
|
||||||
|
val failure = lazyConfiguration.resolutionFailures.first()
|
||||||
|
if ("unresolved:dependency" !in failure.message.orEmpty()) fail("Expected dependency mentioned in failure: ${failure.message}")
|
||||||
|
|
||||||
|
if (lazyConfiguration.allDependencies.size != 1) fail("Expected one dependency: ${lazyConfiguration.allDependencies}")
|
||||||
|
val resolvedDependencyResult = lazyConfiguration.allDependencies.first()
|
||||||
|
val moduleIdentifier = (resolvedDependencyResult.requested as DefaultModuleComponentSelector).moduleIdentifier
|
||||||
|
assertEquals("unresolved", moduleIdentifier.group)
|
||||||
|
assertEquals("dependency", moduleIdentifier.name)
|
||||||
|
|
||||||
|
if (lazyConfiguration.allResolvedDependencies.isNotEmpty()) fail("Expected no resolved dependencies")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user