Exemplo n.º 1
0
        /// <summary>
        /// Find the symbols for declarations made in source with a matching name.
        /// </summary>
        public static async Task <IEnumerable <ISymbol> > FindSourceDeclarationsAsync(
            Project project, Func <string, bool> predicate, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (project == null)
            {
                throw new ArgumentNullException("project");
            }

            if (predicate == null)
            {
                throw new ArgumentNullException("predicate");
            }

            cancellationToken.ThrowIfCancellationRequested();

            var info = await SymbolTreeInfo.GetInfoForProjectAsync(project, cancellationToken).ConfigureAwait(false);

            if (info != null && info.HasSymbols(predicate, cancellationToken))
            {
                var compilation = await project.GetCompilationAsync(cancellationToken).ConfigureAwait(false);

                return(info.Search(compilation.Assembly, predicate, cancellationToken));
            }

            return(SpecializedCollections.EmptyEnumerable <ISymbol>());
        }
Exemplo n.º 2
0
        private static async Task AddDeclarationsAsync(Project project, IAssemblySymbol assembly, string name, bool ignoreCase, List <ISymbol> list, CancellationToken cancellationToken)
        {
            var info = await SymbolTreeInfo.GetInfoForProjectAsync(project, cancellationToken).ConfigureAwait(false);

            if (info != null && info.HasSymbols(name, ignoreCase))
            {
                list.AddRange(info.Find(assembly, name, ignoreCase, cancellationToken));
            }
        }
Exemplo n.º 3
0
        private static async Task <IEnumerable <ISymbol> > FindSourceDeclarationsAsyncImpl(
            Project project, string name, bool ignoreCase, CancellationToken cancellationToken)
        {
            var info = await SymbolTreeInfo.GetInfoForProjectAsync(project, cancellationToken).ConfigureAwait(false);

            if (info != null && info.HasSymbols(name, ignoreCase))
            {
                var compilation = await project.GetCompilationAsync(cancellationToken).ConfigureAwait(false);

                return(info.Find(compilation.Assembly, name, ignoreCase, cancellationToken));
            }
            else
            {
                return(SpecializedCollections.EmptyEnumerable <ISymbol>());
            }
        }