public override SyntaxNode VisitStructureBlock(StructureBlockSyntax originalNode)
            {
                var node  = (StructureBlockSyntax)base.VisitStructureBlock(originalNode);
                var begin = (StructureStatementSyntax)EnsureVisibility(node.StructureStatement, node.StructureStatement.Modifiers, (x, l) => x.WithModifiers(l), () => GetTypeDefaultVisibility(originalNode));

                return(node.WithStructureStatement(begin));
            }
 public override void VisitStructureBlock(StructureBlockSyntax node)
 {
     if (TryAddPublicApi(node.StructureStatement))
     {
         base.VisitStructureBlock(node);
     }
 }
Пример #3
0
        internal static CodeStructureItem MapItem(StructureBlockSyntax node)
        {
            var item = CreateItem <StructNode>(node);

            item.AccessModifier = node.StructureStatement.Modifiers.GetAccessModifier();
            item.Name           = node.StructureStatement.Identifier.Text;

            return(item);
        }
Пример #4
0
 public override void VisitStructureBlock(StructureBlockSyntax node)
 {
     AddBlockData(node);
     base.VisitStructureBlock(node);
 }
 public override void VisitStructureBlock(StructureBlockSyntax node)
 {
 }
Пример #6
0
        public override void VisitStructureBlock(StructureBlockSyntax node)
        {
            var statementNode = node.ChildNodes().OfType <StructureStatementSyntax>().FirstOrDefault();
            var isPartial     = statementNode.ChildTokens().Any(x => x.Kind() == SyntaxKind.PartialKeyword);
            var defineName    = statementNode.ChildTokens().FirstOrDefault(x => x.Kind() == SyntaxKind.IdentifierToken).ToString();

            // ジェネリック型を定義している場合
            if (statementNode.ChildNodes().OfType <TypeParameterListSyntax>().Any())
            {
                var listNode     = statementNode.ChildNodes().OfType <TypeParameterListSyntax>().FirstOrDefault();
                var genericTypes = listNode
                                   .ChildNodes()
                                   .OfType <TypeParameterSyntax>()
                                   .Select(x => x.ChildTokens().FirstOrDefault(y => y.Kind() == SyntaxKind.IdentifierToken).ToString());

                defineName = $"{defineName}<{string.Join(", ", genericTypes)}>";
            }

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

            var baseTypeInfos = new List <BaseTypeInfo>();

            // 継承元クラス、またはインターフェースがある場合
            var hasInherits   = node.ChildNodes().OfType <InheritsStatementSyntax>().Any();
            var hasImplements = node.ChildNodes().OfType <ImplementsStatementSyntax>().Any();

            if (hasInherits || hasImplements)
            {
                var baseTypes = new List <SyntaxNode>();

                if (hasInherits)
                {
                    var inheritsNode = node.ChildNodes().OfType <InheritsStatementSyntax>().FirstOrDefault();
                    var childNodes   = inheritsNode.ChildNodes();

                    // Struct の場合、多重継承はできない仕様だが、将来仕様変更されるか?されないと思う
                    foreach (var childNode in childNodes)
                    {
                        baseTypes.Add(childNode);
                    }
                }

                if (hasImplements)
                {
                    var implementsNode = node.ChildNodes().OfType <ImplementsStatementSyntax>().FirstOrDefault();
                    var childNodes     = implementsNode.ChildNodes();

                    foreach (var childNode in childNodes)
                    {
                        baseTypes.Add(childNode);
                    }
                }

                baseTypeInfos = GetBaseTypeInfos(baseTypes, parentNamespace);
            }

            UserDefinitions.Add(new UserDefinition
            {
                DefineKinds    = DefineKinds.Struct,
                IsPartial      = isPartial,
                Namespace      = parentNamespace,
                DefineName     = defineName,
                DefineFullName = $"{parentNamespace}.{defineName}",
                BaseTypeInfos  = baseTypeInfos,
                SourceFile     = SourceFile,
                StartLength    = startLength,
                EndLength      = endLength,
            });

            base.VisitStructureBlock(node);
        }
