internal static EnumDeclarationSyntax AddEnumMemberTo(EnumDeclarationSyntax destination, IFieldSymbol enumMember, CodeGenerationOptions options)
        {
            var members = new List<SyntaxNodeOrToken>();
            members.AddRange(destination.Members.GetWithSeparators());

            var member = GenerateEnumMemberDeclaration(enumMember, destination, options);

            if (members.Count == 0)
            {
                members.Add(member);
            }
            else if (members.LastOrDefault().CSharpKind() == SyntaxKind.CommaToken)
            {
                members.Add(member);
                members.Add(SyntaxFactory.Token(SyntaxKind.CommaToken));
            }
            else
            {
                var lastMember = members.Last();
                var trailingTrivia = lastMember.GetTrailingTrivia();
                members[members.Count - 1] = lastMember.WithTrailingTrivia();
                members.Add(SyntaxFactory.Token(SyntaxKind.CommaToken).WithTrailingTrivia(trailingTrivia));
                members.Add(member);
            }

            return destination.EnsureOpenAndCloseBraceTokens()
                .WithMembers(SyntaxFactory.SeparatedList<EnumMemberDeclarationSyntax>(members));
        }
Exemple #2
0
        public override void VisitEnumDeclaration(EnumDeclarationSyntax node)
        {
            EnumWalker walker = this.CreateSyntaxWalker<EnumWalker>(node);
            walker.Visit(node);
            this.Enums.Add(walker);

            base.VisitEnumDeclaration(node);
        }
Exemple #3
0
 public override void VisitEnumDeclaration(EnumDeclarationSyntax node)
 {
     if (compilation != null)
     {
         var type = compilation.GetSemanticModel(node.SyntaxTree).GetDeclaredSymbol(node);
         types.Add(type);                
     }
     typeDeclarations.Add(node);
     base.VisitEnumDeclaration(node);
 }
        public static string EnumDeclaration(EnumDeclarationSyntax declaration)
        {
            Builder.Instance.EnumMapToNames.Clear();
            var parsedAttributes = ParseAttributes(declaration.AttributeLists);

            var output = declaration.GetLeadingTrivia().ToFullString();

            output += parsedAttributes.Item1;
            var nameToUse = parsedAttributes.Item2;

            output +=
                Builder.Instance.LanguageConvertEnum()
                + " "
                + (nameToUse ?? SyntaxTokenConvert(declaration.Identifier).TrimEnd());

            //Get the value of the enum
            foreach (var decl in declaration.ChildNodes().OfType <EnumMemberDeclarationSyntax>()
                     .Where(decl => decl.EqualsValue != null).Select(decl => decl.EqualsValue.Value))
            {
                if (decl.IsKind(SyntaxKind.StringLiteralExpression))
                {
                    output += Builder.Instance.LanguageConvertEnumPostfix("String");
                }
                else if (decl.IsKind(SyntaxKind.CharacterLiteralExpression))
                {
                    output += Builder.Instance.LanguageConvertEnumPostfix("Character");
                }
                else if (decl.IsKind(SyntaxKind.NumericLiteralExpression))
                {
                    output += Builder.Instance.LanguageConvertEnumPostfix("Int");
                }
                else
                {
                    continue;
                }

                break;
            }

            var outputMembers = declaration.Members.ConvertSeparatedSyntaxList(
                separatorForced: Builder.Instance.LanguageEnumMemberSeparator()
                ).TrimEnd();
            var outputEnumMapToName = Builder.Instance.LanguageConvertEnumMapToName();

            output +=
                " "
                + SyntaxTokenConvert(declaration.OpenBraceToken).TrimStart()
                + outputMembers
                + NewLine
                + outputEnumMapToName
                + SyntaxTokenConvert(declaration.CloseBraceToken);
            return(output);
        }
        private int Compare(EnumDeclarationSyntax x, EnumDeclarationSyntax y)
        {
            if (EqualAccessibility(x, x.Modifiers, y, y.Modifiers, out var result))
            {
                if (_includeName)
                {
                    EqualIdentifierName(x.Identifier, y.Identifier, out result);
                }
            }

            return(result);
        }
    public override void VisitEnumDeclaration(EnumDeclarationSyntax node)
    {
        var typeSymbol = importer.model.GetDeclaredSymbol(node);

        FAMIX.Type type = importer.EnsureType(typeSymbol);

        currentTypeStack.Push(type);
        importer.CreateSourceAnchor(type, node);
        type.isStub = false;
        base.VisitEnumDeclaration(node);
        currentTypeStack.Pop();
    }
    public override void VisitEnumDeclaration(EnumDeclarationSyntax node)
    {
        var typeSymbol = semanticModel.GetDeclaredSymbol(node);

        FAMIX.Type type = importer.EnsureType(typeSymbol, typeof(FAMIX.Enum));
        node.Modifiers.ToList <SyntaxToken>().ForEach(token => type.Modifiers.Add(token.Text));
        currentTypeStack.Push(type);
        importer.CreateSourceAnchor(type, node);
        type.isStub = false;
        base.VisitEnumDeclaration(node);
        currentTypeStack.Pop();
    }
