in JetBrains.SbomUtils/src/JetBrains.SbomUtils/SbomReader.cs [123:174]
public IReadOnlyCollection<FileInfo> GetAllFilesWithPackages(Dictionary<string, File> filesDict, Dictionary<string, Package> packagesDict, Dictionary<string, List<Relationship>> relationshipsBySourceElement, Dictionary<string, List<Relationship>> relationshipsByDestinationElement)
{
List<FileInfo> files = new List<FileInfo>(filesDict.Count);
foreach (var file in filesDict.Values)
{
if (relationshipsByDestinationElement.TryGetValue(file.SPDXID, out var leavesToRootRelationships))
{
foreach (var relationship in leavesToRootRelationships)
{
if (SbomRelationshipTypes.RootToLeavesRelationshipTypes.Contains(relationship.RelationshipType))
{
if (packagesDict.TryGetValue(relationship.SpdxElementId, out var package))
{
files.Add(new FileInfo(file, package, NormalizeRelativePath(file.FileName)));
}
}
else if (!SbomRelationshipTypes.LeavesToRootRelationshipTypes.Contains(relationship.RelationshipType))
{
_logger.LogWarning("Relationship type {relationshipType} (between {element} and {relatedElement}) is not supported",
relationship.RelationshipType,
relationship.SpdxElementId,
relationship.RelatedSpdxElement);
}
}
}
if (relationshipsBySourceElement.TryGetValue(file.SPDXID, out var rootToLeavesRelationships))
{
foreach (var relationship in rootToLeavesRelationships)
{
if (SbomRelationshipTypes.LeavesToRootRelationshipTypes.Contains(relationship.RelationshipType))
{
if (packagesDict.TryGetValue(relationship.RelatedSpdxElement, out var package))
{
files.Add(new FileInfo(file, package, NormalizeRelativePath(file.FileName)));
}
}
else if (!SbomRelationshipTypes.RootToLeavesRelationshipTypes.Contains(relationship.RelationshipType))
{
_logger.LogWarning("Relationship type {relationshipType} (between {element} and {relatedElement}) is not supported",
relationship.RelationshipType,
relationship.SpdxElementId,
relationship.RelatedSpdxElement);
}
}
}
}
return files;
}