private static string RenderWriteEventMethodCallArgument(EventArgumentModel model, bool isPrivateMember = false) { var output = isPrivateMember ? EventSourceEventMethodTemplate.Template_METHOD_CALL_PRIVATE_MEMBER_ARGUMENT : EventSourceEventMethodTemplate.Template_METHOD_CALL_PASSTHROUGH_ARGUMENT; output = output.Replace(EventSourceEventMethodTemplate.Variable_ARGUMENT_NAME, model.Name); return(output); }
private string RenderEventSourceEventMethodCallArgument(EventArgumentModel model) { var output = model.IsImplicit ? LoggerImplementationMethodCallEventSourceEventTemplate.Template_METHOD_CALL_PRIVATE_MEMBER_ARGUMENT : LoggerImplementationMethodCallEventSourceEventTemplate.Template_METHOD_CALL_PASSTHROUGH_ARGUMENT; output = output.Replace(LoggerImplementationMethodCallEventSourceEventTemplate.Template_ARGUMENT_NAME, model.Name); return(output); }
private KeyValuePair <string, string> CreateDictionaryKeyValue(EventArgumentModel model) { var variable = model.Name; if (model.IsImplicit) { variable = $"_{model.Name}"; } var assignment = variable; var assignmentType = model.Type; if (model.Assignment != null) { assignment = model.Assignment.Replace("$this", variable); assignmentType = model.AssignedCLRType; } if ((assignmentType != null) && (EventArgumentModel.ParseType(assignmentType) != typeof(string))) { assignment = $"({assignment}).ToString()"; } var keyOutput = $"{model.Name.Substring(0, 1).ToUpperInvariant()}{model.Name.Substring(1)}"; return(new KeyValuePair <string, string>(keyOutput, assignment)); }
protected static string RenderEventSourceType(EventArgumentModel model) { var type = model.CLRType ?? model.Type; switch (type.ToLowerInvariant()) { case ("string"): case ("system.string"): return(@"string"); case ("int"): case ("system.int32"): return(@"int"); case ("long"): case ("system.int64"): return(@"long"); case ("bool"): case ("system.boolean"): return(@"bool"); case ("datetime"): case ("system.dateTime"): return(@"DateTime"); case ("guid"): case ("system.guid"): return(@"Guid"); default: return(null); } }
private static string RenderPrivateAssignment(EventArgumentModel model) { var output = LoggerImplementationTemplate.Template_PRIVATE_MEMBER_ASSIGNMENT; output = output.Replace(LoggerImplementationTemplate.Template_ARGUMENT_NAME, model.Name); return(output); }
private static string RenderNonEventMethodArgument(EventArgumentModel model) { var output = EventSourceNonEventMethodTemplate.Template_METHOD_ARGUMENT_DECLARATION; output = output.Replace(EventSourceNonEventMethodTemplate.Template_ARGUMENT_NAME, model.Name); output = output.Replace(EventSourceNonEventMethodTemplate.Template_ARGUMENT_CLR_TYPE, RenderEventSourceType(model) ?? model.CLRType ?? model.Type); return(output); }
private static string RenderPrivateDeclaration(EventArgumentModel model) { var output = LoggerImplementationTemplate.Template_PRIVATE_MEMBER_DECLARATION; output = output.Replace(LoggerImplementationTemplate.Template_ARGUMENT_NAME, model.Name); output = output.Replace(LoggerImplementationTemplate.Template_ARGUMENT_CLR_TYPE, model.CLRType); return(output); }
private static string RenderMethodArgument(EventArgumentModel model) { var output = LoggerImplementationTemplate.Template_METHOD_ARGUMENT_DECLARATION; output = output.Replace(LoggerImplementationTemplate.Template_ARGUMENT_NAME, model.Name); output = output.Replace(LoggerImplementationTemplate.Template_ARGUMENT_CLR_TYPE, model.CLRType); return(output); }
private string RenderDictionaryKeyValue(EventArgumentModel model) { var value = CreateDictionaryKeyValue(model); var output = Template_LOGGER_METHOD_TRACKEVENT_PROPERTY_DECLARATION; output = output.Replace(Variable_LOGGER_METHOD_TRACKEVENT_PROPERTY_NAME, value.Key); output = output.Replace(Variable_LOGGER_METHOD_TRACKEVENT_PROPERTY_ASSIGNMENT, value.Value); return(output); }
private IEnumerable <EventArgumentModel> GetTypeArguments(Project project, string type) { var argumentType = project.DynamicAssembly.GetType(type); if (argumentType == null) { foreach (var referencedAssembly in project.DynamicAssembly.GetReferencedAssemblies()) { argumentType = Assembly.Load(referencedAssembly).GetType(type); if (argumentType != null) { break; } } } var properties = argumentType?.GetProperties(); foreach (var property in properties ?? new PropertyInfo[0]) { var propertyType = property.PropertyType; var nullableType = Nullable.GetUnderlyingType(propertyType); var defaultValue = ""; if (nullableType != null) { propertyType = nullableType; if (!nullableType.IsClass) { defaultValue = EventArgumentModel.GetDefaultValue(nullableType) ?? ""; } } var parsedType = EventArgumentModel.ParseType(propertyType.FullName); var assignment = $"$this.{property.Name}"; var propertyTypeName = propertyType.FullName; if (parsedType == typeof(object)) { if (nullableType != null) { assignment = $"($this.{property.Name}??{defaultValue})"; propertyTypeName = nullableType.FullName; } else { assignment = $"$this.{property.Name}.AsJson()"; propertyTypeName = typeof(string).FullName; } } yield return(new EventArgumentModel(property.Name, propertyTypeName, assignment)); } }
public EventArgumentModel GetRequestNameArgument(EventModel model) { var hasRequestNameArgument = false; EventArgumentModel requestNameArgument = null; foreach (var eventArgumentModel in model.GetAllArgumentsExpanded()) { if (eventArgumentModel.Name.Matches("*request*", StringComparison.InvariantCultureIgnoreCase, useWildcards: true)) { if (hasRequestNameArgument) { LogWarning($"Event {model.Name} has multiple potential request name arguments"); } requestNameArgument = eventArgumentModel; hasRequestNameArgument = true; } } return(requestNameArgument); }
private static void AddKnownExtensions(EventSourceModel eventSource, EventArgumentModel argument) { if (argument.TypeTemplate != null) { foreach (var templateArgument in argument.GetTypeTemplateArguments()) { AddKnownExtensions(eventSource, templateArgument); } } if (argument.Assignment == null) { return; } var templateCLRType = argument.AssignedCLRType ?? argument.TemplatedParentArgument?.CLRType ?? argument?.TemplatedParentArgument?.Type ?? argument.Type; if (argument.Assignment.Contains("$this.AsJson()")) { AddKnownExtension(eventSource, "AsJson", templateCLRType); return; } if (argument.Assignment.Contains("$this.GetReplicaOrInstanceId()")) { AddKnownExtension(eventSource, "GetReplicaOrInstanceId", templateCLRType); return; } if (argument.Assignment.Contains("$this.GetContentDigest(")) { AddKnownExtension(eventSource, "GetContentDigest", templateCLRType); AddKnownExtension(eventSource, "GetMD5Hash", templateCLRType); return; } if (argument.Assignment.Contains("$this.GetMD5Hash(")) { AddKnownExtension(eventSource, "GetMD5Hash", templateCLRType); return; } }
private static string RenderAssignment(EventArgumentModel model) { var output = model.Assignment?.Replace(@"$this", model.Name) ?? model.Name; return(output); }
public void Build(Project project, ProjectItem <EventSourceModel> eventSourceProjectItem, EventArgumentModel model) { var eventSource = eventSourceProjectItem.Content; if (eventSource == null) { LogError($"{eventSourceProjectItem.Name} should have a content of type {typeof(EventSourceModel).Name} set but found {eventSourceProjectItem.Content?.GetType().Name ?? "null"}"); return; } AddKnownExtensions(eventSource, model); }
public void Build(Project project, ProjectItem <EventSourceModel> eventSourceProjectItem, EventArgumentModel model) { var eventSource = eventSourceProjectItem.Content; if (eventSource == null) { LogError($"{eventSourceProjectItem.Name} should have a content of type {typeof(EventSourceModel).Name} set but found {eventSourceProjectItem.Content?.GetType().Name ?? "null"}"); return; } var type = model.Type; if (TypeExtensions.IsComplexType(model.Type)) { model.TypeTemplate = this.GetTypeTemplate(project, eventSource.TypeTemplates, model); if (model.TypeTemplate != null) { var parsedType = TypeExtensions.ParseType(model.TypeTemplate.CLRType); var renderedType = TypeExtensions.RenderCLRType(parsedType); if (renderedType == "string" && (parsedType != typeof(string))) { type = model.TypeTemplate.CLRType; } else { type = renderedType; } } else { model.AssignedCLRType = "string"; model.Assignment = "$this.ToString()"; } } model.CLRType = type; }