[Gradle] Fix validatedExportedLibraries to work with ResolvedDependencyGraph
Instead of ResolvedConfiguration
This commit is contained in:
+22
-19
@@ -12,6 +12,7 @@ import org.gradle.api.Project
|
|||||||
import org.gradle.api.artifacts.*
|
import org.gradle.api.artifacts.*
|
||||||
import org.gradle.api.artifacts.component.ModuleComponentIdentifier
|
import org.gradle.api.artifacts.component.ModuleComponentIdentifier
|
||||||
import org.gradle.api.artifacts.component.ModuleComponentSelector
|
import org.gradle.api.artifacts.component.ModuleComponentSelector
|
||||||
|
import org.gradle.api.artifacts.component.ProjectComponentIdentifier
|
||||||
import org.gradle.api.artifacts.result.DependencyResult
|
import org.gradle.api.artifacts.result.DependencyResult
|
||||||
import org.gradle.api.artifacts.result.ResolvedDependencyResult
|
import org.gradle.api.artifacts.result.ResolvedDependencyResult
|
||||||
import org.gradle.api.file.ConfigurableFileCollection
|
import org.gradle.api.file.ConfigurableFileCollection
|
||||||
@@ -557,14 +558,12 @@ constructor(
|
|||||||
@Input get() = binary is TestExecutable
|
@Input get() = binary is TestExecutable
|
||||||
|
|
||||||
@get:Classpath
|
@get:Classpath
|
||||||
val exportLibraries: FileCollection by lazy {
|
val exportLibraries: FileCollection get() = exportLibrariesResolvedGraph?.files ?: objectFactory.fileCollection()
|
||||||
binary.let {
|
|
||||||
if (it is AbstractNativeLibrary) {
|
private val exportLibrariesResolvedGraph = if (binary is AbstractNativeLibrary) {
|
||||||
project.files(project.configurations.getByName(it.exportConfigurationName))
|
ResolvedDependencyGraph(project, project.configurations.getByName(binary.exportConfigurationName))
|
||||||
} else {
|
} else {
|
||||||
objectFactory.fileCollection()
|
null
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@get:Input
|
@get:Input
|
||||||
@@ -605,22 +604,26 @@ constructor(
|
|||||||
) = Unit
|
) = Unit
|
||||||
|
|
||||||
private fun validatedExportedLibraries() {
|
private fun validatedExportedLibraries() {
|
||||||
val exportConfiguration = exportLibraries as? Configuration ?: return
|
if (exportLibrariesResolvedGraph == null) return
|
||||||
|
|
||||||
val failed = mutableSetOf<Dependency>()
|
val failed = mutableSetOf<ResolvedDependencyResult>()
|
||||||
exportConfiguration.allDependencies.forEach {
|
exportLibrariesResolvedGraph
|
||||||
val dependencyFiles = exportConfiguration.files(it).filterKlibsPassedToCompiler()
|
.allDependencies
|
||||||
if (!apiFiles.containsAll(dependencyFiles)) {
|
.filterIsInstance<ResolvedDependencyResult>()
|
||||||
failed.add(it)
|
.forEach {
|
||||||
|
val dependencyFiles = exportLibrariesResolvedGraph.dependencyArtifacts(it).map { it.file }.filterKlibsPassedToCompiler()
|
||||||
|
if (!apiFiles.containsAll(dependencyFiles)) {
|
||||||
|
failed.add(it)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
check(failed.isEmpty()) {
|
check(failed.isEmpty()) {
|
||||||
val failedDependenciesList = failed.joinToString(separator = "\n") {
|
val failedDependenciesList = failed.joinToString(separator = "\n") {
|
||||||
when (it) {
|
val componentId = it.selected.id
|
||||||
is FileCollectionDependency -> "|Files: ${it.files.files}"
|
when (componentId) {
|
||||||
is ProjectDependency -> "|Project ${it.dependencyProject.path}"
|
is ModuleComponentIdentifier -> "|Files: ${exportLibrariesResolvedGraph.dependencyArtifacts(it).map { it.file }}"
|
||||||
else -> "|${it.group}:${it.name}:${it.version}"
|
is ProjectComponentIdentifier -> "|Project ${componentId.projectPath}"
|
||||||
|
else -> "|${componentId.displayName}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+12
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.gradle.utils
|
|||||||
|
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
import org.gradle.api.artifacts.Configuration
|
import org.gradle.api.artifacts.Configuration
|
||||||
|
import org.gradle.api.artifacts.result.DependencyResult
|
||||||
import org.gradle.api.artifacts.result.ResolvedArtifactResult
|
import org.gradle.api.artifacts.result.ResolvedArtifactResult
|
||||||
import org.gradle.api.artifacts.result.ResolvedComponentResult
|
import org.gradle.api.artifacts.result.ResolvedComponentResult
|
||||||
import org.gradle.api.artifacts.result.ResolvedDependencyResult
|
import org.gradle.api.artifacts.result.ResolvedDependencyResult
|
||||||
@@ -35,6 +36,17 @@ private constructor (
|
|||||||
|
|
||||||
val artifactsByComponentId by lazy { artifacts.groupBy { it.id.componentIdentifier } }
|
val artifactsByComponentId by lazy { artifacts.groupBy { it.id.componentIdentifier } }
|
||||||
|
|
||||||
|
val allDependencies: List<DependencyResult> get() {
|
||||||
|
fun DependencyResult.allDependenciesRecursive(): List<DependencyResult> =
|
||||||
|
if (this is ResolvedDependencyResult) {
|
||||||
|
listOf(this) + selected.dependencies.flatMap { it.allDependenciesRecursive() }
|
||||||
|
} else {
|
||||||
|
listOf(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
return root.dependencies.flatMap { it.allDependenciesRecursive() }
|
||||||
|
}
|
||||||
|
|
||||||
fun dependencyArtifacts(dependency: ResolvedDependencyResult): List<ResolvedArtifactResult> {
|
fun dependencyArtifacts(dependency: ResolvedDependencyResult): List<ResolvedArtifactResult> {
|
||||||
val componentId = dependency.selected.id
|
val componentId = dependency.selected.id
|
||||||
return artifactsByComponentId[componentId] ?: emptyList()
|
return artifactsByComponentId[componentId] ?: emptyList()
|
||||||
|
|||||||
Reference in New Issue
Block a user