public TypeDescription(Type type) { Type = type; Items = new ItemDescriptions(); Properties = new PropertyDescriptions(); Methods = new MethodDescriptions(); }
public void ExtractPublicNonObjectMethodsFrom(ReflectedType partTranSearchFromDb) { var methodDescriptions = partTranSearchFromDb.MethodDescriptions .Where(z => z.IsPublic) .Where(z => !ConfigRealizer.BaseObjectMethods.Contains(z.Name)) .ToList(); MethodDescriptions.AddRange(methodDescriptions); }
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); } } } }