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); }
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); }