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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
 }
Пример #5
0
        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);
        }
Пример #6
0
        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);
        }
Пример #7
0
 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);
        }