/// <summary> /// Parses the specified entity. /// </summary> /// <param name = "entity">The entity.</param> /// <param name = "reader">The reader.</param> public override void Parse(BaseEntity entity, TextReader reader) { EnumerationEntity enumerationEntity = (EnumerationEntity)entity; if (enumerationEntity == null) { throw new ArgumentException ("EnumerationEntity expected", "entity"); } IParser parser = ParserFactory.CreateParser (SupportedLanguage.CSharp, reader); parser.Parse (); // Extract the special nodes (comment, etc) List<ISpecial> specials = parser.Lexer.SpecialTracker.RetrieveSpecials (); this.CodeDomSpecialParser = new CodeDomSpecialParser (specials); // Parse the compilation unit CompilationUnit cu = parser.CompilationUnit; foreach (INode child1 in cu.Children) { NamespaceDeclaration namespaceDeclaration = child1 as NamespaceDeclaration; if (namespaceDeclaration == null) { continue; } foreach (INode child2 in child1.Children) { TypeDeclaration declaration = child2 as TypeDeclaration; if (declaration == null) { continue; } if (declaration.Type != ClassType.Enum) { continue; } // Extract basic informations enumerationEntity.BaseType = declaration.BaseTypes.Count > 0 ? declaration.BaseTypes [0].Type : "int"; // Extract attributes Attribute attribute = FindAttribute (declaration, "Flags"); enumerationEntity.Flags = (attribute != null); IEnumerable<Comment> comments = this.GetDocumentationCommentsBefore (declaration); AppendComment (entity, comments); // Append each values foreach (INode child3 in declaration.Children) { FieldDeclaration fieldDeclaration = child3 as FieldDeclaration; if (fieldDeclaration == null) { continue; } EnumerationValueEntity valueEntity = new EnumerationValueEntity (); valueEntity.Name = fieldDeclaration.Fields [0].Name; Expression expression = fieldDeclaration.Fields [0].Initializer; if (expression != null) { CodeDomExpressionPrinter printer = new CodeDomExpressionPrinter (); expression.AcceptVisitor (printer, null); valueEntity.Value = printer.ToString (); } comments = this.GetDocumentationCommentsBefore (fieldDeclaration); AppendComment (valueEntity, comments); enumerationEntity.Values.Add (valueEntity); } } } // Ensure that availability is set on entity. entity.AdjustAvailability (); }
/// <summary> /// Parses the specified entity. /// </summary> /// <param name = "entity">The entity.</param> /// <param name = "reader">The reader.</param> public override void Parse(BaseEntity entity, TextReader reader) { EnumerationEntity enumerationEntity = (EnumerationEntity)entity; if (enumerationEntity == null) { throw new ArgumentException("EnumerationEntity expected", "entity"); } IParser parser = ParserFactory.CreateParser(SupportedLanguage.CSharp, reader); parser.Parse(); // Extract the special nodes (comment, etc) List <ISpecial> specials = parser.Lexer.SpecialTracker.RetrieveSpecials(); this.CodeDomSpecialParser = new CodeDomSpecialParser(specials); // Parse the compilation unit CompilationUnit cu = parser.CompilationUnit; foreach (INode child1 in cu.Children) { NamespaceDeclaration namespaceDeclaration = child1 as NamespaceDeclaration; if (namespaceDeclaration == null) { continue; } foreach (INode child2 in child1.Children) { TypeDeclaration declaration = child2 as TypeDeclaration; if (declaration == null) { continue; } if (declaration.Type != ClassType.Enum) { continue; } // Extract basic informations enumerationEntity.BaseType = declaration.BaseTypes.Count > 0 ? declaration.BaseTypes [0].Type : "int"; // Extract attributes Attribute attribute = FindAttribute(declaration, "Flags"); enumerationEntity.Flags = (attribute != null); IEnumerable <Comment> comments = this.GetDocumentationCommentsBefore(declaration); AppendComment(entity, comments); // Append each values foreach (INode child3 in declaration.Children) { FieldDeclaration fieldDeclaration = child3 as FieldDeclaration; if (fieldDeclaration == null) { continue; } EnumerationValueEntity valueEntity = new EnumerationValueEntity(); valueEntity.Name = fieldDeclaration.Fields [0].Name; Expression expression = fieldDeclaration.Fields [0].Initializer; if (expression != null) { CodeDomExpressionPrinter printer = new CodeDomExpressionPrinter(); expression.AcceptVisitor(printer, null); valueEntity.Value = printer.ToString(); } comments = this.GetDocumentationCommentsBefore(fieldDeclaration); AppendComment(valueEntity, comments); enumerationEntity.Values.Add(valueEntity); } } } // Ensure that availability is set on entity. entity.AdjustAvailability(); }