private void ParseClassDeclaration(Class_definitionContext node) { var members = node.class_body().class_member_declarations().class_member_declaration(); foreach (var member in members) { Common_member_declarationContext child = member.GetRuleContext <Common_member_declarationContext>(0); if (child is Common_member_declarationContext) { Common_member_declarationContext commonMemberContext = child as Common_member_declarationContext; Event_declarationContext eventContext = commonMemberContext.event_declaration(); Typed_member_declarationContext typeMemberContext = commonMemberContext.typed_member_declaration(); Method_declarationContext methodContext = commonMemberContext.method_declaration(); string type = ""; string name = ""; if (eventContext != null) { type = "Event"; name = eventContext.variable_declarators().GetText(); } if (typeMemberContext != null) { Field_declarationContext field = typeMemberContext.field_declaration(); Property_declarationContext property = typeMemberContext.property_declaration(); if (field != null) { type = "Field"; name = field.variable_declarators().GetText(); } else if (property != null) { type = "Property"; name = property.member_name().GetText(); } } else if (methodContext != null) { type = "Method"; name = methodContext.method_member_name().GetText(); } if (!string.IsNullOrEmpty(name)) { this.WriteKeyValue(type, name); } } } }
/// <summary> /// Set type for member of class or struct that have type. (functions, fields , properties) /// </summary> /// <param name="context"></param> /// <returns></returns> public override object VisitTyped_member_declaration([NotNull] Typed_member_declarationContext context) { var type = ResolveType(context.type(), currentScope); base.VisitTyped_member_declaration(context); if (context.field_declaration() != null) { return(SetTypeForField(context.field_declaration(), type)); } else if (context.method_declaration() != null) { return(SetTypeForFunction(context.method_declaration(), type)); } else if (context.property_declaration() != null) { return(SetTypeForProperty(context.property_declaration(), type)); } return(null); }