コード例 #1
0
        public void Parse(SyntaxNode syntaxNode)
        {
            var classSyntaxNode = (ClassDeclarationSyntax)syntaxNode;

            var fieldParser      = new FieldSyntaxParser();
            var propertyParser   = new PropertySyntaxParser();
            var methodParser     = new MethodSyntaxParser();
            var newKeywordParser = new ObjectCreationExpressionSyntaxParser();
            var internalParser   = new SyntaxTreeParser();

            internalParser.RegisterParsingStratagy(fieldParser);
            internalParser.RegisterParsingStratagy(propertyParser);
            internalParser.RegisterParsingStratagy(methodParser);
            internalParser.RegisterParsingStratagy(newKeywordParser);
            internalParser.Parse(classSyntaxNode);

            var className     = classSyntaxNode.Identifier.Text;
            var baseTypeNames = classSyntaxNode.BaseList?.Types.SelectMany(t => t.Type.ParseTypeNamesFromType());

            var classNode = new ClassModel();

            classNode.Name                  = className;
            classNode.Fields                = fieldParser.ParsedFields;
            classNode.Properties            = propertyParser.ParsedProperties;
            classNode.Methods               = methodParser.ParsedMethods;
            classNode.BaseTypeNames         = baseTypeNames;
            classNode.InstantiatedTypeNames = newKeywordParser.FoundInstantiatedTypeNames;

            ParsedClasses.Add(classNode);
        }
コード例 #2
0
        public static IEnumerable <string> ParseTypeNamesFromType(this TypeSyntax typeSyntax)
        {
            var parser = new SyntaxTreeParser();
            var predefinedTypeParser = new PredefinedTypeSyntaxParser();
            var genericNameParser    = new GenericNameSyntaxParser();
            var identifierNameParser = new IdentifierNameSyntaxParser();

            parser.RegisterParsingStratagy(predefinedTypeParser);
            parser.RegisterParsingStratagy(genericNameParser);
            parser.RegisterParsingStratagy(identifierNameParser);
            parser.Parse(typeSyntax);
            return(predefinedTypeParser.FoundTypeNames
                   .Concat(genericNameParser.FoundTypeNames)
                   .Concat(identifierNameParser.FoundTypeNames));
        }