예제 #1
0
파일: CSToUL.cs 프로젝트: xiongfang/UL
        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();
        }
        public static string EnumDeclaration(EnumDeclarationSyntax node)
        {
            //TODO: parse EnumMemberDeclaration separately
            var parsedAttributes = ParseAttributes(node.AttributeLists);

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

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

            //Get the value of the enum
            foreach (var decl in node.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;
            }

            output += " {" + NewLine;

            output += string.Join("," + NewLine, node.Members.Select(SyntaxNode)) + NewLine + "}" + NewLine + NewLine;
            return(output);
        }
예제 #3
0
        public override void VisitEnumDeclaration(EnumDeclarationSyntax node)
        {
            var defineName = node.ChildTokens().FirstOrDefault(x => x.Kind() == SyntaxKind.IdentifierToken).ToString();

            var enumMembers = node.ChildNodes().OfType <EnumMemberDeclarationSyntax>().Select(x => x.Identifier.Text);

            var startLength     = node.Span.Start;
            var endLength       = node.Span.End;
            var parentNamespace = GetNamespace(DefineKinds.Enum, startLength, endLength);

            UserDefinitions.Add(new UserDefinition
            {
                DefineKinds    = DefineKinds.Enum,
                Namespace      = parentNamespace,
                DefineName     = defineName,
                DefineFullName = $"{parentNamespace}.{defineName}",
                EnumMembers    = enumMembers.ToList(),
                SourceFile     = SourceFile,
                StartLength    = startLength,
                EndLength      = endLength,
            });;

            base.VisitEnumDeclaration(node);
        }
예제 #4
0
        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;
        }
예제 #5
0
        /// <summary>
        /// Still needs work!
        /// </summary>
        /// <returns></returns>
        private Model.Enum TraverseEnums(EnumDeclarationSyntax eds)
        {
            Model.Enum retEnu = new Model.Enum();
            //public List<string> EnumItems { get; set; }
            //public string Name { get; set; }
            //public Type Type { get; set; }

            if (eds.HasLeadingTrivia)
            {
                SetOuterComments(retEnu, eds.GetLeadingTrivia().ToFullString());
            }

            if (eds.HasTrailingTrivia)
            {
                SetInnerComments(retEnu, eds.GetTrailingTrivia().ToFullString());
            }

            var types = from aType in eds.ChildNodes().OfType<TypeDeclarationSyntax>() select aType;
            foreach (TypeDeclarationSyntax tds in types)
            {
                //TODO put breakpoint here
                //to find out how to get types
            }
            foreach (SyntaxToken st in eds.Modifiers)
            {
                string modifier = System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(st.ValueText);
                retEnu.Encapsulation.Add((Encapsulation)System.Enum.Parse(typeof(Encapsulation), modifier));
            }

            var enumItems = from aEnumItem in eds.ChildNodes().OfType<EnumMemberDeclarationSyntax>() select aEnumItem;
            foreach (EnumMemberDeclarationSyntax emds in enumItems)
            {
                //TODO put breakpoint here
                //to find out how to get enumitems
            }

            return retEnu;
        }