public static IndexGenInfo FromPropertyInfo(PropertyInfo propertyInfo) { var getMethod = propertyInfo.GetGetMethod(); var setMethod = propertyInfo.GetSetMethod(); var result = new IndexGenInfo() { TypeName = propertyInfo.PropertyType.GetFriendlyName(), IndexParameter = ParameterGenInfo.FromParameterInfo(propertyInfo.GetIndexParameters()[0]), HasGetter = getMethod != null && getMethod.IsPublic, HasSetter = setMethod != null && setMethod.IsPublic, }; Utils.FillEnumInfo(result, propertyInfo.PropertyType); return(result); }
static ParameterGenInfo ToParameterGenInfo(ParameterInfo parameterInfo) { var ExpectJsType = GeneralGetterManager.GetJsTypeMask(parameterInfo.ParameterType); var result = new ParameterGenInfo() { IsOut = !parameterInfo.IsIn && parameterInfo.IsOut && parameterInfo.ParameterType.IsByRef, IsByRef = parameterInfo.ParameterType.IsByRef, TypeName = RemoveRefAndToConstraintType(parameterInfo.ParameterType).GetFriendlyName(), ExpectJsType = ToCode(ExpectJsType), IsParams = parameterInfo.IsDefined(typeof(ParamArrayAttribute), false), }; if (result.IsParams) { result.TypeName = RemoveRefAndToConstraintType(parameterInfo.ParameterType.GetElementType()).GetFriendlyName(); } result.ExpectCsType = ((ExpectJsType & JsValueType.NativeObject) == JsValueType.NativeObject) ? string.Format("typeof({0})", result.TypeName) : "null"; FillEnumInfo(result, parameterInfo.ParameterType); return result; }
public static List <OverloadGenInfo> FromMethodBase(MethodBase methodBase, bool extensionMethod = false) { List <OverloadGenInfo> ret = new List <OverloadGenInfo>(); if (methodBase is MethodInfo) { var methodInfo = methodBase as MethodInfo; var parameters = methodInfo.GetParameters().Skip(extensionMethod ? 1 : 0).ToArray(); OverloadGenInfo mainInfo = new OverloadGenInfo() { ParameterInfos = parameters.Select(info => ParameterGenInfo.FromParameterInfo(info)).ToArray(), TypeName = Utils.RemoveRefAndToConstraintType(methodInfo.ReturnType).GetFriendlyName(), IsVoid = methodInfo.ReturnType == typeof(void), EllipsisedParameters = false, }; Utils.FillEnumInfo(mainInfo, methodInfo.ReturnType); mainInfo.HasParams = mainInfo.ParameterInfos.Any(info => info.IsParams); ret.Add(mainInfo); var ps = parameters; for (int i = ps.Length - 1; i >= 0; i--) { OverloadGenInfo optionalInfo = null; if (ps[i].IsOptional || mainInfo.ParameterInfos[i].IsParams) { optionalInfo = new OverloadGenInfo() { ParameterInfos = parameters.Select(info => ParameterGenInfo.FromParameterInfo(info)).Take(i).ToArray(), TypeName = Utils.RemoveRefAndToConstraintType(methodInfo.ReturnType).GetFriendlyName(), IsVoid = methodInfo.ReturnType == typeof(void), EllipsisedParameters = true, }; Utils.FillEnumInfo(optionalInfo, methodInfo.ReturnType); optionalInfo.HasParams = optionalInfo.ParameterInfos.Any(info => info.IsParams); ret.Add(optionalInfo); } else { break; } } } else if (methodBase is ConstructorInfo) { var constructorInfo = methodBase as ConstructorInfo; OverloadGenInfo mainInfo = new OverloadGenInfo() { ParameterInfos = constructorInfo.GetParameters().Select(info => ParameterGenInfo.FromParameterInfo(info)).ToArray(), TypeName = constructorInfo.DeclaringType.GetFriendlyName(), IsVoid = false, EllipsisedParameters = false, }; mainInfo.HasParams = mainInfo.ParameterInfos.Any(info => info.IsParams); ret.Add(mainInfo); var ps = constructorInfo.GetParameters(); for (int i = ps.Length - 1; i >= 0; i--) { OverloadGenInfo optionalInfo = null; if (ps[i].IsOptional || mainInfo.ParameterInfos[i].IsParams) { optionalInfo = new OverloadGenInfo() { ParameterInfos = constructorInfo.GetParameters().Select(info => ParameterGenInfo.FromParameterInfo(info)).Take(i).ToArray(), TypeName = constructorInfo.DeclaringType.GetFriendlyName(), IsVoid = false, EllipsisedParameters = true, }; optionalInfo.HasParams = optionalInfo.ParameterInfos.Any(info => info.IsParams); ret.Add(optionalInfo); } else { break; } } } else { throw new NotSupportedException(); } return(ret); }