Пример #7
0
 public override void VisitStructureBlock(StructureBlockSyntax node)
 {
     LogicalLineCount++;
     base.VisitStructureBlock(node);
 }
Пример #8
0
        public override void VisitStructureBlock(StructureBlockSyntax node)
        {
            if (structureNameRegEx.Match(node.StructureStatement.Identifier.Text).Success)
            {
                StringBuilder messageFields    = new StringBuilder();
                Boolean       displayStructure = AllFieldTypes;

                if (ShowFields)
                {
                    foreach (var field in node.DescendantNodes().OfType <FieldDeclarationSyntax>())
                    {
                        if (!fieldNameRegEx.Match(field.ToString()).Success)
                        {
                            continue;
                        }
                        Boolean addField = false;

                        var ac = field.ChildNodes().OfType <VariableDeclaratorSyntax>();

                        var ac2          = field.ChildNodes().OfType <VariableDeclaratorSyntax>().FirstOrDefault().AsClause;
                        var asClauseType = ac2.Type();
                        var ac4          = asClauseType.GetType() == typeof(Int32);
                        var ac5          = typeof(Int32);
                        var ac6          = ac5.ToString();

                        switch (asClauseType.ToString())
                        {
                        case "Boolean":
                            if (_configurationOptions.Boolean)
                            {
                                addField = true;
                            }
                            break;

                        case "Byte":
                            if (_configurationOptions.Byte)
                            {
                                addField = true;
                            }
                            break;

                        case "Date":
                            if (_configurationOptions.Date)
                            {
                                addField = true;
                            }
                            break;

                        case "DateTime":
                            if (_configurationOptions.DateTime)
                            {
                                addField = true;
                            }
                            break;

                        case "Int16":
                            if (_configurationOptions.Int16)
                            {
                                addField = true;
                            }
                            break;

                        case "Int32":
                            if (_configurationOptions.Int32)
                            {
                                addField = true;
                            }
                            break;

                        case "Int64":
                            if (_configurationOptions.Int64)
                            {
                                addField = true;
                            }
                            break;

                        case "Integer":
                            if (_configurationOptions.Integer)
                            {
                                addField = true;
                            }
                            break;

                        case "Long":
                            if (_configurationOptions.Long)
                            {
                                addField = true;
                            }
                            break;

                        case "Single":
                            if (_configurationOptions.Single)
                            {
                                addField = true;
                            }
                            break;

                        case "String":
                            if (_configurationOptions.String)
                            {
                                addField = true;
                            }
                            break;

                        default:
                            if (_configurationOptions.OtherTypes && !displayStructure)
                            {
                                addField = true;
                            }

                            break;
                        }


                        if (HasAttributes)
                        {
                            if (field.AttributeLists.Count > 0)
                            {
                                addField = true;
                            }
                        }

                        ////if (IsOtherType && ! displayField)
                        ////{
                        ////    displayField = true;
                        ////}

                        if (addField)
                        {
                            messageFields.AppendLine(string.Format("  {0}", field.ToString()));
                            displayStructure = true;
                        }
                    }
                }

                if (displayStructure)
                {
                    //string messageContext = "";

                    //if (_configurationOptions.ClassOrModuleName)
                    //{
                    //    messageContext = Helpers.VB.GetContainingContext(node, _configurationOptions);
                    //}

                    //if (_configurationOptions.MethodName)
                    //{
                    //    messageContext += string.Format(" Method:({0, -35})", Helpers.VB.GetContainingMethod(node));
                    //}

                    //Messages.AppendLine(String.Format("{0} {1}",
                    //    messageContext,
                    //    node.StructureStatement.ToString()));

                    ////Messages.AppendLine(node.StructureStatement.ToString());

                    RecordMatchAndContext(node, BlockType.None);

                    if (ShowFields)
                    {
                        Messages.AppendLine(messageFields.ToString());
                    }
                }
            }

            // Call base to visit children

            base.VisitStructureBlock(node);
        }
