From 34490823055e9b95e3536bde849bb18fba6b5c56 Mon Sep 17 00:00:00 2001 From: daz Date: Wed, 12 Jul 2023 10:53:16 -0600 Subject: [PATCH] Rename model classes: Component -> Dependency --- .../dependencygraph/internal/BuildLayout.kt | 10 ++--- .../internal/DependencyExtractor.kt | 38 +++++++++---------- .../GitHubRepositorySnapshotBuilder.kt | 20 +++++----- .../internal/model/ComponentCoordinates.kt | 3 -- .../internal/model/DependencyCoordinates.kt | 3 ++ .../internal/model/DependencySource.kt | 10 +++++ .../internal/model/ResolutionRoot.kt | 9 ----- .../internal/model/ResolvedConfiguration.kt | 6 +-- ...lvedComponent.kt => ResolvedDependency.kt} | 6 +-- 9 files changed, 51 insertions(+), 54 deletions(-) delete mode 100644 plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/ComponentCoordinates.kt create mode 100644 plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/DependencyCoordinates.kt create mode 100644 plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/DependencySource.kt delete mode 100644 plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/ResolutionRoot.kt rename plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/{ResolvedComponent.kt => ResolvedDependency.kt} (60%) diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/BuildLayout.kt b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/BuildLayout.kt index b7f8dea5..20078f56 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/BuildLayout.kt +++ b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/BuildLayout.kt @@ -1,7 +1,7 @@ package org.gradle.github.dependencygraph.internal import org.gradle.github.dependencygraph.internal.json.GitHubManifestFile -import org.gradle.github.dependencygraph.internal.model.ResolutionRoot +import org.gradle.github.dependencygraph.internal.model.DependencySource import java.nio.file.Path import java.nio.file.Paths import java.util.concurrent.ConcurrentHashMap @@ -14,15 +14,11 @@ class BuildLayout(val gitWorkspaceDirectory: Path) { projectToRelativeBuildFile[identityPath] = gitWorkspaceDirectory.relativize(buildFilePath).toString() } - private fun buildFileForProject(identityPath: String): GitHubManifestFile? { - return projectToRelativeBuildFile[identityPath]?.let { + fun getBuildFile(dependencySource: DependencySource): GitHubManifestFile? { + return projectToRelativeBuildFile[dependencySource.path]?.let { // Cleanup the path for Windows systems val sourceLocation = it.replace('\\', '/') GitHubManifestFile(sourceLocation = sourceLocation) } } - - fun getBuildFile(rootComponent: ResolutionRoot): GitHubManifestFile? { - return buildFileForProject(rootComponent.path) - } } \ No newline at end of file diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/DependencyExtractor.kt b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/DependencyExtractor.kt index 753e21aa..a8f5cef0 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/DependencyExtractor.kt +++ b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/DependencyExtractor.kt @@ -6,9 +6,9 @@ import org.gradle.api.artifacts.result.ResolvedDependencyResult import org.gradle.api.internal.artifacts.DefaultProjectComponentIdentifier import org.gradle.api.internal.artifacts.configurations.ResolveConfigurationDependenciesBuildOperationType import org.gradle.github.GitHubDependencyGraphPlugin -import org.gradle.github.dependencygraph.internal.model.ComponentCoordinates -import org.gradle.github.dependencygraph.internal.model.ResolutionRoot -import org.gradle.github.dependencygraph.internal.model.ResolvedComponent +import org.gradle.github.dependencygraph.internal.model.DependencyCoordinates +import org.gradle.github.dependencygraph.internal.model.DependencySource +import org.gradle.github.dependencygraph.internal.model.ResolvedDependency import org.gradle.github.dependencygraph.internal.model.ResolvedConfiguration import org.gradle.internal.exceptions.DefaultMultiCauseException import org.gradle.internal.operations.* @@ -118,20 +118,20 @@ abstract class DependencyExtractor : val projectIdentityPath = (rootComponent.id as? DefaultProjectComponentIdentifier)?.identityPath?.path val rootPath = projectIdentityPath ?: details.buildPath val rootId = if (projectIdentityPath == null) "build $rootPath" else componentId(rootComponent) - val resolutionRoot = ResolutionRoot(rootId, rootPath) - val resolvedConfiguration = ResolvedConfiguration(resolutionRoot) + val rootSource = DependencySource(rootId, rootPath) + val resolvedConfiguration = ResolvedConfiguration(rootSource) for (directDependency in getResolvedDependencies(rootComponent)) { val directDep = createComponentNode( componentId(directDependency), - resolutionRoot, + rootSource, true, directDependency, repositoryLookup ) resolvedConfiguration.addDependency(directDep) - walkComponentDependencies(directDependency, resolutionRoot, repositoryLookup, resolvedConfiguration) + walkComponentDependencies(directDependency, directDep.source, repositoryLookup, resolvedConfiguration) } resolvedConfigurations.add(resolvedConfiguration) @@ -139,51 +139,51 @@ abstract class DependencyExtractor : private fun walkComponentDependencies( component: ResolvedComponentResult, - resolveContext: ResolutionRoot, + parentSource: DependencySource, repositoryLookup: RepositoryUrlLookup, resolvedConfiguration: ResolvedConfiguration ) { - val rootComponent = getResolutionRoot(component, resolveContext) - val direct = rootComponent != resolveContext + val componentSource = getSource(component, parentSource) + val direct = componentSource != parentSource val dependencyComponents = getResolvedDependencies(component) for (dependencyComponent in dependencyComponents) { val dependencyId = componentId(dependencyComponent) if (!resolvedConfiguration.hasDependency(dependencyId)) { - val dependencyNode = createComponentNode(dependencyId, rootComponent, direct, dependencyComponent, repositoryLookup) + val dependencyNode = createComponentNode(dependencyId, componentSource, direct, dependencyComponent, repositoryLookup) resolvedConfiguration.addDependency(dependencyNode) - walkComponentDependencies(dependencyComponent, rootComponent, repositoryLookup, resolvedConfiguration) + walkComponentDependencies(dependencyComponent, componentSource, repositoryLookup, resolvedConfiguration) } } } - private fun getResolutionRoot(component: ResolvedComponentResult, resolveContext: ResolutionRoot): ResolutionRoot { + private fun getSource(component: ResolvedComponentResult, source: DependencySource): DependencySource { val componentId = component.id if (componentId is DefaultProjectComponentIdentifier) { - return ResolutionRoot(componentId(component), componentId.identityPath.path) + return DependencySource(componentId(component), componentId.identityPath.path) } - return resolveContext + return source } private fun getResolvedDependencies(component: ResolvedComponentResult): List { return component.dependencies.filterIsInstance().map { it.selected }.filter { it != component } } - private fun createComponentNode(componentId: String, rootComponent: ResolutionRoot, direct: Boolean, component: ResolvedComponentResult, repositoryLookup: RepositoryUrlLookup): ResolvedComponent { + private fun createComponentNode(componentId: String, source: DependencySource, direct: Boolean, component: ResolvedComponentResult, repositoryLookup: RepositoryUrlLookup): ResolvedDependency { val componentDependencies = component.dependencies.filterIsInstance().map { componentId(it.selected) } val repositoryUrl = repositoryLookup.doLookup(component) - return ResolvedComponent(componentId, rootComponent, direct, coordinates(component), repositoryUrl, componentDependencies) + return ResolvedDependency(componentId, source, direct, coordinates(component), repositoryUrl, componentDependencies) } private fun componentId(component: ResolvedComponentResult): String { return component.id.displayName } - private fun coordinates(component: ResolvedComponentResult): ComponentCoordinates { + private fun coordinates(component: ResolvedComponentResult): DependencyCoordinates { // TODO: Consider and handle null moduleVersion val moduleVersionIdentifier = component.moduleVersion!! - return ComponentCoordinates(moduleVersionIdentifier.group, moduleVersionIdentifier.name, moduleVersionIdentifier.version) + return DependencyCoordinates(moduleVersionIdentifier.group, moduleVersionIdentifier.name, moduleVersionIdentifier.version) } private class RepositoryUrlLookup( diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/GitHubRepositorySnapshotBuilder.kt b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/GitHubRepositorySnapshotBuilder.kt index d3770274..642067c9 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/GitHubRepositorySnapshotBuilder.kt +++ b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/GitHubRepositorySnapshotBuilder.kt @@ -1,10 +1,10 @@ package org.gradle.github.dependencygraph.internal import com.github.packageurl.PackageURLBuilder -import org.gradle.github.dependencygraph.internal.model.ResolvedComponent +import org.gradle.github.dependencygraph.internal.model.ResolvedDependency import org.gradle.github.dependencygraph.internal.model.ResolvedConfiguration import org.gradle.github.dependencygraph.internal.json.* -import org.gradle.github.dependencygraph.internal.model.ResolutionRoot +import org.gradle.github.dependencygraph.internal.model.DependencySource private const val DEFAULT_MAVEN_REPOSITORY_URL = "https://repo.maven.apache.org/maven2" @@ -32,14 +32,14 @@ class GitHubRepositorySnapshotBuilder( // Ignore project dependencies (transitive deps of projects will be reported with project) if (isProject(dependency)) continue - val rootComponent = dependency.rootComponent - val dependencyCollector = manifestDependencies.getOrPut(rootComponent.id) { DependencyCollector(rootComponent) } + val source = dependency.source + val dependencyCollector = manifestDependencies.getOrPut(source.id) { DependencyCollector(source) } dependencyCollector.addResolved(dependency) } } val manifests = manifestDependencies.mapValues { (name, collector) -> - val manifestFile = buildLayout.getBuildFile(collector.rootComponent) + val manifestFile = buildLayout.getBuildFile(collector.dependencySource) GitHubManifest( name, @@ -57,17 +57,17 @@ class GitHubRepositorySnapshotBuilder( } // TODO:DAZ Model this better - private fun isProject(dependency: ResolvedComponent): Boolean { + private fun isProject(dependency: ResolvedDependency): Boolean { return dependency.id.startsWith("project ") } - private class DependencyCollector(val rootComponent: ResolutionRoot) { + private class DependencyCollector(val dependencySource: DependencySource) { private val dependencyBuilders: MutableMap = mutableMapOf() /** * Merge each resolved component with the same ID into a single GitHubDependency. */ - fun addResolved(component: ResolvedComponent) { + fun addResolved(component: ResolvedDependency) { val dep = dependencyBuilders.getOrPut(component.id) { GitHubDependencyBuilder(packageUrl(component)) } @@ -84,10 +84,10 @@ class GitHubRepositorySnapshotBuilder( } } - private fun relationship(component: ResolvedComponent) = + private fun relationship(component: ResolvedDependency) = if (component.direct) GitHubDependency.Relationship.direct else GitHubDependency.Relationship.indirect - private fun packageUrl(component: ResolvedComponent) = + private fun packageUrl(component: ResolvedDependency) = PackageURLBuilder .aPackageURL() .withType("maven") diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/ComponentCoordinates.kt b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/ComponentCoordinates.kt deleted file mode 100644 index 80419207..00000000 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/ComponentCoordinates.kt +++ /dev/null @@ -1,3 +0,0 @@ -package org.gradle.github.dependencygraph.internal.model - -data class ComponentCoordinates(val group: String, val module: String, val version: String) diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/DependencyCoordinates.kt b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/DependencyCoordinates.kt new file mode 100644 index 00000000..75744cad --- /dev/null +++ b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/DependencyCoordinates.kt @@ -0,0 +1,3 @@ +package org.gradle.github.dependencygraph.internal.model + +data class DependencyCoordinates(val group: String, val module: String, val version: String) diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/DependencySource.kt b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/DependencySource.kt new file mode 100644 index 00000000..2355c1c4 --- /dev/null +++ b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/DependencySource.kt @@ -0,0 +1,10 @@ +package org.gradle.github.dependencygraph.internal.model + +/** + * The source of a dependency declaration, representing where the direct dependency is declared, + * or where the parent dependency is declared for transitive dependencies. + * In most cases, this will be the project component that declares the dependency, + * but may also be a Version Catalog or the build as a whole. + * We attempt to map this to an actual source file location when building a dependency report. + */ +data class DependencySource(val id: String, val path: String) diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/ResolutionRoot.kt b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/ResolutionRoot.kt deleted file mode 100644 index 2f4feba4..00000000 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/ResolutionRoot.kt +++ /dev/null @@ -1,9 +0,0 @@ -package org.gradle.github.dependencygraph.internal.model - -/** - * A root component in dependency resolution, this represents a component that "owns" or declares - * dependencies within a given resolution. - * In most cases, this will be the project component that declares the dependency, but for certain resolutions - * this component will represent an overall build. - */ -data class ResolutionRoot(val id: String, val path: String) diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/ResolvedConfiguration.kt b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/ResolvedConfiguration.kt index 92236de1..4075fafa 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/ResolvedConfiguration.kt +++ b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/ResolvedConfiguration.kt @@ -1,10 +1,10 @@ package org.gradle.github.dependencygraph.internal.model data class ResolvedConfiguration( - val rootComponent: ResolutionRoot, - val allDependencies: MutableList = mutableListOf() + val rootSource: DependencySource, + val allDependencies: MutableList = mutableListOf() ) { - fun addDependency(component: ResolvedComponent) { + fun addDependency(component: ResolvedDependency) { allDependencies.add(component) } diff --git a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/ResolvedComponent.kt b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/ResolvedDependency.kt similarity index 60% rename from plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/ResolvedComponent.kt rename to plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/ResolvedDependency.kt index 8acd6db0..a38d435e 100644 --- a/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/ResolvedComponent.kt +++ b/plugin/src/main/kotlin/org/gradle/github/dependencygraph/internal/model/ResolvedDependency.kt @@ -1,10 +1,10 @@ package org.gradle.github.dependencygraph.internal.model -data class ResolvedComponent( +data class ResolvedDependency( val id: String, - val rootComponent: ResolutionRoot, + val source: DependencySource, val direct: Boolean, - val coordinates: ComponentCoordinates, + val coordinates: DependencyCoordinates, val repositoryUrl: String?, val dependencies: List )