public IReadOnlyCollection GetAllFilesWithPackages()

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;
    }