Пример #9
0
        private Struct TraverseStruct(StructureBlockSyntax sbs)
        {
            Struct retClass = new Struct();
            retClass.Name = sbs.Begin.Identifier.ValueText;
            //encapsulation

            foreach (SyntaxToken st in sbs.Begin.Modifiers)
            {
                string modifier = System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(st.ValueText);
                Encapsulation encap;
                Qualifiers qual;
                if (System.Enum.TryParse<Encapsulation>(modifier, out encap))
                {
                    retClass.Encapsulation.Add(encap);
                }
                else if (System.Enum.TryParse<Qualifiers>(modifier, out qual))
                {
                    retClass.Qualifiers.Add(qual);
                }
            }

            List<EnumBlockSyntax> enums = new List<EnumBlockSyntax>();
            List<StructureBlockSyntax> structs = new List<StructureBlockSyntax>();
            List<MethodBlockSyntax> methods = new List<MethodBlockSyntax>();
            List<FieldDeclarationSyntax> Fields = new List<FieldDeclarationSyntax>();
            List<PropertyBlockSyntax> properties = new List<PropertyBlockSyntax>();
            List<ConstructorBlockSyntax> constructors = new List<ConstructorBlockSyntax>();
            List<ModuleBlockSyntax> modules = new List<ModuleBlockSyntax>();
            List<ClassBlockSyntax> classes = new List<ClassBlockSyntax>();

            foreach (SyntaxNode sn in sbs.ChildNodes())
            {
                if (sn is EnumBlockSyntax)
                {
                    enums.Add(sn as EnumBlockSyntax);
                }
                else if (sn is StructureBlockSyntax)
                {
                    structs.Add(sn as StructureBlockSyntax);
                }
                else if (sn is MethodBlockSyntax)
                {
                    methods.Add(sn as MethodBlockSyntax);
                }
                else if (sn is FieldDeclarationSyntax)
                {
                    Fields.Add(sn as FieldDeclarationSyntax);
                }
                else if (sn is PropertyBlockSyntax)
                {
                    properties.Add(sn as PropertyBlockSyntax);
                }
                else if (sn is ConstructorBlockSyntax)
                {
                    constructors.Add(sn as ConstructorBlockSyntax);
                }
                else if (sn is ModuleBlockSyntax)
                {
                    modules.Add(sn as ModuleBlockSyntax);
                }
                else if (sn is ClassBlockSyntax)
                {
                    classes.Add(sn as ClassBlockSyntax);
                }
            }

            foreach (EnumBlockSyntax ebs in enums)
            {
                //traverse enums
                retClass.Enums.Add(TraverseEnum(ebs));
            }

            foreach (StructureBlockSyntax sbs2 in structs)
            {
                retClass.Structs.Add(TraverseStruct(sbs2));
            }

            foreach (MethodBlockSyntax mbs in methods)
            {
                bool isConstructor = false;
                Method tempMethod = TraverseMethod(mbs, ref isConstructor);
                if (isConstructor)
                {
                    retClass.Constructors.Add(tempMethod as Constructor);
                }
                else
                {
                    retClass.Methods.Add(tempMethod);
                }
            }

            foreach (FieldDeclarationSyntax fds in Fields)
            {
                retClass.Fields.Add(TraverseField(fds));
            }

            foreach (PropertyBlockSyntax pbs in properties)
            {
                retClass.Properties.Add(TraverseProperties(pbs));
            }

            foreach (ConstructorBlockSyntax css in constructors)
            {
                retClass.Constructors.Add(TraverseConstructor(css));
            }

            foreach (ModuleBlockSyntax mbs in modules)
            {
                retClass.Modules.Add(TraverseModule(mbs));
            }

            foreach (ClassBlockSyntax sbs2 in classes)
            {
                retClass.Classes.Add(TraverseClass(sbs2));
            }

            foreach (SyntaxNode sn in sbs.Begin.ChildNodes())
            {
                if (sn is InheritsOrImplementsStatementSyntax)
                {
                }
            }

            return retClass;
        }