Пример #1
0
        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()));
        }
Пример #2
0
        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());
        }
Пример #3
0
 public static SerializableReferenceAssemblyWithTypeResult Dehydrate(
     ReferenceAssemblyWithTypeResult result)
 {
     return new SerializableReferenceAssemblyWithTypeResult
     {
         ContainingNamespaceNames = result.ContainingNamespaceNames.ToArray(),
         AssemblyName = result.AssemblyName,
         TypeName = result.TypeName
     };
 }