Beispiel #1
0
        private void ResolveReachabilityAnnotations(IInvocableDeclarationSyntax invocable)
        {
            var canReach = invocable.ReachabilityAnnotations.CanReachAnnotation?.Parameters
                           ?? Enumerable.Empty <IParameterNameSyntax>();
            var reachableFrom = invocable.ReachabilityAnnotations.ReachableFromAnnotation?.Parameters
                                ?? Enumerable.Empty <IParameterNameSyntax>();
            var symbols = symbolTree.Children(invocable.Symbol.Result).OfType <BindingSymbol>().ToFixedSet();

            foreach (var syn in canReach.Concat(reachableFrom))
            {
                ResolveReachabilityAnnotation(invocable.File, syn, symbols);
            }
        }
        private NamespaceOrPackageSymbol BuildNamespaceSymbol(
            NamespaceOrPackageSymbol containingSymbol,
            NamespaceName namespaces)
        {
            foreach (var nsName in namespaces.Segments)
            {
                var nsSymbol = treeBuilder.Children(containingSymbol)
                               .OfType <NamespaceSymbol>()
                               .SingleOrDefault(c => c.Name == nsName);
                if (nsSymbol is null)
                {
                    nsSymbol = new NamespaceSymbol(containingSymbol, nsName);
                    treeBuilder.Add(nsSymbol);
                }

                containingSymbol = nsSymbol;
            }

            return(containingSymbol);
        }