Exemplo n.º 1
0
        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));
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 6
0
        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));
            }
        }
Exemplo n.º 11
0
        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;
            }
        }
Exemplo n.º 13
0
        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);
        }
Exemplo n.º 15
0
        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;
        }