Skip to content

Commit f9b807e

Browse files
mnonnenmachersschuberth
authored andcommitted
fix(spdx): Use the plugin display name as issue source
Also simplify code by using the constant for the display name instead of passing the value around via function arguments. Signed-off-by: Martin Nonnenmacher <[email protected]>
1 parent 4a890f6 commit f9b807e

File tree

3 files changed

+57
-74
lines changed

3 files changed

+57
-74
lines changed

plugins/package-managers/spdx/src/main/kotlin/SpdxDocumentFile.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -515,7 +515,7 @@ class SpdxDocumentFile(override val descriptor: PluginDescriptor = SpdxDocumentF
515515
analyzerConfig: AnalyzerConfiguration,
516516
labels: Map<String, String>
517517
): List<ProjectAnalyzerResult> {
518-
val transitiveDocument = SpdxResolvedDocument.load(spdxDocumentCache, definitionFile, descriptor.id)
518+
val transitiveDocument = SpdxResolvedDocument.load(spdxDocumentCache, definitionFile)
519519

520520
val spdxDocument = transitiveDocument.rootDocument.document
521521

plugins/package-managers/spdx/src/main/kotlin/utils/SpdxResolvedDocument.kt

Lines changed: 27 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import org.ossreviewtoolkit.model.Issue
3131
import org.ossreviewtoolkit.model.Severity
3232
import org.ossreviewtoolkit.model.createAndLogIssue
3333
import org.ossreviewtoolkit.plugins.packagemanagers.spdx.SpdxDocumentFile
34+
import org.ossreviewtoolkit.plugins.packagemanagers.spdx.SpdxDocumentFileFactory
3435
import org.ossreviewtoolkit.utils.common.collectMessages
3536
import org.ossreviewtoolkit.utils.common.safeDeleteRecursively
3637
import org.ossreviewtoolkit.utils.ort.OkHttpClientHelper
@@ -55,11 +56,6 @@ internal data class SpdxResolvedDocument(
5556
*/
5657
val rootDocument: ResolvedSpdxDocument,
5758

58-
/**
59-
* The name of the source to use when creating [Issue]s.
60-
*/
61-
val issueSource: String,
62-
6359
/**
6460
* Holds a map with all [ResolvedSpdxDocument]s that are referenced directly or indirectly from the root document,
6561
* using the external reference objects as keys.
@@ -86,14 +82,13 @@ internal data class SpdxResolvedDocument(
8682
private val issuesByReferenceId: Map<String, Issue>
8783
) {
8884
companion object {
89-
fun load(cache: SpdxDocumentCache, rootDocumentFile: File, issueSource: String): SpdxResolvedDocument {
85+
fun load(cache: SpdxDocumentCache, rootDocumentFile: File): SpdxResolvedDocument {
9086
val rootDocument = cache.load(rootDocumentFile).getOrThrow()
9187

9288
val references = mutableMapOf<SpdxExternalDocumentReference, ResolvedSpdxDocument>()
9389
val issues = mutableMapOf<String, Issue>()
9490
resolveAllReferences(
9591
cache,
96-
issueSource,
9792
rootDocument,
9893
rootDocumentFile.toURI(),
9994
references,
@@ -108,7 +103,7 @@ internal data class SpdxResolvedDocument(
108103
val packages = collectPackages(references) + rootDocument.getPackages()
109104
val relations = collectAndQualifyRelations(references) + rootDocument.relationships
110105

111-
return SpdxResolvedDocument(resolvedRootDocument, issueSource, references, relations, packages, issues)
106+
return SpdxResolvedDocument(resolvedRootDocument, references, relations, packages, issues)
112107
}
113108
}
114109

@@ -124,7 +119,7 @@ internal data class SpdxResolvedDocument(
124119
issue?.also { issues += it }
125120
} else {
126121
issues += issue ?: createAndLogIssue(
127-
source = issueSource,
122+
source = SpdxDocumentFileFactory.descriptor.displayName,
128123
message = "'$identifier' could neither be resolved to a 'package' nor to an 'externalDocumentRef'."
129124
)
130125
}
@@ -177,25 +172,23 @@ internal data class ResolvedSpdxDocument(
177172
/**
178173
* Resolve all external references to SPDX documents contained in [document], and recursively in all referenced
179174
* documents. Use [cache] to load documents. Resolve relative URLs against [baseUri]. Store all encountered references
180-
* and the documents they point to in [references]. Store issues encountered when resolving references in [issues] with
181-
* [issueSource] as source of the issues. Use [knownUris] to detect cycles.
175+
* and the documents they point to in [references]. Store issues encountered when resolving references in [issues]. Use
176+
* [knownUris] to detect cycles.
182177
*/
183178
private fun resolveAllReferences(
184179
cache: SpdxDocumentCache,
185-
issueSource: String,
186180
document: SpdxDocument,
187181
baseUri: URI,
188182
references: MutableMap<SpdxExternalDocumentReference, ResolvedSpdxDocument>,
189183
issues: MutableMap<String, Issue>,
190184
knownUris: MutableSet<URI>
191185
) {
192-
document.resolveReferences(cache, baseUri, issueSource).forEach { (ref, resolvedDoc) ->
186+
document.resolveReferences(cache, baseUri).forEach { (ref, resolvedDoc) ->
193187
resolvedDoc.document?.let { document ->
194188
references += ref to ResolvedSpdxDocument(document, resolvedDoc.uri)
195189
if (knownUris.add(resolvedDoc.uri)) {
196190
resolveAllReferences(
197191
cache,
198-
issueSource,
199192
document,
200193
resolvedDoc.uri,
201194
references,
@@ -270,11 +263,7 @@ private fun URI.toDefinitionFile(): File? =
270263
* Return the [SpdxDocument] this [SpdxExternalDocumentReference]'s [SpdxDocument] refers to. Use [cache] to parse
271264
* the document, and [baseUri] to resolve relative references.
272265
*/
273-
internal fun SpdxExternalDocumentReference.resolve(
274-
cache: SpdxDocumentCache,
275-
baseUri: URI,
276-
issueSource: String
277-
): ResolutionResult {
266+
internal fun SpdxExternalDocumentReference.resolve(cache: SpdxDocumentCache, baseUri: URI): ResolutionResult {
278267
val uri = runCatching {
279268
val resolvedUri = baseUri.resolve(spdxDocument)
280269
resolvedUri.takeUnless { baseUri.query != null } ?: URI("$resolvedUri?${baseUri.query}")
@@ -283,36 +272,34 @@ internal fun SpdxExternalDocumentReference.resolve(
283272
document = null,
284273
uri = baseUri,
285274
issue = createAndLogIssue(
286-
source = issueSource,
275+
source = SpdxDocumentFileFactory.descriptor.displayName,
287276
message = "The SPDX document at '$spdxDocument' cannot be resolved as a URI (referred from $baseUri " +
288277
"as part of '$externalDocumentId')."
289278
)
290279
)
291280
}
292281

293282
return if (uri.isLocalDefinitionFile()) {
294-
resolveFromFile(uri, cache, baseUri, issueSource)
283+
resolveFromFile(uri, cache, baseUri)
295284
} else {
296-
resolveFromDownload(uri, cache, baseUri, issueSource)
285+
resolveFromDownload(uri, cache, baseUri)
297286
}
298287
}
299288

300289
/**
301290
* Resolve this [SpdxExternalDocumentReference] from [uri] if it points to a file on the local file system. Use
302-
* [cache] to load the file. In case of a failure, create an [Issue] whose message includes [baseUri] and that uses
303-
* [issueSource].
291+
* [cache] to load the file. In case of a failure, create an [Issue] whose message includes [baseUri].
304292
*/
305293
private fun SpdxExternalDocumentReference.resolveFromFile(
306294
uri: URI,
307295
cache: SpdxDocumentCache,
308-
baseUri: URI,
309-
issueSource: String
296+
baseUri: URI
310297
): ResolutionResult {
311298
val file = uri.toDefinitionFile() ?: return ResolutionResult(
312299
document = null,
313300
uri = baseUri,
314301
issue = createAndLogIssue(
315-
source = issueSource,
302+
source = SpdxDocumentFileFactory.descriptor.displayName,
316303
message = "The file pointed to by '$uri' in reference '$externalDocumentId' does not exist."
317304
)
318305
)
@@ -322,26 +309,25 @@ private fun SpdxExternalDocumentReference.resolveFromFile(
322309
document = null,
323310
uri = uri,
324311
issue = createAndLogIssue(
325-
source = issueSource,
312+
source = SpdxDocumentFileFactory.descriptor.displayName,
326313
message = "Failed to parse the SPDX document pointed to by '$uri' in reference " +
327314
"'$externalDocumentId': ${it.message}"
328315
)
329316
)
330317
}
331318

332-
return ResolutionResult(document, uri, verifyChecksum(file, baseUri, issueSource))
319+
return ResolutionResult(document, uri, verifyChecksum(file, baseUri))
333320
}
334321

335322
/**
336323
* Resolve this [SpdxExternalDocumentReference] from [uri] if it requires a download from a server. Use [cache] to
337324
* parse the document after it has been downloaded. In case of a failure, create an [Issue] whose message includes
338-
* [baseUri] and that uses [issueSource].
325+
* [baseUri].
339326
*/
340327
private fun SpdxExternalDocumentReference.resolveFromDownload(
341328
uri: URI,
342329
cache: SpdxDocumentCache,
343-
baseUri: URI,
344-
issueSource: String
330+
baseUri: URI
345331
): ResolutionResult {
346332
logger.info {
347333
"Downloading SPDX document from $uri (referred from $baseUri as part of '$externalDocumentId')."
@@ -363,7 +349,7 @@ private fun SpdxExternalDocumentReference.resolveFromDownload(
363349
document = null,
364350
uri = uri,
365351
issue = createAndLogIssue(
366-
source = issueSource,
352+
source = SpdxDocumentFileFactory.descriptor.displayName,
367353
message = "Failed to download SPDX document from $uri (referred from $baseUri as part of " +
368354
"'$externalDocumentId'): ${it.collectMessages()}"
369355
)
@@ -375,29 +361,29 @@ private fun SpdxExternalDocumentReference.resolveFromDownload(
375361
document = null,
376362
uri = uri,
377363
issue = createAndLogIssue(
378-
source = issueSource,
364+
source = SpdxDocumentFileFactory.descriptor.displayName,
379365
message = "Failed to parse SPDX document from $uri (referred from $baseUri as part of " +
380366
"'$externalDocumentId'): ${it.message}"
381367
)
382368
)
383369
}
384370

385-
ResolutionResult(document, uri, verifyChecksum(file, baseUri, issueSource))
371+
ResolutionResult(document, uri, verifyChecksum(file, baseUri))
386372
} finally {
387373
tempDir.safeDeleteRecursively()
388374
}
389375
}
390376

391377
/**
392378
* Verify that the resolved or downloaded [file] this [SpdxExternalDocumentReference] refers to matches the expected
393-
* checksum. If not, return an [Issue] based on the document [uri] and [issueSource].
379+
* checksum. If not, return an [Issue] based on the document [uri].
394380
*/
395-
private fun SpdxExternalDocumentReference.verifyChecksum(file: File, uri: URI, issueSource: String): Issue? {
381+
private fun SpdxExternalDocumentReference.verifyChecksum(file: File, uri: URI): Issue? {
396382
val hash = Hash(checksum.checksumValue, checksum.algorithm.name)
397383
if (hash.verify(file)) return null
398384

399385
return SpdxResolvedDocument.createAndLogIssue(
400-
source = issueSource,
386+
source = SpdxDocumentFileFactory.descriptor.displayName,
401387
severity = Severity.WARNING,
402388
message = "The SPDX document at '$spdxDocument' does not match the expected $hash (referred from $uri as " +
403389
"part of '$externalDocumentId')."
@@ -406,14 +392,13 @@ private fun SpdxExternalDocumentReference.verifyChecksum(file: File, uri: URI, i
406392

407393
/**
408394
* Load all documents referenced by external references in this [SpdxDocument] using [cache]. Resolve relative paths
409-
* based on [documentUri]. If issues occur, use [issueSource] as the source.
395+
* based on [documentUri].
410396
*/
411397
private fun SpdxDocument.resolveReferences(
412398
cache: SpdxDocumentCache,
413-
documentUri: URI,
414-
issueSource: String
399+
documentUri: URI
415400
): Map<SpdxExternalDocumentReference, ResolutionResult> =
416-
externalDocumentRefs.associateWith { it.resolve(cache, documentUri, issueSource) }
401+
externalDocumentRefs.associateWith { it.resolve(cache, documentUri) }
417402

418403
/**
419404
* Return a map with all the SPDX packages contained in this document. Keys are the identifiers of the packages,

0 commit comments

Comments
 (0)