示例#1
0
        /// <summary>
        /// Deep-clone the code object.
        /// </summary>
        public override CodeObject Clone()
        {
            MultiEnumMemberDecl clone = (MultiEnumMemberDecl)base.Clone();

            clone._enumMemberDecls = ChildListHelpers.Clone(_enumMemberDecls, clone);
            return(clone);
        }
        /// <summary>
        /// Parse an <see cref="EnumMemberDecl"/>.
        /// </summary>
        public static EnumMemberDecl Parse(Parser parser, CodeObject parent, ParseFlags flags)
        {
            // Turn off special callback from EnumDecl used to parse single-identifier enums
            parser.SingleUnusedIdentifierParser = null;

            // Validate that we have an unused identifier token
            if (parser.HasUnusedIdentifier)
            {
                // Parse the first EnumMemberDecl
                EnumMemberDecl enumMemberDecl = new EnumMemberDecl(parser, parent, true);

                // Always create a MultiEnumMemberDecl for enums
                MultiEnumMemberDecl multiEnumMemberDecl = new MultiEnumMemberDecl(enumMemberDecl);
                multiEnumMemberDecl.SetLineCol(enumMemberDecl);

                // Handle additional EnumMemberDecls after any commas
                while (parser.TokenText == Expression.ParseTokenSeparator)
                {
                    Token lastTokenOfLastMember = parser.LastToken;
                    bool  lastCommaFirstOnLine  = parser.Token.IsFirstOnLine;
                    parser.NextToken();  // Move past ','

                    // Associate any EOL comment on the ',' to the last EnumMemberDecl
                    enumMemberDecl.MoveEOLComment(parser.LastToken, false, false);

                    // Parse any comments, doc comments, attributes, compiler directives
                    enumMemberDecl.ParseAnnotations(parser, parent, false, false);

                    // Abort if we had a trailing comma with nothing after it
                    if (parser.TokenText == Block.ParseTokenEnd)
                    {
                        break;
                    }

                    // Parse the next EnumMemberDecl
                    enumMemberDecl = new EnumMemberDecl(parser, null, false);
                    // Get any post comments after the last member and before the comma
                    enumMemberDecl.MoveComments(lastTokenOfLastMember);

                    // Force the EnumMemberDecl to first-on-line if the last comma was (handles special-case
                    // formatting where the commas preceed the list items instead of following them).
                    if (lastCommaFirstOnLine)
                    {
                        enumMemberDecl.IsFirstOnLine = true;
                    }

                    multiEnumMemberDecl.Add(enumMemberDecl);
                }

                // Parse any post compiler directives
                enumMemberDecl.ParseAnnotations(parser, parent, true, false);
                return(multiEnumMemberDecl);
            }
            return(null);
        }
示例#3
0
 /// <summary>
 /// Get the enum member with the specified name.
 /// </summary>
 public EnumMemberRef GetMember(string name)
 {
     return(MultiEnumMemberDecl.GetMember(name));
 }
示例#4
0
 /// <summary>
 /// Add a collection of <see cref="EnumMemberDecl"/>s.
 /// </summary>
 public void AddRange(IEnumerable <EnumMemberDecl> collection)
 {
     MultiEnumMemberDecl.AddRange(collection);
 }
示例#5
0
 /// <summary>
 /// Add multiple <see cref="EnumMemberDecl"/>s.
 /// </summary>
 public void Add(params EnumMemberDecl[] enumMemberDecls)
 {
     MultiEnumMemberDecl.AddRange(enumMemberDecls);
 }
示例#6
0
 /// <summary>
 /// Add an <see cref="EnumMemberDecl"/> with the specified name.
 /// </summary>
 public void Add(string name)
 {
     MultiEnumMemberDecl.Add(name, null);
 }
示例#7
0
 /// <summary>
 /// Add an <see cref="EnumMemberDecl"/> with the specified name.
 /// </summary>
 public void Add(string name, Expression initialization)
 {
     MultiEnumMemberDecl.Add(name, initialization);
 }
示例#8
0
 /// <summary>
 /// Add an <see cref="EnumMemberDecl"/>.
 /// </summary>
 public void Add(EnumMemberDecl enumMemberDecl)
 {
     MultiEnumMemberDecl.Add(enumMemberDecl);
 }