@@ -31,6 +31,7 @@ import org.ossreviewtoolkit.model.Issue
31
31
import org.ossreviewtoolkit.model.Severity
32
32
import org.ossreviewtoolkit.model.createAndLogIssue
33
33
import org.ossreviewtoolkit.plugins.packagemanagers.spdx.SpdxDocumentFile
34
+ import org.ossreviewtoolkit.plugins.packagemanagers.spdx.SpdxDocumentFileFactory
34
35
import org.ossreviewtoolkit.utils.common.collectMessages
35
36
import org.ossreviewtoolkit.utils.common.safeDeleteRecursively
36
37
import org.ossreviewtoolkit.utils.ort.OkHttpClientHelper
@@ -55,11 +56,6 @@ internal data class SpdxResolvedDocument(
55
56
*/
56
57
val rootDocument : ResolvedSpdxDocument ,
57
58
58
- /* *
59
- * The name of the source to use when creating [Issue]s.
60
- */
61
- val issueSource : String ,
62
-
63
59
/* *
64
60
* Holds a map with all [ResolvedSpdxDocument]s that are referenced directly or indirectly from the root document,
65
61
* using the external reference objects as keys.
@@ -86,14 +82,13 @@ internal data class SpdxResolvedDocument(
86
82
private val issuesByReferenceId : Map <String , Issue >
87
83
) {
88
84
companion object {
89
- fun load (cache : SpdxDocumentCache , rootDocumentFile : File , issueSource : String ): SpdxResolvedDocument {
85
+ fun load (cache : SpdxDocumentCache , rootDocumentFile : File ): SpdxResolvedDocument {
90
86
val rootDocument = cache.load(rootDocumentFile).getOrThrow()
91
87
92
88
val references = mutableMapOf<SpdxExternalDocumentReference , ResolvedSpdxDocument >()
93
89
val issues = mutableMapOf<String , Issue >()
94
90
resolveAllReferences(
95
91
cache,
96
- issueSource,
97
92
rootDocument,
98
93
rootDocumentFile.toURI(),
99
94
references,
@@ -108,7 +103,7 @@ internal data class SpdxResolvedDocument(
108
103
val packages = collectPackages(references) + rootDocument.getPackages()
109
104
val relations = collectAndQualifyRelations(references) + rootDocument.relationships
110
105
111
- return SpdxResolvedDocument (resolvedRootDocument, issueSource, references, relations, packages, issues)
106
+ return SpdxResolvedDocument (resolvedRootDocument, references, relations, packages, issues)
112
107
}
113
108
}
114
109
@@ -124,7 +119,7 @@ internal data class SpdxResolvedDocument(
124
119
issue?.also { issues + = it }
125
120
} else {
126
121
issues + = issue ? : createAndLogIssue(
127
- source = issueSource ,
122
+ source = SpdxDocumentFileFactory .descriptor.displayName ,
128
123
message = " '$identifier ' could neither be resolved to a 'package' nor to an 'externalDocumentRef'."
129
124
)
130
125
}
@@ -177,25 +172,23 @@ internal data class ResolvedSpdxDocument(
177
172
/* *
178
173
* Resolve all external references to SPDX documents contained in [document], and recursively in all referenced
179
174
* 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.
182
177
*/
183
178
private fun resolveAllReferences (
184
179
cache : SpdxDocumentCache ,
185
- issueSource : String ,
186
180
document : SpdxDocument ,
187
181
baseUri : URI ,
188
182
references : MutableMap <SpdxExternalDocumentReference , ResolvedSpdxDocument >,
189
183
issues : MutableMap <String , Issue >,
190
184
knownUris : MutableSet <URI >
191
185
) {
192
- document.resolveReferences(cache, baseUri, issueSource ).forEach { (ref, resolvedDoc) ->
186
+ document.resolveReferences(cache, baseUri).forEach { (ref, resolvedDoc) ->
193
187
resolvedDoc.document?.let { document ->
194
188
references + = ref to ResolvedSpdxDocument (document, resolvedDoc.uri)
195
189
if (knownUris.add(resolvedDoc.uri)) {
196
190
resolveAllReferences(
197
191
cache,
198
- issueSource,
199
192
document,
200
193
resolvedDoc.uri,
201
194
references,
@@ -270,11 +263,7 @@ private fun URI.toDefinitionFile(): File? =
270
263
* Return the [SpdxDocument] this [SpdxExternalDocumentReference]'s [SpdxDocument] refers to. Use [cache] to parse
271
264
* the document, and [baseUri] to resolve relative references.
272
265
*/
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 {
278
267
val uri = runCatching {
279
268
val resolvedUri = baseUri.resolve(spdxDocument)
280
269
resolvedUri.takeUnless { baseUri.query != null } ? : URI (" $resolvedUri ?${baseUri.query} " )
@@ -283,36 +272,34 @@ internal fun SpdxExternalDocumentReference.resolve(
283
272
document = null ,
284
273
uri = baseUri,
285
274
issue = createAndLogIssue(
286
- source = issueSource ,
275
+ source = SpdxDocumentFileFactory .descriptor.displayName ,
287
276
message = " The SPDX document at '$spdxDocument ' cannot be resolved as a URI (referred from $baseUri " +
288
277
" as part of '$externalDocumentId ')."
289
278
)
290
279
)
291
280
}
292
281
293
282
return if (uri.isLocalDefinitionFile()) {
294
- resolveFromFile(uri, cache, baseUri, issueSource )
283
+ resolveFromFile(uri, cache, baseUri)
295
284
} else {
296
- resolveFromDownload(uri, cache, baseUri, issueSource )
285
+ resolveFromDownload(uri, cache, baseUri)
297
286
}
298
287
}
299
288
300
289
/* *
301
290
* 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].
304
292
*/
305
293
private fun SpdxExternalDocumentReference.resolveFromFile (
306
294
uri : URI ,
307
295
cache : SpdxDocumentCache ,
308
- baseUri : URI ,
309
- issueSource : String
296
+ baseUri : URI
310
297
): ResolutionResult {
311
298
val file = uri.toDefinitionFile() ? : return ResolutionResult (
312
299
document = null ,
313
300
uri = baseUri,
314
301
issue = createAndLogIssue(
315
- source = issueSource ,
302
+ source = SpdxDocumentFileFactory .descriptor.displayName ,
316
303
message = " The file pointed to by '$uri ' in reference '$externalDocumentId ' does not exist."
317
304
)
318
305
)
@@ -322,26 +309,25 @@ private fun SpdxExternalDocumentReference.resolveFromFile(
322
309
document = null ,
323
310
uri = uri,
324
311
issue = createAndLogIssue(
325
- source = issueSource ,
312
+ source = SpdxDocumentFileFactory .descriptor.displayName ,
326
313
message = " Failed to parse the SPDX document pointed to by '$uri ' in reference " +
327
314
" '$externalDocumentId ': ${it.message} "
328
315
)
329
316
)
330
317
}
331
318
332
- return ResolutionResult (document, uri, verifyChecksum(file, baseUri, issueSource ))
319
+ return ResolutionResult (document, uri, verifyChecksum(file, baseUri))
333
320
}
334
321
335
322
/* *
336
323
* Resolve this [SpdxExternalDocumentReference] from [uri] if it requires a download from a server. Use [cache] to
337
324
* 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].
339
326
*/
340
327
private fun SpdxExternalDocumentReference.resolveFromDownload (
341
328
uri : URI ,
342
329
cache : SpdxDocumentCache ,
343
- baseUri : URI ,
344
- issueSource : String
330
+ baseUri : URI
345
331
): ResolutionResult {
346
332
logger.info {
347
333
" Downloading SPDX document from $uri (referred from $baseUri as part of '$externalDocumentId ')."
@@ -363,7 +349,7 @@ private fun SpdxExternalDocumentReference.resolveFromDownload(
363
349
document = null ,
364
350
uri = uri,
365
351
issue = createAndLogIssue(
366
- source = issueSource ,
352
+ source = SpdxDocumentFileFactory .descriptor.displayName ,
367
353
message = " Failed to download SPDX document from $uri (referred from $baseUri as part of " +
368
354
" '$externalDocumentId '): ${it.collectMessages()} "
369
355
)
@@ -375,29 +361,29 @@ private fun SpdxExternalDocumentReference.resolveFromDownload(
375
361
document = null ,
376
362
uri = uri,
377
363
issue = createAndLogIssue(
378
- source = issueSource ,
364
+ source = SpdxDocumentFileFactory .descriptor.displayName ,
379
365
message = " Failed to parse SPDX document from $uri (referred from $baseUri as part of " +
380
366
" '$externalDocumentId '): ${it.message} "
381
367
)
382
368
)
383
369
}
384
370
385
- ResolutionResult (document, uri, verifyChecksum(file, baseUri, issueSource ))
371
+ ResolutionResult (document, uri, verifyChecksum(file, baseUri))
386
372
} finally {
387
373
tempDir.safeDeleteRecursively()
388
374
}
389
375
}
390
376
391
377
/* *
392
378
* 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].
394
380
*/
395
- private fun SpdxExternalDocumentReference.verifyChecksum (file : File , uri : URI , issueSource : String ): Issue ? {
381
+ private fun SpdxExternalDocumentReference.verifyChecksum (file : File , uri : URI ): Issue ? {
396
382
val hash = Hash (checksum.checksumValue, checksum.algorithm.name)
397
383
if (hash.verify(file)) return null
398
384
399
385
return SpdxResolvedDocument .createAndLogIssue(
400
- source = issueSource ,
386
+ source = SpdxDocumentFileFactory .descriptor.displayName ,
401
387
severity = Severity .WARNING ,
402
388
message = " The SPDX document at '$spdxDocument ' does not match the expected $hash (referred from $uri as " +
403
389
" part of '$externalDocumentId ')."
@@ -406,14 +392,13 @@ private fun SpdxExternalDocumentReference.verifyChecksum(file: File, uri: URI, i
406
392
407
393
/* *
408
394
* 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].
410
396
*/
411
397
private fun SpdxDocument.resolveReferences (
412
398
cache : SpdxDocumentCache ,
413
- documentUri : URI ,
414
- issueSource : String
399
+ documentUri : URI
415
400
): Map <SpdxExternalDocumentReference , ResolutionResult > =
416
- externalDocumentRefs.associateWith { it.resolve(cache, documentUri, issueSource ) }
401
+ externalDocumentRefs.associateWith { it.resolve(cache, documentUri) }
417
402
418
403
/* *
419
404
* Return a map with all the SPDX packages contained in this document. Keys are the identifiers of the packages,
0 commit comments