public override object VisitInterface_declaration([NotNull] CSharpParser.Interface_declarationContext context) { bool matchNames = context.identifier().GetText() == ServiceInterfaceName; bool isTypeParamsMatch = true; var variantTypeParameters = context?.variant_type_parameter_list()?.variant_type_parameter(); if (!(variantTypeParameters is null && (TypeParameters is null || TypeParameters.Count == 0))) { if ((variantTypeParameters?.Length ?? 0) != (TypeParameters?.Count ?? 0)) { isTypeParamsMatch = false; } else { for (int i = 0; i < variantTypeParameters.Length; ++i) { if (variantTypeParameters[i].identifier().GetText() != TypeParameters[i].TypeParam) { isTypeParamsMatch = false; break; } } } } if (matchNames && isTypeParamsMatch) { HasServiceInterface = true; Results.ServiceNamespace = string.Join(".", _currentNamespace.ToArray().Reverse()); var interfaceDeclaration = new ClassInterfaceDeclaration() { IsInterface = true, Attributes = _cSharpParserService.GetTextWithWhitespace(Tokens, context?.attributes()), Identifier = ServiceInterfaceName }; //Results.ClassInterfaceDeclarations.Add(interfaceName, interfaceDeclaration); Results.ServiceDeclaration = interfaceDeclaration; if (context?.PARTIAL()?.GetText() != null) { interfaceDeclaration.Modifiers.Add(context.PARTIAL().GetText()); } if (context?.interface_modifier() != null) { foreach (var modifier in context.interface_modifier()) { interfaceDeclaration.Modifiers.Add(modifier.GetText()); } } var constraintsClauses = context?.type_parameter_constraints_clauses()?.type_parameter_constraints_clause(); interfaceDeclaration.TypeParameters = _cSharpParserService.ParseVariantTypeParameterList( Tokens, variantTypeParameters, constraintsClauses); var interfaceTypes = context?.interface_base()?.interface_type_list()?.interface_type(); if (interfaceTypes != null) { interfaceDeclaration.Base = new ClassInterfaceBase(); foreach (var interfaceType in interfaceTypes) { interfaceDeclaration.Base.InterfaceTypeList.Add( _cSharpParserService.GetTextWithWhitespaceMinifiedLite(Tokens, interfaceType)); } } var memberDeclarations = context?.interface_body()?.interface_member_declaration(); if (memberDeclarations != null) { foreach (var memberDeclaration in memberDeclarations) { var interfaceMethodDeclaration = memberDeclaration?.interface_method_declaration(); var interfacePropertyDeclaration = memberDeclaration?.interface_property_declaration(); if (interfaceMethodDeclaration != null) { var methodDeclaration = new MethodDeclaration() { Attributes = _cSharpParserService.GetTextWithWhitespace( Tokens, interfaceMethodDeclaration?.attributes()), ReturnType = _cSharpParserService.GetTextWithWhitespaceMinifiedLite( Tokens, interfaceMethodDeclaration.return_type()), Identifier = interfaceMethodDeclaration.identifier().GetText() }; if (interfaceMethodDeclaration?.NEW()?.GetText() != null) { methodDeclaration.Modifiers.Add(interfaceMethodDeclaration.NEW().GetText()); } var formalParameterList = interfaceMethodDeclaration?.formal_parameter_list(); methodDeclaration.FormalParameterList = _cSharpParserService.ParseFormalParameterList(Tokens, formalParameterList); var methodTypeParameters = interfaceMethodDeclaration?.type_parameter_list()?.type_parameter(); var methodConstraintsClauses = interfaceMethodDeclaration ?.type_parameter_constraints_clauses() ?.type_parameter_constraints_clause(); methodDeclaration.TypeParameters = _cSharpParserService .ParseTypeParameterList(Tokens, methodTypeParameters, methodConstraintsClauses); interfaceDeclaration.Body.MethodDeclarations.Add(methodDeclaration); } else if (interfacePropertyDeclaration != null) { var propertyDeclaration = new PropertyDeclaration() { Attributes = _cSharpParserService.GetTextWithWhitespace( Tokens, interfacePropertyDeclaration?.attributes()), Type = _cSharpParserService.GetTextWithWhitespaceMinifiedLite( Tokens, interfacePropertyDeclaration.type_()), Identifier = interfacePropertyDeclaration.identifier().GetText(), Body = new PropertyBody() { Text = _cSharpParserService.GetTextWithWhitespaceUntab( Tokens, interfacePropertyDeclaration.interface_accessors()), HasGetAccessor = interfacePropertyDeclaration.interface_accessors() .interface_get_accessor() != null, HasSetAccessor = interfacePropertyDeclaration.interface_accessors() .interface_set_accessor() != null } }; if (interfacePropertyDeclaration?.NEW() != null) { propertyDeclaration.Modifiers.Add(interfacePropertyDeclaration?.NEW()?.GetText()); } interfaceDeclaration.Body.PropertyDeclarations.Add(propertyDeclaration); } } } } VisitChildren(context); return(null); }
public override object VisitInterface_declaration([NotNull] CSharpParser.Interface_declarationContext context) { var typeParameters = _serviceFile.ServiceDeclaration.TypeParameters; bool isTypeParamsMatch = true; var variantTypeParameters = context?.variant_type_parameter_list()?.variant_type_parameter(); if (!(variantTypeParameters is null && (typeParameters is null || typeParameters.Count == 0))) { if ((variantTypeParameters?.Length ?? 0) != (typeParameters?.Count ?? 0)) { isTypeParamsMatch = false; } else { for (int i = 0; i < variantTypeParameters.Length; ++i) { if (variantTypeParameters[i].identifier().GetText() != typeParameters[i].TypeParam) { isTypeParamsMatch = false; break; } } } } if (context.identifier().GetText() == _serviceClassInterfaceName && GetCurrentNamespace() == _serviceFile.ServiceNamespace && isTypeParamsMatch) { _hasServiceInterface = true; var preclassWhitespace = Tokens.GetHiddenTokensToLeft(context.Start.TokenIndex, Lexer.Hidden); int tabLevels = 1 + ((preclassWhitespace?.Count ?? 0) > 0 ? _stringUtilService.CalculateTabLevels(preclassWhitespace[0]?.Text ?? string.Empty, _tabString) : 0); int?finalMethod = null; int?finalProperty = null; var members = context?.interface_body()?.interface_member_declaration(); foreach (var member in members) { if (member.interface_method_declaration() != null) { finalMethod = member?.interface_method_declaration()?.Stop?.TokenIndex; } else if (member.interface_property_declaration() != null) { finalProperty = member?.interface_property_declaration()?.Stop?.TokenIndex; } } int propertyStopIndex = finalProperty ?? context.interface_body().OPEN_BRACE().Symbol.TokenIndex; var propertyString = _cSharpParserService.GeneratePropertyDeclarations( _serviceFile.ServiceDeclaration.Body.PropertyDeclarations, tabLevels, _tabString, true); int?methodStopIndex = finalMethod; var methodString = _cSharpParserService.GenerateMethodDeclarations( _serviceFile.ServiceDeclaration.Body.MethodDeclarations, tabLevels, _tabString, true); if (methodStopIndex is null) { propertyString += methodString; } else { if (methodString.Length > 0) { IsModified = true; Rewriter.InsertAfter(Tokens.Get(methodStopIndex ?? -1), methodString); } } if (propertyString.Length > 0) { IsModified = true; Rewriter.InsertAfter(propertyStopIndex, propertyString); } } VisitChildren(context); return(null); }