Beispiel #1
0
        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);
        }