public static MemberDeclarationSyntax[] GenerateClasses(NamespaceDeclarationSyntax @namespace) { var isInterfaceToClass = @namespace.GetLeadingTrivia().Any(trivia => trivia.ToString().Trim() == "//Meta(interface-to-class)"); if (!isInterfaceToClass) return Array<MemberDeclarationSyntax>.Empty; var resultMembers = new List<MemberDeclarationSyntax>(); foreach (var @interface in @namespace.Members.OfType<InterfaceDeclarationSyntax>()) { resultMembers.Add(ToClass(@interface)); } return resultMembers.ToArray(); }
private Namespace TraverseNamespace(NamespaceDeclarationSyntax nds) { Namespace retNS = new Namespace(); retNS.Name = nds.Name.ToString(); if (nds.HasLeadingTrivia) { SetOuterComments(retNS, nds.GetLeadingTrivia().ToFullString()); } if (nds.HasTrailingTrivia) { SetInnerComments(retNS, nds.GetTrailingTrivia().ToFullString()); } //First, grab any objects defined at the beginning of the namespace (even delegates!) var delegates = from aDelegate in nds.ChildNodes().OfType<DelegateDeclarationSyntax>() select aDelegate; foreach (DelegateDeclarationSyntax dds in delegates) { //TraverseDelegate } //Next, traverse any classes var classes = from cls in nds.ChildNodes().OfType<ClassDeclarationSyntax>() select cls; foreach (ClassDeclarationSyntax cds in classes) { retNS.Classes.Add(TraverseClass(cds)); } var interfaces = from anInterface in nds.ChildNodes().OfType<InterfaceDeclarationSyntax>() select anInterface; foreach (InterfaceDeclarationSyntax ids in interfaces) { Interface tempInterface = TraverseInterface(ids); retNS.Interfaces.Add(tempInterface); } var enums = from aEnum in nds.ChildNodes().OfType<EnumDeclarationSyntax>() select aEnum; foreach (EnumDeclarationSyntax eds in enums) { Model.Enum tempEnum = TraverseEnums(eds); retNS.Enums.Add(tempEnum); } //TODO: Don't forget enums return retNS; }