/// <summary> /// Load extends statement list. /// </summary> /// <param name="declaration">The declaration to load.</param> /// <param name="resolver">The resolver to resolve dependencies.</param> private void LoadExtends( AGenericDeclaration <TNode> declaration, IDeclarationResolver resolver) { BaseListSyntax baseListSyntax = BaseListGetter(declaration.SyntaxNodeProvider.SyntaxNode); if (baseListSyntax != null) { var baseWalker = new DeclarationUseWalker(resolver, declaration); var uses = new List <IDeclarationUse <SyntaxNode> >(); foreach (var node in baseListSyntax.ChildNodes()) { var use = baseWalker.Visit(node); if (use.Declaration is IGenericDeclarationImpl genericDeclaration) { genericDeclaration.AddExtendedBy(declaration); } uses.Add(use); } declaration.Extends = uses; } else { declaration.Extends = Array.Empty <IDeclarationUse <SyntaxNode> >(); } }
public override void VisitMethodDeclaration(MethodDeclarationSyntax node) { var identifier = node.Identifier.ToString(); if (node.Modifiers.All(m => m.Kind() != SyntaxKind.PrivateKeyword)) { var useWalker = new DeclarationUseWalker(this.resolver, this.genericDeclaration); var use = useWalker.Visit(node.ReturnType); this.memberList.Add(new MethodDeclaration( identifier, use, new ParserSyntaxNodeProvider <MethodDeclarationSyntax>(node))); } }
public override void VisitPropertyDeclaration(PropertyDeclarationSyntax node) { var identifier = node.Identifier.ToString(); var useWalker = new DeclarationUseWalker(this.resolver, this.genericDeclaration); var use = useWalker.Visit(node.Type); var canRead = node.AccessorList.Accessors.FirstOrDefault(a => a.Kind() == SyntaxKind.GetAccessorDeclaration) != null; var canWrite = node.AccessorList.Accessors.LastOrDefault(a => a.Kind() == SyntaxKind.SetAccessorDeclaration) != null; this.memberList.Add(new PropertyDeclaration( identifier, use, new ParserSyntaxNodeProvider <PropertyDeclarationSyntax>(node), canRead, canWrite)); }