Esempio n. 1
0
        public static AstType ConvertToTypeReference(this MonoDevelop.Projects.Dom.IReturnType returnType)
        {
            string primitiveType;

            if (TypeTable.TryGetValue(returnType.DecoratedFullName, out primitiveType))
            {
                return(new PrimitiveType(primitiveType));
            }

            AstType result = null;

            if (!string.IsNullOrEmpty(returnType.Namespace))
            {
                result = new SimpleType(returnType.Namespace);
            }
            foreach (var part in returnType.Parts)
            {
                if (result == null)
                {
                    var st = new SimpleType(part.Name);
                    foreach (var type in part.GenericArguments.Select(ga => ConvertToTypeReference(ga)))
                    {
                        st.AddChild(type, SimpleType.Roles.TypeArgument);
                    }
                    result = st;
                }
                else
                {
                    var mt = new ICSharpCode.NRefactory.CSharp.MemberType()
                    {
                        Target     = result,
                        MemberName = part.Name
                    };
                    foreach (var type in part.GenericArguments.Select(ga => ConvertToTypeReference(ga)))
                    {
                        mt.AddChild(type, SimpleType.Roles.TypeArgument);
                    }
                    result = mt;
                }
            }

            /*
             * List<TypeReference> genericTypes = new List<TypeReference> ();
             * foreach (MonoDevelop.Projects.Dom.IReturnType genericType in returnType.GenericArguments) {
             *      genericTypes.Add (ConvertToTypeReference (genericType));
             * }
             * TypeReference result = new AstType (returnType.FullName, genericTypes);
             * result.IsKeyword = true;
             * result.PointerNestingLevel = returnType.PointerNestingLevel;
             * if (returnType.ArrayDimensions > 0) {
             *      int[] rankSpecfier = new int[returnType.ArrayDimensions];
             *      for (int i = 0; i < returnType.ArrayDimensions; i++) {
             *              rankSpecfier[i] = returnType.GetDimension (i);
             *      }
             *      result.RankSpecifier = rankSpecfier;
             * }*/
            return(result);
        }
        static string[] GetPossibleName(MonoDevelop.Projects.Dom.IReturnType returnType)
        {
            switch (returnType.FullName)
            {
            case "System.Byte":
            case "System.SByte":
                return(new [] { "b" });

            case "System.Int16":
            case "System.UInt16":
            case "System.Int32":
            case "System.UInt32":
            case "System.Int64":
            case "System.UInt64":
                return(new [] { "i", "j", "k", "l" });

            case "System.Boolean":
                return(new [] { "b" });

            case "System.DateTime":
                return(new [] { "date", "d" });

            case "System.Char":
                return(new [] { "ch", "c" });

            case "System.String":
                return(new [] { "str", "s" });

            case "System.Exception":
                return(new [] { "e" });

            case "System.Object":
                return(new [] { "obj", "o" });

            case "System.Func":
                return(new [] { "func", "f" });

            case "System.Action":
                return(new [] { "action", "act" });
            }
            if (Char.IsLower(returnType.Name [0]))
            {
                return new [] { "a" + Char.ToUpper(returnType.Name[0]) + returnType.Name.Substring(1) }
            }
            ;

            return(new [] { Char.ToLower(returnType.Name[0]) + returnType.Name.Substring(1) });
        }
 static string CreateVariableName(MonoDevelop.Projects.Dom.IReturnType returnType, MonoDevelop.Refactoring.ExtractMethod.VariableLookupVisitor visitor)
 {
     string[] possibleNames = GetPossibleName(returnType);
     foreach (string name in possibleNames)
     {
         if (!VariableExists(visitor, name))
         {
             return(name);
         }
     }
     foreach (string name in possibleNames)
     {
         for (int i = 1; i < 99; i++)
         {
             if (!VariableExists(visitor, name + i.ToString()))
             {
                 return(name + i.ToString());
             }
         }
     }
     return("a" + returnType.Name);
 }
Esempio n. 4
0
        public static TypeReference ConvertToTypeReference(this MonoDevelop.Projects.Dom.IReturnType returnType)
        {
            List <TypeReference> genericTypes = new List <TypeReference> ();

            foreach (MonoDevelop.Projects.Dom.IReturnType genericType in returnType.GenericArguments)
            {
                genericTypes.Add(ConvertToTypeReference(genericType));
            }
            TypeReference result = new TypeReference(returnType.FullName, genericTypes);

            result.IsKeyword           = true;
            result.PointerNestingLevel = returnType.PointerNestingLevel;
            if (returnType.ArrayDimensions > 0)
            {
                int[] rankSpecfier = new int[returnType.ArrayDimensions];
                for (int i = 0; i < returnType.ArrayDimensions; i++)
                {
                    rankSpecfier[i] = returnType.GetDimension(i);
                }
                result.RankSpecifier = rankSpecfier;
            }
            return(result);
        }