Exemple #8
0
        public static Task <Document> RefactorAsync(
            Document document,
            EnumDeclarationSyntax enumDeclaration,
            CancellationToken cancellationToken)
        {
            var rewriter = new SyntaxRewriter(enumDeclaration);

            SyntaxNode newNode = rewriter.Visit(enumDeclaration)
                                 .WithFormatterAnnotation();

            return(document.ReplaceNodeAsync(enumDeclaration, newNode, cancellationToken));
        }
        public override void VisitEnumDeclaration(EnumDeclarationSyntax node)
        {
            if (SkipInnerTypeDeclaration(node)) { return; }

            WriteLine($"{node.EnumKeyword} {node.Identifier} {{");

            nestingDepth++;
            base.VisitEnumDeclaration(node);
            nestingDepth--;

            WriteLine("}");
        }
        private static async Task <Document> RefactorAsync(
            Document document,
            EnumDeclarationSyntax enumDeclaration,
            IEnumerable <EnumMemberDeclarationSyntax> enumMembers,
            bool keepCompositeValue,
            CancellationToken cancellationToken)
        {
            SemanticModel semanticModel = null;

            if (keepCompositeValue)
            {
                semanticModel = await document.GetSemanticModelAsync(cancellationToken).ConfigureAwait(false);

                INamedTypeSymbol enumSymbol = semanticModel.GetDeclaredSymbol(enumDeclaration, cancellationToken);

                keepCompositeValue = enumSymbol.HasAttribute(MetadataNames.System_FlagsAttribute);
            }

            IEnumerable <TextChange> textChanges = enumMembers
                                                   .Where(enumMember =>
            {
                ExpressionSyntax expression = enumMember.EqualsValue?.Value;

                if (expression == null)
                {
                    return(false);
                }

                if (keepCompositeValue &&
                    !(expression is LiteralExpressionSyntax))
                {
                    IFieldSymbol fieldSymbol = semanticModel.GetDeclaredSymbol(enumMember, cancellationToken);

                    if (!fieldSymbol.HasConstantValue)
                    {
                        return(false);
                    }

                    ulong value = SymbolUtility.GetEnumValueAsUInt64(fieldSymbol.ConstantValue, fieldSymbol.ContainingType);

                    if (FlagsUtility <ulong> .Instance.IsComposite(value))
                    {
                        return(false);
                    }
                }

                return(true);
            })
                                                   .Select(f => new TextChange(TextSpan.FromBounds(f.Identifier.Span.End, f.EqualsValue.Span.End), ""));

            return(await document.WithTextChangesAsync(textChanges, cancellationToken).ConfigureAwait(false));
        }
        private static async Task <Document> RefactorAsync(
            Document document,
            EnumDeclarationSyntax enumDeclaration,
            EnumMemberDeclarationSyntax newEnumMember,
            int insertIndex,
            CancellationToken cancellationToken)
        {
            SemanticModel semanticModel = await document.GetSemanticModelAsync(cancellationToken).ConfigureAwait(false);

            EnumDeclarationSyntax newNode = enumDeclaration.WithMembers(enumDeclaration.Members.Insert(insertIndex, newEnumMember));

            return(await document.ReplaceNodeAsync(enumDeclaration, newNode, cancellationToken).ConfigureAwait(false));
        }
        private static async Task <Document> RefactorAsync(
            Document document,
            EnumDeclarationSyntax enumDeclaration,
            INamedTypeSymbol enumSymbol,
            object value,
            CancellationToken cancellationToken)
        {
            EnumMemberDeclarationSyntax newEnumMember = GenerateEnumHelper.CreateEnumMember(enumSymbol, "EnumMember", value);

            EnumDeclarationSyntax newNode = enumDeclaration.AddMembers(newEnumMember);

            return(await document.ReplaceNodeAsync(enumDeclaration, newNode, cancellationToken).ConfigureAwait(false));
        }
Exemple #13
0
 /// <inheritdoc/>
 public IEnumDeclaration CreateEnumDeclaration(
     string nameSpace,
     IReadOnlyList <string> usingDirectives,
     EnumDeclarationSyntax node,
     string location)
 {
     return(new EnumDeclaration(
                nameSpace,
                node.Identifier.Text,
                new ParserSyntaxNodeProvider <EnumDeclarationSyntax>(node),
                usingDirectives,
                location));
 }
        public override void VisitEnumDeclaration(EnumDeclarationSyntax node)
        {
            var currentNameSpace       = this.nameSpace.Peek();
            var currentUsingDirectives = this.usingDirectives.Peek();

            var enumDeclaration = this.declarationFactory.CreateEnumDeclaration(
                currentNameSpace,
                currentUsingDirectives,
                node,
                this.location);

            this.declarations.Add(enumDeclaration);
        }
Exemple #15
0
        private EnumDeclarationSyntax HandleAccessibility(EnumDeclarationSyntax node)
        {
            var newNode = node;

            var visibility = new Visibility(this.EnumInfo).Token;

            if (visibility != SyntaxKind.None)
            {
                newNode = newNode.AddModifiers(SyntaxFactory.Token(visibility));
            }

            return(newNode);
        }
