public TransitiveDependencyResolver(ISettings settings, ILogger logger, SourceCacheContext cache)
 {
     _context = CreateRemoteWalkContext(settings, cache, logger);
     _localPackageExtractor = new LocalPackageExtractor(settings, _context.Logger, _context.CacheContext);
     _packages = new List <LibraryRange>();
 }
        private static async Task <RestoreTargetGraph> GetPlatformSpecificGraph(RestoreTargetGraph independentGraph,
                                                                                string package, string version, NuGetFramework framework, string runtimeIdentifier,
                                                                                RemoteWalkContext context, LocalPackageExtractor extractor)
        {
            var graphTask = independentGraph.Flattened
                            .Where(m => m.Data?.Match?.Library?.Type == LibraryType.Package)
                            .Select(GetRuntimeGraphTask);

            var graphs = (await Task.WhenAll(graphTask))
                         .Where(i => i != null);

            var runtimeGraph = graphs.Aggregate(RuntimeGraph.Empty, RuntimeGraph.Merge);

            // This results in additional entries
            var resultWin = await new RemoteDependencyWalker(context).WalkAsync(
                new LibraryRange(package, VersionRange.Parse(version), LibraryDependencyTarget.All),
                framework,
                runtimeGraph: runtimeGraph,
                recursive: true,
                runtimeIdentifier: runtimeIdentifier);

            return(RestoreTargetGraph.Create(runtimeGraph, new[]
            {
                resultWin
            }, context, context.Logger, framework, runtimeIdentifier));

            async Task <RuntimeGraph> GetRuntimeGraphTask(GraphItem <RemoteResolveResult> item)
            {
                var packageIdentity = ToPackageIdentity(item.Data.Match);

                var localPackageSourceInfo = await extractor.EnsureLocalPackage(item.Data.Match.Provider, packageIdentity);

                return(localPackageSourceInfo?.Package?.RuntimeGraph);
            }
        }