private static XpidlFile CreateXpidlFile(IEnumerable<SyntaxNode> rootSyntaxNodes) { if (rootSyntaxNodes == null) { throw new ArgumentNullException("rootSyntaxNodes"); } var xpidlFile = new XpidlFile(); foreach (SyntaxNode syntaxNode in rootSyntaxNodes) { BuildXpidlFile(xpidlFile, syntaxNode); } return xpidlFile; }
private static void BuildXpidlFile(XpidlFile xpidlFile, SyntaxNode syntaxNode) { if (syntaxNode is CommentSyntaxNode) { var commentSyntaxNode = (CommentSyntaxNode) syntaxNode; if (commentSyntaxNode.IsInlineCHeader) { XpidlInlineCHeader xpidlInlineCHeader = CreateXpidlInlineCHeader(commentSyntaxNode); xpidlFile.AddNode(xpidlInlineCHeader); } else { XpidlComment xpidlComment = CreateXpidlComment(commentSyntaxNode); xpidlFile.AddNode(xpidlComment); } } else if (syntaxNode is ComplexSyntaxNode) { var complexSyntaxNode = (ComplexSyntaxNode) syntaxNode; switch ((RuleConstants) complexSyntaxNode.Rule.Index) { case RuleConstants.Xpidl: case RuleConstants.XpidlItems1: case RuleConstants.XpidlItems2: case RuleConstants.XpidlItem1: case RuleConstants.XpidlItem2: case RuleConstants.XpidlItem3: case RuleConstants.XpidlItem4: case RuleConstants.XpidlItem5: foreach (SyntaxNode node in complexSyntaxNode) { BuildXpidlFile(xpidlFile, node); } break; case RuleConstants.XpidlTypeDef: XpidlTypeDef xpidlTypeDef = CreateXpidlTypeDef(complexSyntaxNode); xpidlFile.AddNode(xpidlTypeDef); break; case RuleConstants.XpidlInclude: XpidlInclude xpidlInclude = CreateXpidlInclude(complexSyntaxNode); xpidlFile.AddNode(xpidlInclude); break; case RuleConstants.XpidlForwardDeclaration: XpidlForwardDeclaration xpidlForwardDeclaration = CreateXpidlForwardDeclaration(complexSyntaxNode); xpidlFile.AddNode(xpidlForwardDeclaration); break; case RuleConstants.XpidlNativeType1: case RuleConstants.XpidlNativeType2: XpidlNativeType xpidlNativeType = CreateXpidlNativeType(complexSyntaxNode); xpidlFile.AddNode(xpidlNativeType); break; case RuleConstants.XpidlInterface1: case RuleConstants.XpidlInterface2: case RuleConstants.XpidlInterface3: case RuleConstants.XpidlInterface4: XpidlInterface xpidlInterface = CreateXpidlInterface(complexSyntaxNode); xpidlFile.AddNode(xpidlInterface); break; default: throw new ArgumentException(mc_InvalidSyntaxNode, "syntaxNode"); } } else // SimpleSyntaxNode { throw new ArgumentException(mc_InvalidSyntaxNode, "syntaxNode"); } }