Exemple #16
0
        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <param name="node">対象Node</param>
        /// <param name="semanticModel">対象ソースのsemanticModel</param>
        /// <param name="parent">親IAnalyzeItem</param>
        /// <param name="container">イベントコンテナ</param>
        public ItemEnum(EnumDeclarationSyntax node, SemanticModel semanticModel, IAnalyzeItem parent, EventContainer container) : base(parent, node, semanticModel, container)
        {
            ItemType = ItemTypes.Enum;

            // アイテムと初期値を取得
            foreach (var member in node.Members)
            {
                var declaredSymbol = semanticModel.GetDeclaredSymbol(member) as IFieldSymbol;
                var name           = declaredSymbol.Name;
                var value          = declaredSymbol.ConstantValue;
                Items.Add(name, value?.ToString());
            }
        }
        private static Task <Document> RefactorAsync(
            Document document,
            EnumDeclarationSyntax enumDeclaration,
            INamedTypeSymbol enumSymbol,
            object value,
            CancellationToken cancellationToken)
        {
            EnumMemberDeclarationSyntax newEnumMember = CreateEnumMember(enumSymbol, DefaultNames.EnumMember, value);

            EnumDeclarationSyntax newNode = enumDeclaration.AddMembers(newEnumMember);

            return(document.ReplaceNodeAsync(enumDeclaration, newNode, cancellationToken));
        }
        static List <CGFDocument> ProcessDocuments(CGFParserReporter reporter, List <Microsoft.CodeAnalysis.Document> documents, Microsoft.CodeAnalysis.Project project)
        {
            using (reporter.CreateContextScope(CGFParserReporterContext.Type.Project, project.FilePath))
            {
                List <CGFDocument> documentsToProcess = new List <CGFDocument>();
                foreach (Microsoft.CodeAnalysis.Document document in documents)
                {
                    using (reporter.CreateContextScope(CGFParserReporterContext.Type.File, document.FilePath))
                    {
                        List <CGFTypeSymbol> typesToProcess = new List <CGFTypeSymbol>();

                        Microsoft.CodeAnalysis.SemanticModel semanticModel = document.GetSemanticModelAsync().Result;

                        Microsoft.CodeAnalysis.SyntaxTree syntaxTree = document.GetSyntaxTreeAsync().Result;
                        IEnumerable <Microsoft.CodeAnalysis.SyntaxNode> syntaxNodes = syntaxTree.GetRoot().DescendantNodes().Where(n => (n as ClassDeclarationSyntax) != null || (n as EnumDeclarationSyntax) != null);
                        foreach (Microsoft.CodeAnalysis.SyntaxNode node in syntaxNodes)
                        {
                            ClassDeclarationSyntax classSyntax = node as ClassDeclarationSyntax;
                            if (classSyntax != null)
                            {
                                Microsoft.CodeAnalysis.INamedTypeSymbol typeSymbol = semanticModel.GetDeclaredSymbol(classSyntax);
                                using (reporter.CreateContextScope(CGFParserReporterContext.Type.Type, typeSymbol.Name))
                                {
                                    CGFTypeSymbol cgfTypeSymbol = CGFTypeSymbol.Parse(reporter, typeSymbol);
                                    typesToProcess.Add(cgfTypeSymbol);
                                }
                            }
                            else
                            {
                                EnumDeclarationSyntax enumSyntax = node as EnumDeclarationSyntax;
                                Microsoft.CodeAnalysis.INamedTypeSymbol typeSymbol = semanticModel.GetDeclaredSymbol(enumSyntax);

                                using (reporter.CreateContextScope(CGFParserReporterContext.Type.Type, typeSymbol.Name))
                                {
                                    CGFTypeSymbol cgfTypeSymbol = CGFTypeSymbol.Parse(reporter, typeSymbol);
                                    typesToProcess.Add(cgfTypeSymbol);
                                }
                            }
                        }

                        if (typesToProcess.Count > 0)
                        {
                            CGFDocument cgfDocument = CGFDocument.Parse(reporter, document, typesToProcess);
                            documentsToProcess.Add(cgfDocument);
                        }
                    }
                }

                return(documentsToProcess);
            }
        }
Exemple #19
0
        public static NetEnum GetNetEnum(EnumDeclarationSyntax enumDeclaration)
        {
            var name = enumDeclaration.Identifier.ToString();

            var a = new NetEnum
            {
                Attributes = GetAttributeList(enumDeclaration.AttributeLists),
                IsPublic   = IsPublic(enumDeclaration.Modifiers),
                Name       = name,
                Enums      = GetNetEnumValues(enumDeclaration.Members)
            };

            return(a);
        }
Exemple #20
0
 private static void __Execute(atom.Trace context, int level, EnumDeclarationSyntax data, string file, bool isShowPrivate)
 {
     if (__IsEnabled(data, isShowPrivate))
     {
         context.
         SetComment(__GetType(data, "enum"), HINT.DATA_TYPE).
         SetUrl(file, __GetLine(data.GetLocation()), __GetPosition(data.GetLocation())).
         Send(NAME.SOURCE.PREVIEW, NAME.TYPE.CLASS, level, __GetName(data, true));
         foreach (var a_Context in data.Members.OfType <EnumMemberDeclarationSyntax>())
         {
             __Execute(context, level + 1, a_Context, file, isShowPrivate);
         }
     }
 }
