public override MethodDefinition Process(MethodDefinition definition, IObjectDefinitions <Type> objectDefinitions, MethodInfo parameter) { var attributeProvider = this.Resolve <IAttributeDefinitionProvider <Attribute, Type> >(); var parameterProvider = this.Resolve <IParameterDefinitionProvider <ParameterInfo, Type> >(); var methodDefinition = definition; if (methodDefinition == null) { return(definition); } methodDefinition.Name = parameter.Name; methodDefinition.ReturnType = objectDefinitions.Get(parameter.ReturnType); parameter.GetCustomAttributes() .Select(x => attributeProvider.Process(attributeProvider.GetFromSource(x), objectDefinitions, x)) .ToList() .ForEach(x => methodDefinition.AddAttribute(x)); parameter.GetParameters() .Select(x => parameterProvider.Process(parameterProvider.GetFromSource(x), objectDefinitions, x)) .ToList() .ForEach(x => methodDefinition.AddParameter(x)); return(definition); }
public override AttributeDefinition Process(AttributeDefinition definition, IObjectDefinitions <Type> objectDefinitions, Attribute parameter) { var attributeParameterProvider = this.Resolve <IAttributeParameterDefinitionProvider <Tuple <PropertyInfo, object>, Type> >(); var type = parameter.GetType(); while (type != null) { var typeInfo = type.GetTypeInfo(); foreach (var property in typeInfo.DeclaredProperties.Where(x => (x.GetMethod?.IsPublic ?? false))) { var tuple = new Tuple <PropertyInfo, object>(property, parameter); definition.AddParameter(attributeParameterProvider.Process(attributeParameterProvider.GetFromSource(tuple), objectDefinitions, tuple)); } type = typeInfo.BaseType; } return(definition); }
public override PropertyDefinition Process(PropertyDefinition definition, IObjectDefinitions <Type> objectDefinitions, PropertyInfo parameter) { var attributeProvider = this.Resolve <IAttributeDefinitionProvider <Attribute, Type> >(); var propertyDefinition = definition; if (propertyDefinition == null) { return(definition); } propertyDefinition.Name = parameter.Name; propertyDefinition.Type = objectDefinitions.Get(parameter.PropertyType); parameter.GetCustomAttributes() .Select(x => attributeProvider.Process(attributeProvider.GetFromSource(x), objectDefinitions, x)) .ToList() .ForEach(x => propertyDefinition.AddAttribute(x)); return(definition); }
public override AttributeParameterDefinition Process(AttributeParameterDefinition definition, IObjectDefinitions <Type> objectDefinitions, Tuple <PropertyInfo, object> parameter) { return(definition); }
public override ObjectDefinitionBase Process(ObjectDefinitionBase definition, IObjectDefinitions <Type> objectDefinitions, Type parameter) { base.Process(definition, objectDefinitions, parameter); var attributeProvider = this.Resolve <IAttributeDefinitionProvider <Attribute, Type> >(); var propertyProvider = this.Resolve <IPropertyDefinitionProvider <PropertyInfo, Type> >(); var methodProvider = this.Resolve <IMethodDefinitionProvider <MethodInfo, Type> >(); var typeInfo = parameter.GetTypeInfo(); var structDefinition = definition as StructDefinition; if (structDefinition == null) { return(definition); } typeInfo.GetCustomAttributes() .Select(x => attributeProvider.Process(attributeProvider.GetFromSource(x), objectDefinitions, x)) .ToList() .ForEach(x => structDefinition.AddAttribute(x)); typeInfo.DeclaredProperties .Where(x => (x.GetMethod?.IsPublic ?? false) || (x.SetMethod?.IsPublic ?? false)) .Select(x => propertyProvider.Process(propertyProvider.GetFromSource(x), objectDefinitions, x)) .ToList() .ForEach(x => structDefinition.AddProperty(x)); typeInfo.DeclaredMethods .Where(x => !x.IsSpecialName && x.IsPublic) .Select(x => methodProvider.Process(methodProvider.GetFromSource(x), objectDefinitions, x)) .ToList() .ForEach(x => structDefinition.AddMethod(x)); typeInfo.GenericTypeArguments .Select(objectDefinitions.Get) .ToList() .ForEach(x => structDefinition.AddGenericArgument(x)); return(structDefinition); }
public override ObjectDefinitionBase Process(ObjectDefinitionBase definition, IObjectDefinitions <Type> objectDefinitions, Type parameter) { var attributeProvider = this.Resolve <IAttributeDefinitionProvider <Attribute, Type> >(); var enumValueProvider = this.Resolve <IEnumValueDefinitionProvider <object, Type> >(); var enumDefinition = definition as EnumDefinition; if (enumDefinition == null) { return(definition); } enumDefinition.IsArray = false; parameter.GetTypeInfo() .GetCustomAttributes() .Select(x => attributeProvider.Process(attributeProvider.GetFromSource(x), objectDefinitions, x)) .ToList() .ForEach(x => enumDefinition.AddAttribute(x)); Enum.GetValues(parameter) .Cast <object>() .Select(x => enumValueProvider.Process(enumValueProvider.GetFromSource(x), objectDefinitions, x)) .ToList() .ForEach(x => enumDefinition.AddValue(x)); return(enumDefinition); }
public InputService(IServiceProvider serviceProvider, IObjectDefinitions <Type> objectDefinitions, ILoggingService loggingService) { this.ServiceProvider = serviceProvider; this.ObjectDefinitions = objectDefinitions; this.LoggingService = loggingService; }
public override EnumValueDefinition Process(EnumValueDefinition definition, IObjectDefinitions <Type> objectDefinitions, object parameter) { return(definition); }
public abstract TInput Process(TInput definition, IObjectDefinitions <TKey> objectDefinitions, TOutput parameter);
public override ObjectDefinitionBase Process(ObjectDefinitionBase definition, IObjectDefinitions <Type> objectDefinitions, Type parameter) { var typeInfo = parameter.GetTypeInfo(); if (typeInfo.BaseType != null) { definition.BaseType = objectDefinitions.Get(typeInfo.BaseType); } typeInfo.ImplementedInterfaces? .Select(objectDefinitions.Get) .ToList() .ForEach(definition.AddImplementedInterface); definition.Namespace = typeInfo.Namespace; definition.IsAbstract = typeInfo.IsAbstract; definition.IsInterface = typeInfo.IsInterface; if (typeInfo.IsArray && parameter != typeof(string)) { definition.IsArray = true; definition.InnerObject = objectDefinitions.Get(parameter.GetElementType() ?? typeof(object)); } else if (typeof(IEnumerable).GetTypeInfo().IsAssignableFrom(typeInfo) && parameter != typeof(string)) { definition.IsArray = true; definition.InnerObject = objectDefinitions.Get((typeInfo.IsGenericType ? parameter.GenericTypeArguments.FirstOrDefault() : parameter.GetElementType()) ?? typeof(object)); } if (typeInfo.IsGenericType) { } return(definition); }