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(directDependency.Location) .SelectNotNull <AssemblyNameInfo, T4AssemblyReferenceInfo>( assemblyNameInfo => { var resolver = BuildResolver(directDependency); resolver.ResolveAssembly(assemblyNameInfo, out var path, resolveContext); if (path == null) { return(null); } return(new T4AssemblyReferenceInfo(assemblyNameInfo.FullName, path)); } ); ResolveTransitiveDependencies(indirectDependencies, resolveContext, destination); } }
public T4LowLevelReferenceExtractionManager( Lifetime lifetime, [NotNull] AssemblyInfoDatabase assemblyInfoDatabase ) { AssemblyInfoDatabase = assemblyInfoDatabase; Cache = new RoslynMetadataReferenceCache(lifetime); }
private T4AssemblyReferenceInfo?Resolve([NotNull] FileSystemPath path) { var info = AssemblyInfoDatabase.GetAssemblyName(path); if (info == null) { return(null); } return(new T4AssemblyReferenceInfo(info.FullName, path)); }