Exemple #21
0
        public override void VisitEnumDeclaration(EnumDeclarationSyntax node)
        {
            string modifier = GetVisibilityModifier(node.Modifiers);

            modifier = "export";
            Emit(string.Join(" ", modifier, "class", node.Identifier.Text));

            str_lastEqualVal = "=0";
            counter          = 0;
            using (IndentedBracketScope())
            {
                base.VisitEnumDeclaration(node);
            }
        }
 public virtual void VisitEnumDeclaration(EnumDeclarationSyntax node)
 {
     this.BeginDeclaration(typeof(Symbols.Enum), node);
     try
     {
         this.Visit(node.AnnotationList);
         this.Visit(node.Name);
         this.Visit(node.EnumBody);
     }
     finally
     {
         this.EndDeclaration();
     }
 }
        public CSharpSyntaxNode Convert(EnumDeclaration node)
        {
            EnumDeclarationSyntax csEnum = SyntaxFactory.EnumDeclaration(node.Name.Text);

            csEnum = csEnum.AddModifiers(node.Modifiers.ToCsNodes <SyntaxToken>());
            csEnum = csEnum.AddMembers(node.Members.ToCsNodes <EnumMemberDeclarationSyntax>());

            if (node.JsDoc.Count > 0)
            {
                csEnum = csEnum.WithLeadingTrivia(SyntaxFactory.Trivia(node.JsDoc[0].ToCsNode <DocumentationCommentTriviaSyntax>()));
            }

            return(csEnum);
        }
Exemple #24
0
        void ExportEnum(EnumDeclarationSyntax c)
        {
            string name      = "";
            string nameSpace = "";

            NamespaceDeclarationSyntax namespaceDeclarationSyntax = c.Parent as NamespaceDeclarationSyntax;

            if (namespaceDeclarationSyntax != null)
            {
                nameSpace = namespaceDeclarationSyntax.Name.ToString();
            }
            else
            {
                nameSpace = ModelData.GloableNamespaceName;
            }
            name = c.Identifier.Text;

            if (step == ECompilerStet.ScanType)
            {
                type_list.Add(new ULTypeInfo());
                types.Push(type_list[type_list.Count - 1]);

                currentType.Namespace = nameSpace;
                currentType.Name      = name;
                currentType.IsEnum    = true;
                ModelData.UpdateType(currentType);
            }
            else
            {
                types.Push(ModelData.FindTypeByFullName(nameSpace + "." + name));
            }

            if (step == ECompilerStet.ScanMember)
            {
                //导出所有变量
                var virableNodes = c.ChildNodes().OfType <EnumMemberDeclarationSyntax>();
                foreach (var v in virableNodes)
                {
                    var dB_Member = new ULMemberInfo();
                    dB_Member.Name            = v.Identifier.Text;
                    dB_Member.IsStatic        = false;
                    dB_Member.DeclareTypeName = currentType.FullName;
                    dB_Member.MemberType      = ULMemberInfo.EMemberType.Enum;

                    currentType.Members.Add(dB_Member);
                }
            }

            types.Pop();
        }
Exemple #25
0
        public static Task <Document> RefactorAsync(
            Document document,
            BaseTypeSyntax baseType,
            CancellationToken cancellationToken)
        {
            var baseList        = (BaseListSyntax)baseType.Parent;
            var enumDeclaration = (EnumDeclarationSyntax)baseList.Parent;

            EnumDeclarationSyntax newEnumDeclaration = enumDeclaration
                                                       .RemoveNode(GetNodeToRemove(baseType, baseList), SyntaxRemoveOptions.KeepExteriorTrivia)
                                                       .WithFormatterAnnotation();

            return(document.ReplaceNodeAsync(enumDeclaration, newEnumDeclaration, cancellationToken));
        }
Exemple #26
0
        public override void VisitEnumDeclaration(EnumDeclarationSyntax node)
        {
            var item = new EnumInfo
            {
                Identifier = node.Identifier.ToString(),
                Items      = node.Members.Select(val => new EnumInfoItem
                {
                    Name  = val.Identifier.ValueText,
                    Value = int.Parse(val.EqualsValue.Value.ToString())
                })
            };

            Enums.Add(item);
        }
        public static EnumDeclarationSyntax ToBaseType(this EnumDeclarationSyntax syntax, EnumBaseType baseType)
        {
            if (baseType == EnumBaseType.None)
            {
                return(syntax.WithBaseList(null));
            }

            SyntaxKind           keyword    = enumBaseTypeMap[baseType];
            PredefinedTypeSyntax typeSyntax = SyntaxFactory.PredefinedType(SyntaxFactory.Token(keyword));
            SeparatedSyntaxList <BaseTypeSyntax> baseTypes =
                SyntaxFactory.SingletonSeparatedList <BaseTypeSyntax>(SyntaxFactory.SimpleBaseType(typeSyntax));

            return(syntax.WithBaseList(SyntaxFactory.BaseList(baseTypes)));
        }
        /// <summary>
        /// Adds documentation header async.
        /// </summary>
        /// <param name="document">The document.</param>
        /// <param name="root">The root.</param>
        /// <param name="declarationSyntax">The declaration syntax.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns>A Document.</returns>
        private async Task <Document> AddDocumentationHeaderAsync(Document document, SyntaxNode root, EnumDeclarationSyntax declarationSyntax, CancellationToken cancellationToken)
        {
            SyntaxTriviaList leadingTrivia = declarationSyntax.GetLeadingTrivia();

            string comment = CommentHelper.CreateEnumComment(declarationSyntax.Identifier.ValueText);
            DocumentationCommentTriviaSyntax commentTrivia = await Task.Run(() => DocumentationHeaderHelper.CreateOnlySummaryDocumentationCommentTrivia(comment), cancellationToken);

            SyntaxTriviaList      newLeadingTrivia = leadingTrivia.Insert(leadingTrivia.Count - 1, SyntaxFactory.Trivia(commentTrivia));
            EnumDeclarationSyntax newDeclaration   = declarationSyntax.WithLeadingTrivia(newLeadingTrivia);

            SyntaxNode newRoot = root.ReplaceNode(declarationSyntax, newDeclaration);

            return(document.WithSyntaxRoot(newRoot));
        }
