private IEnumerable <IDeclaration <SyntaxNode> > FindDeclarations(
            string identifier, IDeclaration <SyntaxNode> declarationContext)
        {
            List <IDeclaration <SyntaxNode> > declarations;

            if (declarationContext != null)
            {
                foreach (var usingDirective in declarationContext.UsingDirectives)
                {
                    var lookupName = ADeclaration <SyntaxNode> .GetFullName(usingDirective, identifier);

                    if (this.declarationMap.TryGetValue(lookupName, out declarations))
                    {
                        return(declarations);
                    }
                }

                foreach (var nameSpace in NameSpaceHelper.GetParentNameSpaces(declarationContext.DeclarationNameSpace))
                {
                    if (this.declarationMap.TryGetValue(
                            ADeclaration <SyntaxNode> .GetFullName(nameSpace, identifier),
                            out declarations))
                    {
                        return(declarations);
                    }
                }
            }

            if (this.declarationMap.TryGetValue(identifier, out declarations))
            {
                return(declarations);
            }

            return(null);
        }
示例#2
0
        private ISelector GetSelectorFromPatternAttribute(AttributeSyntax attributeSyntax)
        {
            var selectorExp = attributeSyntax.ArgumentList.Arguments.First();

            var constEvaluator   = new ConstantExpressionSyntaxEvaluator <string>();
            var selectorTypeName = constEvaluator.Visit(selectorExp.Expression);

            var nsBase = this.pattern.UsingDirectives
                         .Concat(NameSpaceHelper.GetParentNameSpaces(this.pattern.DeclarationNameSpace));

            foreach (var usingDirective in nsBase)
            {
                var selectorType = Type.GetType($"{usingDirective}.{selectorTypeName}");
                if (selectorType != null)
                {
                    return((ISelector)Activator.CreateInstance(selectorType));
                }
            }

            throw new ArgumentException($"Unknown selector {selectorTypeName}");
        }