private void ResolveTransitiveDependencies()

in Backend/RiderPlugin/ForTea.RiderPlugin/TemplateProcessing/CodeGeneration/Reference/Impl/T4LowLevelReferenceExtractionManager.cs [84:117]


    private void ResolveTransitiveDependencies(
      [NotNull] IEnumerable<T4AssemblyReferenceInfo> directDependencies,
      [NotNull] IModuleReferenceResolveContext resolveContext,
      [NotNull] IList<T4AssemblyReferenceInfo> destination
    )
    {
      foreach (var directDependency in directDependencies)
      {
        if (destination.Any(it => it.FullName == directDependency.FullName)) continue;
        destination.Add(directDependency);
        var indirectDependencies = AssemblyInfoDatabase
          .GetReferencedAssemblyNames(new AssemblyLocation(directDependency.Location))
          .SelectNotNull<AssemblyNameInfo, T4AssemblyReferenceInfo>(
            assemblyNameInfo =>
            {
              var resolver = BuildResolver(directDependency);
              resolver.ResolveAssembly(assemblyNameInfo, out var path, resolveContext);
              if (path == null)
              {
                var assemblyFromSolution = Solution.GetAllAssemblies()
                  .FirstOrDefault(assembly => assembly.AssemblyName == assemblyNameInfo);
                if (assemblyFromSolution == null) return null;
                return new T4AssemblyReferenceInfo(
                  assemblyFromSolution.FullAssemblyName,
                  assemblyFromSolution.Location.AssemblyPhysicalPath.NotNull()
                );
              }

              return new T4AssemblyReferenceInfo(assemblyNameInfo.FullName, path.AssemblyPhysicalPath.NotNull());
            }
          );
        ResolveTransitiveDependencies(indirectDependencies, resolveContext, destination);
      }
    }