Exemple #29
0
        /// <summary>
        /// Add the attribute list to the <see cref="EnumDeclarationSyntax"/>.
        /// </summary>
        /// <param name="member">The <see cref="EnumDeclarationSyntax"/>.</param>
        /// <param name="attributeList">The <see cref="AttributeListSyntax"/>.</param>
        /// <returns>The <paramref name="member"/> with <paramref name="attributeList"/> added.</returns>
        public static EnumDeclarationSyntax WithAttributeList(this EnumDeclarationSyntax member, AttributeListSyntax attributeList)
        {
            if (member is null)
            {
                throw new System.ArgumentNullException(nameof(member));
            }

            if (attributeList is null)
            {
                throw new System.ArgumentNullException(nameof(attributeList));
            }

            return(member.WithAttributeLists(member.AttributeLists.Add(attributeList)));
        }
Exemple #30
0
        /// <summary>
        /// Add <paramref name="text"/> as attribute list to <paramref name="member"/>.
        /// </summary>
        /// <param name="member">The <see cref="EnumDeclarationSyntax"/>.</param>
        /// <param name="text">
        /// The attribute text including start and end [].
        /// </param>
        /// <param name="adjustLeadingWhitespace">If true leading whitespace is adjusted to match <paramref name="member"/>.</param>
        /// <returns>The <paramref name="member"/> with docs in leading trivia.</returns>
        public static EnumDeclarationSyntax WithAttributeListText(this EnumDeclarationSyntax member, string text, bool adjustLeadingWhitespace = true)
        {
            if (member is null)
            {
                throw new System.ArgumentNullException(nameof(member));
            }

            if (text is null)
            {
                throw new System.ArgumentNullException(nameof(text));
            }

            return(member.WithAttributeList(Parse.AttributeList(text, adjustLeadingWhitespace ? member.LeadingWhitespace() : null)));
        }
Exemple #31
0
        public override void VisitEnumDeclaration(EnumDeclarationSyntax node)
        {
            VisitAttributeLists(node.AttributeLists);

            if (IsAnyNodeConst)
            {
                foreach (EnumMemberDeclarationSyntax member in node.Members)
                {
                    Visit(member);
                }
            }

            //base.VisitEnumDeclaration(node);
        }
Exemple #32
0
        public override void VisitEnumDeclaration(EnumDeclarationSyntax node)
        {
            var name = node.Identifier.ToString();

            if (node.Parent is ClassDeclarationSyntax)
            {
                base.VisitEnumDeclaration(node);
                return;
            }
            output.AppendLine("enum " + name + "{");
            output.IncreaseIndent();
            base.VisitEnumDeclaration(node);
            output.DecreaseIndent();
            output.AppendLine("}");
        }
