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); }
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}"); }