예제 #1
0
 internal LoadedDocumentWithCodeAnalysis(DocumentWithCodeAnalysis document, CompilationUnitSyntax syntax)
 {
     this.document = document;
     node          = new Node <LoadedDocumentWithCodeAnalysis, CompilationUnitSyntax>(this, syntax);
     attributes    = new AttributeListWrapper <LoadedDocumentWithCodeAnalysis, CompilationUnitSyntax>(
         node,
         parentSyntax => parentSyntax.AttributeLists,
         (parentSyntax, childSyntax) => parentSyntax.WithAttributeLists(childSyntax));
     assemblyAttributes = new FilteredAttributeList(attributes, attribute => attribute.Syntax.Target.Identifier.Text == "assembly");
     classes            = new ClassCollectionWithCodeAnalysis(this);
     delegates          = new LoadedDocumentMemberListWrapper <DelegateWithCodeAnalysis, DelegateDeclarationSyntax>(
         node,
         () => new DelegateWithCodeAnalysis(document));
     enums = new LoadedDocumentMemberListWrapper <EnumWithCodeAnalysis, EnumDeclarationSyntax>(
         node,
         () => new EnumWithCodeAnalysis(document));
     interfaces = new LoadedDocumentMemberListWrapper <InterfaceWithCodeAnalysis, InterfaceDeclarationSyntax>(
         node,
         () => new InterfaceWithCodeAnalysis(document));
     moduleAttributes = new FilteredAttributeList(attributes, attribute => attribute.Syntax.Target.Identifier.Text == "module");
     namespaces       = new LoadedDocumentMemberListWrapper <NamespaceWithCodeAnalysis, NamespaceDeclarationSyntax>(
         node,
         () => new NamespaceWithCodeAnalysis(document));
     structs         = new StructCollectionWithCodeAnalysis(this);
     usingDirectives = new SyntaxNodeList <LoadedDocumentWithCodeAnalysis, CompilationUnitSyntax, UsingDirectiveWithCodeAnalysis, UsingDirectiveSyntax>(
         node,
         currentSyntax => currentSyntax.Usings,
         (parentSyntax, childSyntax) => parentSyntax.WithUsings(childSyntax),
         () => new UsingDirectiveWithCodeAnalysis());
     members = new MemberList <LoadedDocumentWithCodeAnalysis, CompilationUnitSyntax>(
         node,
         (parentSyntax, childSyntax) => parentSyntax.WithMembers(childSyntax))
     {
         { nameof(classes.Classes), () => classes.Classes.Select(item => item.Syntax) },
         { nameof(classes.AbstractClasses), () => classes.AbstractClasses.Select(item => item.Syntax) },
         { nameof(classes.SealedClasses), () => classes.SealedClasses.Select(item => item.Syntax) },
         { nameof(classes.StaticClasses), () => classes.StaticClasses.Select(item => item.Syntax) },
         { nameof(Delegates), () => delegates.Select(item => item.Syntax) },
         { nameof(Enums), () => enums.Select(item => item.Syntax) },
         { nameof(Interfaces), () => interfaces.Select(item => item.Syntax) },
         { nameof(Namespaces), () => namespaces.Select(item => item.Syntax) },
         { nameof(structs.Structs), () => structs.Structs.Select(item => item.Syntax) }
     };
 }
 internal NamespaceWithCodeAnalysis(DocumentWithCodeAnalysis document)
 {
     node          = new Node <NamespaceWithCodeAnalysis, NamespaceDeclarationSyntax>(this);
     this.document = document;
     classes       = new ClassCollectionWithCodeAnalysis(this);
     delegates     = new NamespaceMemberListWrapper <DelegateWithCodeAnalysis, DelegateDeclarationSyntax>(
         node,
         () => new DelegateWithCodeAnalysis(document));
     enums = new NamespaceMemberListWrapper <EnumWithCodeAnalysis, EnumDeclarationSyntax>(
         node,
         () => new EnumWithCodeAnalysis(document));
     interfaces = new NamespaceMemberListWrapper <InterfaceWithCodeAnalysis, InterfaceDeclarationSyntax>(
         node,
         () => new InterfaceWithCodeAnalysis(document));
     namespaces = new NamespaceMemberListWrapper <NamespaceWithCodeAnalysis, NamespaceDeclarationSyntax>(
         node,
         () => new NamespaceWithCodeAnalysis(document));
     structs         = new StructCollectionWithCodeAnalysis(this);
     usingDirectives = new SyntaxNodeList <NamespaceWithCodeAnalysis, NamespaceDeclarationSyntax, UsingDirectiveWithCodeAnalysis, UsingDirectiveSyntax>(
         node,
         syntax => syntax.Usings,
         (parentSyntax, childSyntax) => parentSyntax.WithUsings(childSyntax),
         () => new UsingDirectiveWithCodeAnalysis());
     members = new MemberList <NamespaceWithCodeAnalysis, NamespaceDeclarationSyntax>(
         node,
         (parentSyntax, childSyntax) => parentSyntax.WithMembers(childSyntax))
     {
         { nameof(classes.Classes), () => classes.Classes.Select(item => item.Syntax) },
         { nameof(classes.AbstractClasses), () => classes.AbstractClasses.Select(item => item.Syntax) },
         { nameof(classes.SealedClasses), () => classes.SealedClasses.Select(item => item.Syntax) },
         { nameof(classes.StaticClasses), () => classes.StaticClasses.Select(item => item.Syntax) },
         { nameof(Delegates), () => delegates.Select(item => item.Syntax) },
         { nameof(Enums), () => enums.Select(item => item.Syntax) },
         { nameof(Interfaces), () => interfaces.Select(item => item.Syntax) },
         { nameof(Namespaces), () => namespaces.Select(item => item.Syntax) },
         { nameof(structs.Structs), () => structs.Structs.Select(item => item.Syntax) },
         { nameof(structs.PartialStructs), () => structs.PartialStructs.Select(item => item.Syntax) }
     };
 }
 private StatementListWrapper(SyntaxNodeList <TParent, TParentSyntax, IInternalStatement, StatementSyntax> list)
     : base(list, parent => parent, child => child as IInternalStatement)
 {
     this.list = list;
 }