Exemple #33
0
        /// <summary>
        /// Processes an enum declaration. Also detects regions inside the element.
        /// </summary>
        public static void ProcessNode(EnumDeclarationSyntax node, ItemCollection itemCollection, int?index = null)
        {
            var item = new TreeViewItem
            {
                Header = new TreeElement(
                    node.Identifier.ToString(),
                    node.Span,
                    TreeImages.GetImage(ElementType.Enum, GetModifiers(node))),
                IsExpanded = true
            };

            HandleChildrenWithRegions(node, item.Items);

            AddOrInsert(itemCollection, item, index);
        }
 public EnumProcessor(EnumDeclarationSyntax syntax, Compilation compilation)
 {
     (_syntax, _compilation) = (syntax, compilation);
     NamedTypeMap            = new List <SpecialType>
     {
         SpecialType.System_Byte,
         SpecialType.System_SByte,
         SpecialType.System_Int16,
         SpecialType.System_UInt16,
         SpecialType.System_Int32,
         SpecialType.System_UInt32,
         SpecialType.System_Int64,
         SpecialType.System_UInt64
     }.ToDictionary(_compilation.GetSpecialType);
 }
        public static EnumMemberDeclarationSyntax GenerateEnumMemberDeclaration(
            IFieldSymbol enumMember,
            EnumDeclarationSyntax destinationOpt,
            CodeGenerationOptions options)
        {
            var reusableSyntax = GetReuseableSyntaxNodeForSymbol<EnumMemberDeclarationSyntax>(enumMember, options);
            if (reusableSyntax != null)
            {
                return reusableSyntax;
            }

            var value = CreateEnumMemberValue(destinationOpt, enumMember);
            var member = SyntaxFactory.EnumMemberDeclaration(enumMember.Name.ToIdentifierToken())
                .WithEqualsValue(value == null ? null : SyntaxFactory.EqualsValueClause(value: value));

            return AddCleanupAnnotationsTo(
                ConditionallyAddDocumentationCommentTo(member, enumMember, options));
        }
            public override void VisitEnumDeclaration(EnumDeclarationSyntax node)
            {
                Debug.Assert(currentScope == null);
                DeclarationScope saveStaticInitScope = staticInitScope;
                DeclarationScope saveInstanceInitScope = instanceInitScope;

                staticInitScope = null;
                instanceInitScope = null;

                base.VisitEnumDeclaration(node);

                staticInitScope = saveStaticInitScope;
                instanceInitScope = saveInstanceInitScope;
                Debug.Assert(currentScope == null);
            }
        public override void VisitEnumDeclaration(EnumDeclarationSyntax node)
        {
            LS2IL.TypeExtraInfo.ClassMetadataGenerator wasClass = CurrentClass;

            NamedTypeSymbol s = Model.GetDeclaredSymbol(node);

            TypeExtraInfo tei = Chunk.AddTypeExtraInfo(s, Model);
            CurrentClass = tei.MetadataGenerator;

            foreach (MemberDeclarationSyntax mds in node.Members)
            {
                CurrentClass.AddMember(mds);
            }

            base.VisitEnumDeclaration(node);
            CurrentClass = wasClass;
        }
 private SyntaxNode RegisterEnumDeclarationCodeFix(SyntaxNode syntaxRoot, EnumDeclarationSyntax node, IndentationOptions indentationOptions)
 {
     return this.ReformatElement(syntaxRoot, node, node.OpenBraceToken, node.CloseBraceToken, indentationOptions);
 }
            private void ClassifyUpdate(EnumDeclarationSyntax oldNode, EnumDeclarationSyntax newNode)
            {
                if (!SyntaxFactory.AreEquivalent(oldNode.Identifier, newNode.Identifier))
                {
                    ReportError(RudeEditKind.Renamed);
                    return;
                }

                if (!SyntaxFactory.AreEquivalent(oldNode.Modifiers, newNode.Modifiers))
                {
                    ReportError(RudeEditKind.ModifiersUpdate);
                    return;
                }

                if (!SyntaxFactory.AreEquivalent(oldNode.BaseList, newNode.BaseList))
                {
                    ReportError(RudeEditKind.EnumUnderlyingTypeUpdate);
                    return;
                }

                // The list of members has been updated (separators added).
                // We report a Rude Edit for each updated member.
            }
Exemple #40
0
 /// <summary>
 /// Initializes a new instance of the <see cref="EnumDeclaration"/> class.
 /// </summary>
 /// <param name="enumDeclarationNode"></param>
 public EnumDeclaration(EnumDeclarationSyntax enumDeclarationNode)
     : this(enumDeclarationNode, null)
 {
 }
 public virtual void VisitEnumDeclaration(EnumDeclarationSyntax node)
 {
     DefaultVisit(node);
 }
Exemple #42
0
		public override SyntaxNode VisitEnumDeclaration(EnumDeclarationSyntax node)
		{
			return VisitMemberDeclaration(node, base.VisitEnumDeclaration(node));
		}
        private static ExpressionSyntax CreateEnumMemberValue(EnumDeclarationSyntax destinationOpt, IFieldSymbol enumMember)
        {
            var valueOpt = enumMember.ConstantValue is IConvertible
                ? (long?)IntegerUtilities.ToInt64(enumMember.ConstantValue)
                : null;
            if (valueOpt == null)
            {
                return null;
            }

            var value = valueOpt.Value;
            if (destinationOpt != null)
            {
                if (destinationOpt.Members.Count == 0)
                {
                    if (value == 0)
                    {
                        return null;
                    }
                }
                else
                {
                    // Don't generate an initializer if no other members have them, and our value
                    // would be correctly inferred from our position.
                    if (destinationOpt.Members.Count == value &&
                        destinationOpt.Members.All(m => m.EqualsValue == null))
                    {
                        return null;
                    }

                    // Existing members, try to stay consistent with their style.
                    var lastMember = destinationOpt.Members.LastOrDefault(m => m.EqualsValue != null);
                    if (lastMember != null)
                    {
                        var lastExpression = lastMember.EqualsValue.Value;
                        if (lastExpression.CSharpKind() == SyntaxKind.LeftShiftExpression &&
                            IntegerUtilities.HasOneBitSet(value))
                        {
                            var binaryExpression = (BinaryExpressionSyntax)lastExpression;
                            if (binaryExpression.Left.CSharpKind() == SyntaxKind.NumericLiteralExpression)
                            {
                                var numericLiteral = (LiteralExpressionSyntax)binaryExpression.Left;
                                if (numericLiteral.Token.ValueText == "1")
                                {
                                    // The user is left shifting ones, stick with that pattern
                                    var shiftValue = IntegerUtilities.LogBase2(value);
                                    return SyntaxFactory.BinaryExpression(
                                        SyntaxKind.LeftShiftExpression,
                                        SyntaxFactory.LiteralExpression(SyntaxKind.NumericLiteralExpression, SyntaxFactory.Literal("1", 1)),
                                        SyntaxFactory.LiteralExpression(SyntaxKind.NumericLiteralExpression, SyntaxFactory.Literal(shiftValue.ToString(), shiftValue)));
                                }
                            }
                        }
                        else if (lastExpression.CSharpKind() == SyntaxKind.NumericLiteralExpression)
                        {
                            var numericLiteral = (LiteralExpressionSyntax)lastExpression;
                            var numericToken = numericLiteral.Token;
                            var numericText = numericToken.ToString();

                            if (numericText.StartsWith("0x") || numericText.StartsWith("0X"))
                            {
                                // Hex
                                return SyntaxFactory.LiteralExpression(SyntaxKind.NumericLiteralExpression,
                                    SyntaxFactory.Literal(numericText.Substring(0, 2) + value.ToString("X"), value));
                            }
                        }
                    }
                }
            }

            var namedType = enumMember.Type as INamedTypeSymbol;
            var underlyingType = namedType != null ? namedType.EnumUnderlyingType : null;

            return ExpressionGenerator.GenerateNonEnumValueExpression(
                underlyingType,
                enumMember.ConstantValue,
                canUseFieldReference: true);
        }
