public Task <ImmutableArray <ReferenceAssemblyWithTypeResult> > FindReferenceAssembliesWithTypeAsync( string name, int arity, CancellationToken cancellationToken) { // Our reference assembly data is stored in the nuget.org DB. if (!_sourceToDatabase.TryGetValue(NugetOrgSource, out var databaseWrapper)) { // Don't have a database to search. return(SpecializedTasks.EmptyImmutableArray <ReferenceAssemblyWithTypeResult>()); } var database = databaseWrapper.Database; if (name == "var") { // never find anything named 'var'. return(SpecializedTasks.EmptyImmutableArray <ReferenceAssemblyWithTypeResult>()); } var query = new MemberQuery(name, isFullSuffix: true, isFullNamespace: false); var symbols = new PartialArray <Symbol>(100); var results = ArrayBuilder <ReferenceAssemblyWithTypeResult> .GetInstance(); if (query.TryFindMembers(database, ref symbols)) { var types = FilterToViableTypes(symbols); foreach (var type in types) { cancellationToken.ThrowIfCancellationRequested(); // Only look at reference assembly results. if (type.PackageName.ToString() == MicrosoftAssemblyReferencesName) { var nameParts = ArrayBuilder <string> .GetInstance(); GetFullName(nameParts, type.FullName.Parent); var result = new ReferenceAssemblyWithTypeResult( type.AssemblyName.ToString(), type.Name.ToString(), containingNamespaceNames: nameParts.ToImmutableAndFree()); results.Add(result); } } } return(Task.FromResult(results.ToImmutableAndFree())); }
public Task<ImmutableArray<ReferenceAssemblyWithTypeResult>> FindReferenceAssembliesWithTypeAsync( string name, int arity) { // Our reference assembly data is stored in the nuget.org DB. if (!_sourceToDatabase.TryGetValue(NugetOrgSource, out var databaseWrapper)) { // Don't have a database to search. return SpecializedTasks.EmptyImmutableArray<ReferenceAssemblyWithTypeResult>(); } var database = databaseWrapper.Database; if (name == "var") { // never find anything named 'var'. return SpecializedTasks.EmptyImmutableArray<ReferenceAssemblyWithTypeResult>(); } var query = new MemberQuery(name, isFullSuffix: true, isFullNamespace: false); var symbols = new PartialArray<Symbol>(100); var results = ArrayBuilder<ReferenceAssemblyWithTypeResult>.GetInstance(); if (query.TryFindMembers(database, ref symbols)) { var types = FilterToViableTypes(symbols); foreach (var type in types) { // Only look at reference assembly results. if (type.PackageName.ToString() == MicrosoftAssemblyReferencesName) { var nameParts = new List<string>(); GetFullName(nameParts, type.FullName.Parent); var result = new ReferenceAssemblyWithTypeResult( type.AssemblyName.ToString(), type.Name.ToString(), containingNamespaceNames: nameParts); results.Add(result); } } } return Task.FromResult(results.ToImmutableAndFree()); }
public static SerializableReferenceAssemblyWithTypeResult Dehydrate( ReferenceAssemblyWithTypeResult result) { return new SerializableReferenceAssemblyWithTypeResult { ContainingNamespaceNames = result.ContainingNamespaceNames.ToArray(), AssemblyName = result.AssemblyName, TypeName = result.TypeName }; }