Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: add cache for OrtDependency model objects to OrtModelBuilder #9818

Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import org.gradle.api.artifacts.component.ProjectComponentIdentifier
import org.gradle.api.artifacts.component.ProjectComponentSelector
import org.gradle.api.artifacts.result.DependencyResult
import org.gradle.api.artifacts.result.ResolvedArtifactResult
import org.gradle.api.artifacts.result.ResolvedComponentResult
import org.gradle.api.artifacts.result.ResolvedDependencyResult
import org.gradle.api.artifacts.result.UnresolvedDependencyResult
import org.gradle.api.internal.GradleInternal
Expand All @@ -56,6 +57,9 @@ internal class OrtModelBuilder : ToolingModelBuilder {
private val warnings = mutableListOf<String>()
private val globalDependencySubtrees = mutableMapOf<String, List<OrtDependency>>()

// Only create one "OrtDependency" for each "ResolvedComponentResult".
private val ortDependencyCache = mutableMapOf<ResolvedComponentResult, OrtDependency>()

override fun canBuild(modelName: String): Boolean = modelName == OrtDependencyTreeModel::class.java.name

override fun buildAll(modelName: String, project: Project): OrtDependencyTreeModel {
Expand Down Expand Up @@ -165,6 +169,10 @@ internal class OrtModelBuilder : ToolingModelBuilder {
// Cut the graph on cyclic dependencies.
if (id in visited) return@mapNotNull null

if (selectedComponent in ortDependencyCache) {
return@mapNotNull ortDependencyCache[selectedComponent]
}

when (id) {
is ModuleComponentIdentifier -> {
val pomFile = if (selectedComponent is ResolvedComponentResultInternal) {
Expand Down Expand Up @@ -231,7 +239,9 @@ internal class OrtModelBuilder : ToolingModelBuilder {
)
},
localPath = null
)
).also {
ortDependencyCache[selectedComponent] = it
}
}

is ProjectComponentIdentifier -> {
Expand All @@ -250,7 +260,9 @@ internal class OrtModelBuilder : ToolingModelBuilder {
pomFile = null,
mavenModel = null,
localPath = id.projectPath
)
).also {
ortDependencyCache[selectedComponent] = it
}
}

else -> {
Expand Down
Loading