Exemple #44
0
 public override void VisitEnumDeclaration(EnumDeclarationSyntax node)
 {
     base.VisitEnumDeclaration(node);
 }
 public override void VisitEnumDeclaration(EnumDeclarationSyntax node)
 {
     CheckXmlDocForErrors(node, semanticModel.GetDeclaredSymbol(node));
     base.VisitEnumDeclaration(node);
 }
Exemple #46
0
        public static EnumDeclarationSyntax EnumDeclaration(string identifier = null)
        {
            var result = new EnumDeclarationSyntax();

            result.Identifier = identifier;

            return result;
        }
 public override void VisitEnumDeclaration(EnumDeclarationSyntax node)
 {
     var symbol = model.GetDeclaredSymbol(node);
     AddDeclaredItem(symbol, node);
     base.VisitEnumDeclaration(node);
 }
Exemple #48
0
        public static EnumDeclarationSyntax EnumDeclaration(IEnumerable<AttributeListSyntax> attributeLists = null, Modifiers modifiers = default(Modifiers), string identifier = null, BaseListSyntax baseList = null, IEnumerable<EnumMemberDeclarationSyntax> members = null)
        {
            var result = new EnumDeclarationSyntax();

            if (attributeLists != null)
                result.AttributeLists.AddRange(attributeLists);
            result.Modifiers = modifiers;
            result.Identifier = identifier;
            result.BaseList = baseList;
            if (members != null)
                result.Members.AddRange(members);

            return result;
        }
        public override SyntaxNode VisitEnumDeclaration(EnumDeclarationSyntax node)
        {
            if (!_template.SupportEnum)
            {
                this.AppendCompileIssue(node, IssueType.Error, IssueId.EnumNotSupport, _template.Name);
            }
            else
            {
                var info = _semanticModel.GetDeclaredSymbol(node);
                string enumName = info.GetTypeSymbolName();

                var enumTemplate = _template.CreateEnumTemplate();
                enumTemplate.Assign("enum", enumName);
                _output.Write(node, enumTemplate.GetBeginString());

                _output.IncreaseIndent();
                var count = 0;
                foreach (var member in node.Members)
                {
                    Visit(member);
                    count++;
                    if (count != node.Members.Count)
                    {
                        _output.TrivialWriteLine(',');
                    }
                }
                _output.DecreaseIndent();

                _output.TrivialWriteLine(enumTemplate.GetEndString());

                if (node.BaseList != null)
                {
                    this.AppendCompileIssue(node, IssueType.Error, IssueId.EnumInheritNotSupport);
                }
            }
            return node;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="node"></param>
        public override void VisitEnumDeclaration(EnumDeclarationSyntax node)
        {
            var enumWalker = EnumDefinitionASTWalker.Create(node, this.CreateWalkingContext(), this.semanticModel);
            var translationUnit = enumWalker.Walk();
            this.module.AddClass(translationUnit);

            this.InvokeEnumDeclarationVisited(this, new WalkerEventArgs());
        }
        private static EnumDeclarationSyntax AddLineFeedsToCommas(EnumDeclarationSyntax enumDeclarationSyntax)
        {
            var none = new SyntaxToken();
            var trailingTriviaList = SyntaxTriviaList.Create(SyntaxFactory.ElasticCarriageReturnLineFeed);

            Func<EnumDeclarationSyntax, SyntaxToken> next = enumSyntax => enumSyntax.ChildNodesAndTokens()
                .Where(nodeOrToken => nodeOrToken.IsToken)
                .Select(nodeOrToken => nodeOrToken.AsToken())
                .FirstOrDefault(
                    token =>
                        token.Value.Equals(",") &&
                        (!token.HasTrailingTrivia || !token.TrailingTrivia.Any(SyntaxKind.EndOfLineTrivia)));

            SyntaxToken current;
            while ((current = next(enumDeclarationSyntax)) != none)
            {
                enumDeclarationSyntax = enumDeclarationSyntax.ReplaceToken(current,
                    SyntaxFactory.Identifier(SyntaxTriviaList.Empty, ",", trailingTriviaList)
                    );
            }

            return enumDeclarationSyntax;
        }
 private EnumNode GetEnumNode(EnumDeclarationSyntax EachEnum)
 {
     EnumNode enumnode = new EnumNode();
     enumnode.EnumName = EachEnum.Identifier.ToString();
     foreach (var member in EachEnum.Members)
     {
         enumnode.AddMember(member.Identifier.ToString());
     }
     return enumnode;
 }
        private static SyntaxNode HandleEnumDeclaration(EnumDeclarationSyntax node)
        {
            SyntaxToken triviaToken = node.EnumKeyword;
            if (triviaToken.IsMissing)
            {
                return null;
            }

            SyntaxKind defaultVisibility = IsNestedType(node) ? SyntaxKind.PrivateKeyword : SyntaxKind.InternalKeyword;
            SyntaxTokenList modifiers = DeclarationModifiersHelper.AddModifier(node.Modifiers, ref triviaToken, defaultVisibility);
            return node
                .WithEnumKeyword(triviaToken)
                .WithModifiers(modifiers)
                .WithoutFormatting();
        }
 /// <summary>
 /// Traverse AST node that represents enumeration declaration
 /// </summary>
 /// <param name="node">AST node.</param>
 public override void VisitEnumDeclaration(EnumDeclarationSyntax node)
 {
     try
     {
         if (!node.Identifier.Span.IsEmpty)
         {
             var symbol = _sm.GetDeclaredSymbol(node);
             if (!_defined.Contains(symbol))
             {
                 _defined.Add(symbol);
                 var def = Def.For(symbol: symbol, type: "enum", name: symbol.Name).At(_path, node.Identifier.Span);
                 if (symbol.IsExported())
                 {
                     def.Exported = true;
                 }
                 AddDef(def, DocProcessor.ForClass(symbol));
             }
         }
         base.VisitEnumDeclaration(node);
     }
     catch (Exception e)
     {
     }
 }
Exemple #55
0
 /// <summary>
 /// Initializes a new instance of the <see cref="EnumDeclaration"/> class.
 /// </summary>
 /// <param name="enumDeclarationNode"></param>
 /// <param name="semanticModel"></param>
 public EnumDeclaration(EnumDeclarationSyntax enumDeclarationNode, SemanticModel semanticModel)
     : base(enumDeclarationNode, semanticModel)
 {
 }
        public static string EnumDeclaration(EnumDeclarationSyntax declaration)
        {
            var parsedAttributes = ParseAttributes(declaration.AttributeLists);

            var output = parsedAttributes.Item1;
            var nameToUse = parsedAttributes.Item2;

            output += "enum " + (nameToUse ?? declaration.Identifier.Text);

            //Get the value of the enum
            foreach (var decl in declaration.ChildNodes().OfType<EnumMemberDeclarationSyntax>().Where(decl => decl.EqualsValue != null).Select(decl => decl.EqualsValue.Value))
            {
                if (decl.IsKind(SyntaxKind.StringLiteralExpression))
                {
                    output += ": String";
                }
                else if (decl.IsKind(SyntaxKind.CharacterLiteralExpression))
                {
                    output += ": Character";
                }
                else if (decl.IsKind(SyntaxKind.NumericLiteralExpression))
                {
                    output += ": Int";
                }
                else
                {
                    continue;
                }
                break;
            }

            return output + " {" + NewLine +
                             string.Join("," + NewLine, declaration.Members.Select(SyntaxNode)) + NewLine +
                             "}" + NewLine + NewLine;
        }
 public EnumDeclarationTranslation(EnumDeclarationSyntax syntax, SyntaxTranslation parent) : base(syntax, parent)
 {
     Members = syntax.Members.Get<EnumMemberDeclarationSyntax, EnumMemberDeclarationTranslation>(this);
     Members.IsNewLine = true;
 }
        public void VisitEnumDeclaration(EnumDeclarationSyntax node)
        {
            VisitBaseTypeDeclaration(node);

            _writer.PushBraceFormatting(_writer.Configuration.BracesLayout.TypeAndNamespaceDeclaration);

            if (node.Members.Count == 0)
            {
                _writer.EmptyBlock(_writer.Configuration.BlankLines.InsideType);
            }
            else
            {
                _writer.BeginBlock();

                _writer.WriteLine(_writer.Configuration.BlankLines.InsideType);

                for (int i = 0; i < node.Members.Count; i++)
                {
                    if (i > 0)
                        _writer.WriteLine(_writer.Configuration.BlankLines.AroundField);

                    node.Members[i].Accept(this);
                }

                _writer.WriteLine(_writer.Configuration.BlankLines.InsideType);

                _writer.EndBlock();
            }

            _writer.PopBraceFormatting();

            WriteTrailingTrivia(node);
        }
			public override void VisitEnumDeclaration (EnumDeclarationSyntax node)
			{
				VisitBody (node);
			}
Exemple #60
0
 public override SyntaxNode VisitEnumDeclaration(EnumDeclarationSyntax node)
 {
     if (node == null)
         return null;
     var symbol = m_model.GetDeclaredSymbol(node);
     node = (EnumDeclarationSyntax)base.VisitEnumDeclaration(node);
     if (!IsPrivateOrInternal(symbol.DeclaredAccessibility))
         node = (EnumDeclarationSyntax)ApplyDocComment(node, symbol.GetDocumentationCommentId());
     return node;
 }