コード例 #1
0
 public TypeDescription(Type type)
 {
     Type       = type;
     Items      = new ItemDescriptions();
     Properties = new PropertyDescriptions();
     Methods    = new MethodDescriptions();
 }
コード例 #2
0
    public void ExtractPublicNonObjectMethodsFrom(ReflectedType partTranSearchFromDb)
    {
        var methodDescriptions = partTranSearchFromDb.MethodDescriptions
                                 .Where(z => z.IsPublic)
                                 .Where(z => !ConfigRealizer.BaseObjectMethods.Contains(z.Name))
                                 .ToList();

        MethodDescriptions.AddRange(methodDescriptions);
    }
コード例 #3
0
        public static void ReflectMethods(
            Type targetType,
            MethodDescriptions methodDescriptions,
            WoopsaConverters customValueTypeConverters = null)
        {
            const BindingFlags flags = BindingFlags.Public | BindingFlags.Instance;

            List <MethodInfo> methods = new List <MethodInfo>(targetType.GetMethods(flags));

            foreach (Type inter in targetType.GetInterfaces())
            {
                foreach (MethodInfo method in inter.GetMethods(flags))
                {
                    if (!methods.Contains(method))
                    {
                        methods.Add(method);
                    }
                }
            }
            foreach (var methodInfo in methods)
            {
                WoopsaConverter          converter;
                WoopsaValueTypeAttribute attribute = GetCustomAttribute <WoopsaValueTypeAttribute>(methodInfo);
                WoopsaValueType          woopsaReturnType;
                bool isValidWoopsaMethod = false;
                isValidWoopsaMethod = InferWoopsaType(customValueTypeConverters, methodInfo.ReturnType, out woopsaReturnType, out converter);
                if (attribute != null)
                {
                    woopsaReturnType    = attribute.ValueType;
                    isValidWoopsaMethod = true;
                }
                if (isValidWoopsaMethod)
                {
                    bool argumentsTypeCompatible   = true;
                    ArgumentDescriptions arguments = new ArgumentDescriptions();
                    int parameterIndex             = 0;
                    foreach (var parameter in methodInfo.GetParameters())
                    {
                        WoopsaConverter argumentConverter;
                        WoopsaValueType argumentType;
                        if (InferWoopsaType(customValueTypeConverters, parameter.ParameterType, out argumentType, out argumentConverter))
                        {
                            string parameterName;
                            parameterName = parameter.Name;
                            if (string.IsNullOrEmpty(parameterName))
                            {
                                if (typeof(Array).IsAssignableFrom(targetType))
                                {
                                    if (methodInfo.Name == "Set")
                                    {
                                        if (parameterIndex == 0)
                                        {
                                            parameterName = "index";
                                        }
                                        else if (parameterIndex == 1)
                                        {
                                            parameterName = "value";
                                        }
                                    }
                                    else if (methodInfo.Name == "Get")
                                    {
                                        if (parameterIndex == 0)
                                        {
                                            parameterName = "index";
                                        }
                                    }
                                }
                                if (parameterName == null)
                                {
                                    parameterName = "p" + parameterIndex.ToString();
                                }
                            }
                            ArgumentDescription newArgument = new ArgumentDescription(
                                new WoopsaMethodArgumentInfo(parameterName, argumentType),
                                parameter.ParameterType, argumentConverter);
                            arguments.Add(newArgument);
                        }
                        else
                        {
                            argumentsTypeCompatible = false;
                            break;
                        }
                        parameterIndex++;
                    }
                    if (argumentsTypeCompatible)
                    {
                        MethodDescription newMethod = new MethodDescription(
                            woopsaReturnType, arguments, methodInfo, converter);
                        methodDescriptions.Add(newMethod);
                    }
                }
            }
        }