public override ClassDefinitionCollection VisitType_argument_list(CSharpParser.Type_argument_listContext context) { var types = context.type(); foreach (var type in types) { var argVisitor = new TypeArgumentListVisitor(Cache, Reference); var typeArgs = argVisitor.Visit(type); var classDefinition = new ClassDefinition { BaseName = type.Start.Text, GenericTypeArgs = typeArgs }; var className = classDefinition.Name; if (!Cache.ContainsKey(className)) { Cache.Add(className, classDefinition); } else { classDefinition = Cache[className]; } Reference.Add(className); this.Collection.Add(classDefinition); } return(this.Collection); }
public override PropertyDefinitionCollection VisitClass_member_declaration(CSharpParser.Class_member_declarationContext context) { var memberDeclaration = context.common_member_declaration()?.typed_member_declaration(); if (memberDeclaration == null) { return(this.Collection); } var modifiers = context.all_member_modifiers()?.all_member_modifier(); if (modifiers == null || modifiers.All(modifier => modifier.Start.Text != "public")) { return(this.Collection); } var property = memberDeclaration.property_declaration(); if (property == null) { return(this.Collection); } var name = property.member_name().Start.Text; var type = memberDeclaration.type(); var argVisitor = new TypeArgumentListVisitor(Cache, Reference); var typeArgs = argVisitor.Visit(type); var classDefinition = new ClassDefinition { BaseName = type.Start.Text, GenericTypeArgs = typeArgs }; var className = classDefinition.Name; if (!Cache.ContainsKey(className)) { Cache.Add(className, classDefinition); } else { classDefinition = Cache[className]; } Reference.Add(className); this.Collection.Add(new PropertyDefinition { Name = name, Type = classDefinition }); return(this.Collection); }
public override ClassDefinitionCollection VisitClass_definition(CSharpParser.Class_definitionContext context) { var reference = new ReferenceCollection(); var baseName = ((ParserRuleContext)context.children[1]).Start.Text; var argsVisitor = new TypeArgumentListVisitor(Cache, reference); var classDefinition = new ClassDefinition { BaseName = baseName }; var typeArgs = context.type_parameter_list(); if (typeArgs != null) { var args = argsVisitor.Visit(typeArgs); classDefinition.GenericTypeArgs = args; } var className = classDefinition.Name; if (!Cache.ContainsKey(className)) { Cache.Add(className, classDefinition); } else { classDefinition = Cache[className]; } var visitor = new PropertyDeclarationVisitor(Cache, reference); var properties = visitor.Visit(context); classDefinition.Properties = properties; classDefinition.References = reference; this.Collection.Add(classDefinition); return(this.Collection); }