async Task <PackageAssembly> TryResolveInDependencyAsync(AssemblyNameReference name, PackageDependency dep, ConcurrentDictionary <string, bool> searchedPackages, CancellationTokenSource cts) { var lowerPackageId = dep.PackageId.ToLowerInvariant(); if (searchedPackages.ContainsKey(lowerPackageId)) { return(null); } searchedPackages.TryAdd(lowerPackageId, true); try { var package = await PackageData.GetAsync(dep.PackageId, dep.VersionSpec, cts.Token).ConfigureAwait(false); if (cts.Token.IsCancellationRequested) { return(null); } var fw = package.FindClosestTargetFramework(packageTargetFramework.Moniker); if (fw != null) { return(await TryResolveInFrameworkAsync(name, fw, searchedPackages, cts).ConfigureAwait(false)); } } catch {} return(null); }
protected override async Task <ApiDiff> GetValueAsync(Tuple <string, string, string> packageSpec, string otherVersion, CancellationToken token) { var packageId = packageSpec.Item1; var version = packageSpec.Item2; var inputFramework = packageSpec.Item3; var package = await PackageData.GetAsync(packageId, version, token).ConfigureAwait(false); var otherPackage = await PackageData.GetAsync(packageId, otherVersion, token).ConfigureAwait(false); var framework = package.FindClosestTargetFramework(inputFramework); var otherFramework = otherPackage.FindClosestTargetFramework(inputFramework); return(await Task.Run(() => new ApiDiff (package, framework, otherPackage, otherFramework)).ConfigureAwait(false)); }
async Task <PackageAssembly> TryResolveInDependencyAsync( AssemblyNameReference name, PackageDependency dep, ConcurrentDictionary <string, bool> searchedPackages, ConcurrentQueue <PackageAssembly> found) { if (found.Count > 0) { return(null); } var lowerPackageId = dep.PackageId.ToLowerInvariant(); if (!searchedPackages.TryAdd(lowerPackageId, true)) { return(null); } try { var package = await PackageData.GetAsync(dep.PackageId, dep.VersionSpec, httpClient, CancellationToken.None).ConfigureAwait(false); if (found.Count > 0) { return(null); } var fw = package.FindClosestTargetFramework(packageTargetFramework.Moniker); if (fw != null) { var r = await TryResolveInFrameworkAsync(name, fw, searchedPackages, found).ConfigureAwait(false); if (r != null) { found.Enqueue(r); } return(r); } } catch (Exception ex) { Debug.WriteLine(ex); } return(null); }
async Task <string> DeepFindTypeUrlAsync(string typeFullName, ConcurrentDictionary <string, bool> tried, ConcurrentQueue <string> found) { var url = FindTypeUrl(typeFullName, shallow: true); if (url != null) { return(url); } if (found.Count > 0) { return(null); } var depFrameworks = new List <PackageTargetFramework> (); var shallowDepPackages = Dependencies.Select(async x => { if (!tried.TryAdd(x.PackageId, true)) { return(null); } //Console.WriteLine ("TRY " + x.PackageId); var data = await PackageData.GetAsync(x.PackageId, x.VersionSpec, CancellationToken.None).ConfigureAwait(false); if (found.Count > 0) { return(null); } var fw = data.FindClosestTargetFramework(this.Moniker); if (fw == null) { return(null); } depFrameworks.Add(fw); var r = fw.FindTypeUrl(typeFullName, shallow: true); if (r != null) { found.Enqueue(r); } return(r); }); var shallowResults = await Task.WhenAll(shallowDepPackages).ConfigureAwait(false); var shallowResult = shallowResults.FirstOrDefault(x => x != null); if (shallowResult != null) { return(shallowResult); } var deepDepPackages = depFrameworks.Select(async fw => { var r = await fw.DeepFindTypeUrlAsync(typeFullName, tried, found).ConfigureAwait(false); if (r != null) { found.Enqueue(r); } return(r); }); var results = await Task.WhenAll(deepDepPackages).ConfigureAwait(false); return(results.FirstOrDefault(x => x != null)); }