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); }
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)); }