private string RenderMethod(Project project, ProjectItem <LoggerModel> loggerProjectItem, EventSourceModel eventSourceModel, EventModel model) { var eventName = model.Name; var output = LoggerImplementationEventMethodTemplate.Template_LOGGER_METHOD; output = output.Replace(LoggerImplementationEventMethodTemplate.Variable_LOGGER_METHOD_NAME, eventName); output = output.Replace(LoggerImplementationEventMethodTemplate.Variable_EVENTSOURCE_CLASS_NAME, eventSourceModel.ClassName); output = output.Replace(LoggerImplementationEventMethodTemplate.Variable_LOGGER_METHOD_RETURNTYPE, model.ReturnType ?? "void"); var methodArguments = new EventArgumentsListBuilder( RenderMethodArgument, LoggerImplementationEventMethodTemplate.Template_LOGGER_IMPLICIT_ARGUMENTS_METHOD_DECLARATION_DELIMITER); foreach (var argument in model.GetAllNonImplicitArguments()) { methodArguments.Append(argument); } output = output.Replace(LoggerImplementationEventMethodTemplate.Variable_LOGGER_METHOD_ARGUMENTS, methodArguments.ToString()); var methodImplementation = new StringBuilder(); var renderers = new ILoggerImplementationMethodRenderer[] { new LoggerImplementationMethodCallEventSourceEventRenderer(), }.Union(project.GetExtensions <ILoggerImplementationMethodRenderer>(eventSourceModel.Settings?.Modules ?? new string[0])).ToArray(); foreach (var renderer in renderers) { PassAlongLoggers(renderer as IWithLogging); methodImplementation.Append(renderer.Render(project, loggerProjectItem, model)); } output = output.Replace(LoggerImplementationEventMethodTemplate.Variable_LOGGER_METHOD_IMPLEMENTATION, methodImplementation.ToString()); return(output); }
public string Render(Project project, ProjectItem <LoggerModel> loggerProjectItem, EventModel model) { if (loggerProjectItem.ItemType != ProjectItemType.LoggerImplementation) { LogError($"{loggerProjectItem.Name} should be of ItemType {nameof(ProjectItemType.LoggerImplementation)} set but found {loggerProjectItem.ItemType}"); return(""); } var loggerModel = loggerProjectItem.Content; if (loggerModel == null) { LogError($"{loggerProjectItem?.Name ?? nameof(loggerProjectItem)} should have content of type {typeof(LoggerModel).Name}, but found {loggerProjectItem?.GetType().Name ?? "null"}"); return(""); } var eventSourceModel = loggerModel.EventSource; if (eventSourceModel == null) { LogError($"{loggerProjectItem?.Name ?? nameof(loggerProjectItem)} should have content of type {typeof(LoggerModel).Name} with property EventSource set, but found {loggerModel.EventSource?.Name ?? "null"}"); return(""); } var eventName = model.Name; if ((model.ReturnType == "System.IDisposable") && (model.Name.StartsWith("Start"))) { eventName = model.Name.Substring("Start".Length); } /* * else if (model.CorrelatesTo?.ReturnType == "System.IDisposable" && (model.CorrelatesTo?.Name.StartsWith("Start") ?? false)) * { * return ""; * } */ var output = LoggerImplementationEventMethodTemplate.Template_LOGGER_METHOD; output = output.Replace(LoggerImplementationEventMethodTemplate.Variable_LOGGER_METHOD_NAME, eventName); output = output.Replace(LoggerImplementationEventMethodTemplate.Variable_EVENTSOURCE_CLASS_NAME, eventSourceModel.ClassName); output = output.Replace(LoggerImplementationEventMethodTemplate.Variable_LOGGER_METHOD_RETURNTYPE, model.ReturnType ?? "void"); var methodArguments = new EventArgumentsListBuilder( RenderMethodArgument, LoggerImplementationEventMethodTemplate.Template_LOGGER_IMPLICIT_ARGUMENTS_METHOD_DECLARATION_DELIMITER); foreach (var argument in model.GetAllNonImplicitArguments()) { methodArguments.Append(argument); } output = output.Replace(LoggerImplementationEventMethodTemplate.Variable_LOGGER_METHOD_ARGUMENTS, methodArguments.ToString()); var methodImplementation = new StringBuilder(); var renderers = new ILoggerImplementationMethodRenderer[] { new LoggerImplementationMethodCallEventSourceEventRenderer(), }.Union(project.GetExtensions <ILoggerImplementationMethodRenderer>()).ToArray(); foreach (var renderer in renderers) { methodImplementation.Append(renderer.Render(project, loggerProjectItem, model)); } output = output.Replace(LoggerImplementationEventMethodTemplate.Variable_LOGGER_METHOD_IMPLEMENTATION, methodImplementation.ToString()); return(output); }