Exemplo n.º 1
0
                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);
                }
Exemplo n.º 2
0
 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;
 }
Exemplo n.º 3
0
                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);
                }