Skip to content

Commit dcc97a0

Browse files
committed
refactor(model): Introduce a function to add dependencies to the graph
This reduces a bit of code duplication and avoids mistakes where the qualified scope is generated on each dependency iteration. Signed-off-by: Sebastian Schuberth <[email protected]>
1 parent aee88f2 commit dcc97a0

File tree

7 files changed

+19
-36
lines changed

7 files changed

+19
-36
lines changed

model/src/main/kotlin/utils/DependencyGraphBuilder.kt

+9
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,15 @@ class DependencyGraphBuilder<D>(
148148
fun addDependency(scopeName: String, dependency: D): DependencyGraphBuilder<D> =
149149
apply { addDependencyToGraph(scopeName, dependency, transitive = false, emptySet()) }
150150

151+
/**
152+
* Add all [dependencies] to the qualified scope name generated from the [projectId] and unqualified [scopeName].
153+
*/
154+
fun addDependencies(projectId: Identifier, scopeName: String, dependencies: Collection<D>) =
155+
apply {
156+
val qualifiedScopeName = DependencyGraph.qualifyScope(projectId, scopeName)
157+
dependencies.forEach { addDependency(qualifiedScopeName, it) }
158+
}
159+
151160
/**
152161
* Add the given [packages] to this builder. They are stored internally and also returned when querying the set of
153162
* known packages. This function can be used by package managers that have to deal with packages not part of

plugins/package-managers/gradle-inspector/src/main/kotlin/GradleInspector.kt

+1-7
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ import org.ossreviewtoolkit.analyzer.AbstractPackageManagerFactory
3737
import org.ossreviewtoolkit.analyzer.PackageManager
3838
import org.ossreviewtoolkit.analyzer.PackageManagerResult
3939
import org.ossreviewtoolkit.downloader.VersionControlSystem
40-
import org.ossreviewtoolkit.model.DependencyGraph
4140
import org.ossreviewtoolkit.model.Identifier
4241
import org.ossreviewtoolkit.model.Issue
4342
import org.ossreviewtoolkit.model.Project
@@ -254,12 +253,7 @@ class GradleInspector(
254253
dependencyTreeModel.configurations.filterNot {
255254
excludes.isScopeExcluded(it.name)
256255
}.forEach { configuration ->
257-
configuration.dependencies.forEach { dependency ->
258-
graphBuilder.addDependency(
259-
DependencyGraph.qualifyScope(projectId, configuration.name),
260-
dependency
261-
)
262-
}
256+
graphBuilder.addDependencies(projectId, configuration.name, configuration.dependencies)
263257
}
264258

265259
val project = Project(

plugins/package-managers/gradle/src/main/kotlin/Gradle.kt

+5-11
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ import org.ossreviewtoolkit.analyzer.AbstractPackageManagerFactory
4242
import org.ossreviewtoolkit.analyzer.PackageManager
4343
import org.ossreviewtoolkit.analyzer.PackageManagerResult
4444
import org.ossreviewtoolkit.downloader.VersionControlSystem
45-
import org.ossreviewtoolkit.model.DependencyGraph
4645
import org.ossreviewtoolkit.model.Identifier
4746
import org.ossreviewtoolkit.model.Issue
4847
import org.ossreviewtoolkit.model.Project
@@ -300,16 +299,11 @@ class Gradle(
300299
version = dependencyTreeModel.version
301300
)
302301

303-
dependencyTreeModel.configurations
304-
.filterNot { excludes.isScopeExcluded(it.name) }
305-
.forEach { configuration ->
306-
configuration.dependencies.forEach { dependency ->
307-
graphBuilder.addDependency(
308-
DependencyGraph.qualifyScope(projectId, configuration.name),
309-
dependency
310-
)
311-
}
312-
}
302+
dependencyTreeModel.configurations.filterNot {
303+
excludes.isScopeExcluded(it.name)
304+
}.forEach { configuration ->
305+
graphBuilder.addDependencies(projectId, configuration.name, configuration.dependencies)
306+
}
313307

314308
val project = Project(
315309
id = projectId,

plugins/package-managers/node/src/main/kotlin/npm/Npm.kt

+1-5
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ import org.apache.logging.log4j.kotlin.logger
2929
import org.ossreviewtoolkit.analyzer.AbstractPackageManagerFactory
3030
import org.ossreviewtoolkit.analyzer.PackageManager
3131
import org.ossreviewtoolkit.analyzer.PackageManagerResult
32-
import org.ossreviewtoolkit.model.DependencyGraph
3332
import org.ossreviewtoolkit.model.Issue
3433
import org.ossreviewtoolkit.model.Project
3534
import org.ossreviewtoolkit.model.ProjectAnalyzerResult
@@ -115,11 +114,8 @@ class Npm(
115114
.filterNot { excludes.isScopeExcluded(it.descriptor) }
116115
.mapTo(mutableSetOf()) { scope ->
117116
val scopeName = scope.descriptor
118-
val qualifiedScopeName = DependencyGraph.qualifyScope(project, scopeName)
119117

120-
projectModuleInfo.getScopeDependencies(scope).forEach { dependency ->
121-
graphBuilder.addDependency(qualifiedScopeName, dependency)
122-
}
118+
graphBuilder.addDependencies(project.id, scopeName, projectModuleInfo.getScopeDependencies(scope))
123119

124120
scopeName
125121
}

plugins/package-managers/node/src/main/kotlin/pnpm/Pnpm.kt

+1-5
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import org.apache.logging.log4j.kotlin.logger
2626
import org.ossreviewtoolkit.analyzer.AbstractPackageManagerFactory
2727
import org.ossreviewtoolkit.analyzer.PackageManager
2828
import org.ossreviewtoolkit.analyzer.PackageManagerResult
29-
import org.ossreviewtoolkit.model.DependencyGraph
3029
import org.ossreviewtoolkit.model.ProjectAnalyzerResult
3130
import org.ossreviewtoolkit.model.config.AnalyzerConfiguration
3231
import org.ossreviewtoolkit.model.config.RepositoryConfiguration
@@ -85,12 +84,9 @@ class Pnpm(
8584

8685
val scopeNames = Scope.entries.mapTo(mutableSetOf()) { scope ->
8786
val scopeName = scope.descriptor
88-
val qualifiedScopeName = DependencyGraph.qualifyScope(project, scopeName)
8987
val moduleInfo = moduleInfosForScope.getValue(scope).single { it.path == projectDir.absolutePath }
9088

91-
moduleInfo.getScopeDependencies(scope).forEach { dependency ->
92-
graphBuilder.addDependency(qualifiedScopeName, dependency)
93-
}
89+
graphBuilder.addDependencies(project.id, scopeName, moduleInfo.getScopeDependencies(scope))
9490

9591
scopeName
9692
}

plugins/package-managers/node/src/main/kotlin/yarn/Yarn.kt

+1-3
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ import org.apache.logging.log4j.kotlin.loggerOf
3939
import org.ossreviewtoolkit.analyzer.AbstractPackageManagerFactory
4040
import org.ossreviewtoolkit.analyzer.PackageManager
4141
import org.ossreviewtoolkit.analyzer.PackageManagerResult
42-
import org.ossreviewtoolkit.model.DependencyGraph
4342
import org.ossreviewtoolkit.model.Identifier
4443
import org.ossreviewtoolkit.model.Issue
4544
import org.ossreviewtoolkit.model.Project
@@ -292,10 +291,9 @@ open class Yarn(
292291
): String? {
293292
if (excludes.isScopeExcluded(targetScope)) return null
294293

295-
val qualifiedScopeName = DependencyGraph.qualifyScope(project, targetScope)
296294
val moduleInfo = checkNotNull(getModuleInfo(workingDir, scopes, projectDirs, listOfNotNull(workspaceDir)))
297295

298-
moduleInfo.dependencies.forEach { graphBuilder.addDependency(qualifiedScopeName, it) }
296+
graphBuilder.addDependencies(project.id, targetScope, moduleInfo.dependencies)
299297

300298
return targetScope.takeUnless { moduleInfo.dependencies.isEmpty() }
301299
}

plugins/package-managers/node/src/main/kotlin/yarn2/Yarn2.kt

+1-5
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ import org.ossreviewtoolkit.analyzer.PackageManagerResult
3737
import org.ossreviewtoolkit.analyzer.parseAuthorString
3838
import org.ossreviewtoolkit.downloader.VcsHost
3939
import org.ossreviewtoolkit.downloader.VersionControlSystem
40-
import org.ossreviewtoolkit.model.DependencyGraph
4140
import org.ossreviewtoolkit.model.Hash
4241
import org.ossreviewtoolkit.model.Identifier
4342
import org.ossreviewtoolkit.model.Issue
@@ -322,7 +321,6 @@ class Yarn2(
322321
allDependencies.filterNot { excludes.isScopeExcluded(it.key.type) }
323322
.forEach { (dependencyType, allScopedDependencies) ->
324323
allProjects.values.forEach { project ->
325-
val qualifiedScopeName = DependencyGraph.qualifyScope(project.id, dependencyType.type)
326324
val dependencies = allScopedDependencies[project.id]
327325
val dependenciesInfo = dependencies?.mapNotNull { dependency ->
328326
if ("Yarn2" in dependency.type) {
@@ -364,9 +362,7 @@ class Yarn2(
364362
}
365363
}?.toSet().orEmpty()
366364

367-
dependenciesInfo.forEach {
368-
graphBuilder.addDependency(qualifiedScopeName, it)
369-
}
365+
graphBuilder.addDependencies(project.id, dependencyType.type, dependenciesInfo)
370366
}
371367
}
372368

0 commit comments

Comments
 (0)