Skip to content

Commit 2eb8d83

Browse files
committed
refactor(gradle-model): Introduce an OrtComponentIdentifier
Prepare for an upcoming change, which re-designs the representation of the tree structure. Use the same set of attributes as Gradle's `ModuleComponentIdentifier`. Signed-off-by: Frank Viernau <frank.viernau@gmail.com>
1 parent 93b267e commit 2eb8d83

6 files changed

Lines changed: 64 additions & 29 deletions

File tree

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,9 @@ internal class GradleDependencyHandler(
6060
private val projectType: String
6161
) : DependencyHandler<OrtComponent> {
6262
override fun identifierFor(dependency: OrtComponent): Identifier =
63-
with(dependency) { Identifier(getIdentifierType(projectType), groupId, artifactId, version) }
63+
with(dependency.componentId) {
64+
Identifier(dependency.getIdentifierType(projectType), groupId, artifactId, version)
65+
}
6466

6567
override fun dependenciesFor(dependency: OrtComponent): List<OrtComponent> = dependency.dependencies
6668

@@ -208,8 +210,10 @@ private fun OrtComponent.handleValidScmInfo(type: String, url: String, tag: Stri
208210

209211
// Try to detect the Maven SCM provider from the URL only, e.g. by looking at the host or special URL paths.
210212
VcsHost.parseUrl(fixedUrl).copy(revision = tag).also {
211-
logger.info {
212-
"Fixed up invalid SCM connection without a provider in '$groupId:$artifactId:$version' to $it."
213+
with(componentId) {
214+
logger.info {
215+
"Fixed up invalid SCM connection without a provider in '$groupId:$artifactId:$version' to $it."
216+
}
213217
}
214218
}
215219
}
@@ -244,7 +248,7 @@ private fun OrtComponent.handleInvalidScmInfo(connection: String, tag: String):
244248
VcsInfo.EMPTY
245249
}
246250
} ?: run {
247-
val dep = "$groupId:$artifactId:$version"
251+
val dep = with(componentId) { "$groupId:$artifactId:$version" }
248252

249253
if (connection.startsWith("git://") || connection.endsWith(".git")) {
250254
// It is a common mistake to omit the "scm:[provider]:" prefix. Add fall-backs for nevertheless clear

plugins/package-managers/gradle-model/src/main/kotlin/GradleModel.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,14 @@ interface OrtConfiguration {
3737
val dependencies: List<OrtComponent>
3838
}
3939

40-
interface OrtComponent {
40+
interface OrtComponentIdentifier {
4141
val groupId: String
4242
val artifactId: String
4343
val version: String
44+
}
45+
46+
interface OrtComponent {
47+
val componentId: OrtComponentIdentifier
4448
val classifier: String
4549
val extension: String
4650
val variants: Map<String, Map<String, String>>

plugins/package-managers/gradle-plugin/src/main/kotlin/OrtModelBuilder.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -178,9 +178,7 @@ internal class OrtModelBuilder : ToolingModelBuilder {
178178
}
179179

180180
return OrtComponentImpl(
181-
groupId = id.group,
182-
artifactId = id.module,
183-
version = id.version,
181+
componentId = OrtComponentIdentifierImpl(id.group, id.module, id.version),
184182
classifier = "",
185183
extension = modelBuildingResult?.effectiveModel?.packaging.orEmpty(),
186184
variants = selected.variants.associate {
@@ -212,9 +210,11 @@ internal class OrtModelBuilder : ToolingModelBuilder {
212210
val dependencies = selected.dependencies.toOrtComponents(poms, visited + id)
213211

214212
return OrtComponentImpl(
215-
groupId = moduleId.group,
216-
artifactId = moduleId.name,
217-
version = moduleId.version.takeUnless { it == "unspecified" }.orEmpty(),
213+
componentId = OrtComponentIdentifierImpl(
214+
groupId = moduleId.group,
215+
artifactId = moduleId.name,
216+
version = moduleId.version.takeUnless { it == "unspecified" }.orEmpty()
217+
),
218218
classifier = "",
219219
extension = "",
220220
variants = selected.variants.associate {

plugins/package-managers/gradle-plugin/src/main/kotlin/OrtModelImpl.kt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
package org.ossreviewtoolkit.plugins.packagemanagers.gradleplugin
2121

2222
import OrtComponent
23+
import OrtComponentIdentifier
2324
import OrtConfiguration
2425
import OrtDependencyTreeModel
2526
import OrtMavenModel
@@ -46,10 +47,15 @@ internal class OrtConfigurationImpl(
4647
) : OrtConfiguration, Serializable
4748

4849
@Suppress("LongParameterList", "SerialVersionUIDInSerializableClass")
49-
internal class OrtComponentImpl(
50+
internal class OrtComponentIdentifierImpl(
5051
override val groupId: String,
5152
override val artifactId: String,
52-
override val version: String,
53+
override val version: String
54+
) : OrtComponentIdentifier, Serializable
55+
56+
@Suppress("LongParameterList", "SerialVersionUIDInSerializableClass")
57+
internal class OrtComponentImpl(
58+
override val componentId: OrtComponentIdentifier,
5359
override val classifier: String,
5460
override val extension: String,
5561
override val variants: Map<String, Map<String, String>>,

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,9 @@ internal class GradleDependencyHandler(
5959
var repositories = emptyList<RemoteRepository>()
6060

6161
override fun identifierFor(dependency: OrtComponent): Identifier =
62-
with(dependency) { Identifier(getIdentifierType(projectType), groupId, artifactId, version) }
62+
with(dependency.componentId) {
63+
Identifier(dependency.getIdentifierType(projectType), groupId, artifactId, version)
64+
}
6365

6466
override fun dependenciesFor(dependency: OrtComponent): List<OrtComponent> = dependency.dependencies
6567

@@ -90,8 +92,8 @@ internal class GradleDependencyHandler(
9092
if (dependency.error != null || dependency.isProjectDependency) return null
9193

9294
val artifact = DefaultArtifact(
93-
dependency.groupId, dependency.artifactId, dependency.classifier,
94-
dependency.extension, dependency.version
95+
dependency.componentId.groupId, dependency.componentId.artifactId, dependency.classifier,
96+
dependency.extension, dependency.componentId.version
9597
)
9698

9799
return runCatching {

plugins/package-managers/gradle/src/main/resources/init.gradle

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,14 @@ interface OrtConfiguration {
6969
List<OrtComponent> getDependencies()
7070
}
7171

72-
interface OrtComponent {
72+
interface OrtComponentIdentifier {
7373
String getGroupId()
7474
String getArtifactId()
7575
String getVersion()
76+
}
77+
78+
interface OrtComponent {
79+
OrtComponentIdentifier getComponentId()
7680
String getClassifier()
7781
String getExtension()
7882
Map<String, Map<String, String>> getVariants()
@@ -112,10 +116,16 @@ class OrtConfigurationImpl implements OrtConfiguration, Serializable {
112116

113117
@ToString(includeNames = true)
114118
@TupleConstructor
115-
class OrtComponentImpl implements OrtComponent, Serializable {
119+
class OrtComponentIdentifierImpl implements OrtComponentIdentifier, Serializable {
116120
String groupId = ''
117121
String artifactId = ''
118122
String version = ''
123+
}
124+
125+
@ToString(includeNames = true)
126+
@TupleConstructor
127+
class OrtComponentImpl implements OrtComponent, Serializable {
128+
OrtComponentIdentifier componentId
119129
String classifier = ''
120130
String extension = ''
121131
Map<String, Map<String, String>> variants = [:]
@@ -396,25 +406,31 @@ class AbstractOrtDependencyTreePlugin<T> implements Plugin<T> {
396406

397407
def classifier = artifact?.classifier ?: ''
398408
def extension = artifact?.extension ?: ''
409+
def componentId = new OrtComponentIdentifierImpl(groupId: id.group, artifactId: id.module, version: id.version)
399410

400-
return new OrtComponentImpl(id.group, id.module, id.version, classifier, extension, [:], dependencies,
401-
error, warning, pomFile, null)
411+
return new OrtComponentImpl(componentId, classifier, extension, [:], dependencies, error, warning,
412+
pomFile, null)
402413
} else if (id instanceof ProjectComponentIdentifier) {
403414
if (isCurrentBuild(id.build, project) || !project.gradle.gradleVersion.isAtLeastVersion(7, 2)) {
404415
def dependencyProject = project.rootProject.findProject(id.projectPath)
405-
return new OrtComponentImpl(groupId: dependencyProject.group.toString(),
406-
artifactId: dependencyProject.name, version: dependencyProject.version.toString(),
407-
dependencies: dependencies, localPath: dependencyProject.projectDir.absolutePath)
416+
417+
def componentId = new OrtComponentIdentifierImpl(groupId: dependencyProject.group.toString(),
418+
artifactId: dependencyProject.name, version: dependencyProject.version.toString())
419+
420+
return new OrtComponentImpl(componentId: componentId, dependencies: dependencies,
421+
localPath: dependencyProject.projectDir.absolutePath)
408422
} else {
409423
project.logger.quiet("Project '$id' is not part of current build. Assuming included build.")
410424

411425
def includedProject = findRootProjectOfIncludedBuild(project, id)
412426
def dependencyProject = id.projectPath == ":" ? includedProject
413427
: includedProject.findProject(id.projectName)
428+
def componentId = new OrtComponentIdentifierImpl(groupId: dependencyProject.group.toString(),
429+
artifactId: dependencyProject.name, version: dependencyProject.version.toString())
430+
414431

415-
return new OrtComponentImpl(groupId: dependencyProject.group.toString(),
416-
artifactId: dependencyProject.name, version: dependencyProject.version.toString(),
417-
dependencies: dependencies, localPath: dependencyProject.projectDir.absolutePath)
432+
return new OrtComponentImpl(componentId: componentId, dependencies: dependencies,
433+
localPath: dependencyProject.projectDir.absolutePath)
418434
}
419435
} else {
420436
return dependencyFromDisplayName(id.displayName, dependencies,
@@ -584,7 +600,8 @@ class AbstractOrtDependencyTreePlugin<T> implements Plugin<T> {
584600
* @return the identifier for this OrtComponent
585601
*/
586602
private static String identifierFor(OrtComponent dependency) {
587-
return toIdentifier(dependency.groupId, dependency.artifactId, dependency.version)
603+
def componentId = dependency.componentId
604+
return toIdentifier(componentId.groupId, componentId.artifactId, componentId.version)
588605
}
589606

590607
/**
@@ -601,8 +618,10 @@ class AbstractOrtDependencyTreePlugin<T> implements Plugin<T> {
601618
private static OrtComponentImpl dependencyFromDisplayName(String displayName, List<OrtComponent> dependencies,
602619
String error, String warning) {
603620
def coordinates = displayNameToCoordinates(displayName)
604-
return new OrtComponentImpl(groupId: coordinates[0], artifactId: coordinates[1], version: coordinates[2],
605-
dependencies: dependencies, error: error?.toString(), warning: warning?.toString())
621+
def componentId = new OrtComponentIdentifierImpl(groupId: coordinates[0], artifactId: coordinates[1],
622+
version: coordinates[2])
623+
return new OrtComponentImpl(componentId: componentId, dependencies: dependencies, error: error?.toString(),
624+
warning: warning?.toString())
606625
}
607626

608627
/**

0 commit comments

Comments
 (0)