private void GenerateExtensionMethod(ClassDeclaration extensionClass, Method method, MethodParameter methodParameter) { foreach (var parameterEntityRef in methodParameter.Type.ParameterEntity.Refs.Where(r => r.ModelRef.IsModel)) { var m = GenerateMethod(extensionClass, method); m.Modifiers |= Modifiers.Static; var extensionArgument = new MethodArgumentDeclaration(parameterEntityRef.ModelRef, ToArgumentName(parameterEntityRef.ModelRef.Model.Name)) { IsExtension = true }; m.Statements.Clear(); var invoke = new MethodInvokeExpression(new CastExpression(extensionArgument, new TypeReference("IGitLabObject")).CreateMemberReferenceExpression("GitLabClient", m.Name)); foreach (var arg in m.Arguments.ToList()) { if (arg.Data.TryGetValue("Parameter", out var parameter) && methodParameter == parameter) { m.Arguments.Remove(arg); invoke.Arguments.Add(extensionArgument); } else { invoke.Arguments.Add(arg); } } m.Statements.Add(new ReturnStatement(invoke)); m.Name = m.Name.Replace(extensionClass.Name, "", StringComparison.OrdinalIgnoreCase); m.Arguments.Insert(0, extensionArgument); } }