- Timestamp:
- 12/06/12 12:07:31 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Persistence/3.3/Auxiliary/TypeName.cs
r8698 r9005 51 51 52 52 /// <summary> 53 /// Gets or sets the number of generic args for 54 /// each class in a series of nested classes. 55 /// </summary> 56 [Storable] 57 public List<int> GenericArgCounts { get; private set; } 58 59 /// <summary> 53 60 /// Gets or sets the generic args. 54 61 /// </summary> … … 103 110 /// <param name="nameSpace">The namespace.</param> 104 111 /// <param name="className">Name of the class.</param> 105 internal TypeName(string nameSpace, string className ) {112 internal TypeName(string nameSpace, string className, List<int> genericArgCounts=null) { 106 113 Namespace = nameSpace; 107 114 ClassName = className; … … 109 116 MemoryMagic = ""; 110 117 AssemblyAttribues = new Dictionary<string, string>(); 118 if (genericArgCounts != null) 119 GenericArgCounts = genericArgCounts.ToList(); 111 120 } 112 121 113 122 internal TypeName(TypeName typeName, string className = null, string nameSpace = null) { 114 Namespace = typeName.Namespace;115 ClassName = typeName.ClassName;123 Namespace = nameSpace ?? typeName.Namespace; 124 ClassName = className ?? typeName.ClassName; 116 125 GenericArgs = new List<TypeName>(typeName.GenericArgs); 117 126 AssemblyAttribues = new Dictionary<string, string>(typeName.AssemblyAttribues); … … 119 128 AssemblyName = typeName.AssemblyName; 120 129 IsReference = typeName.IsReference; 121 if (nameSpace != null) 122 Namespace = nameSpace; 123 if (className != null) 124 ClassName = className; 130 if (typeName.GenericArgCounts != null) 131 GenericArgCounts = typeName.GenericArgCounts.ToList(); 125 132 } 126 133 … … 148 155 /// </returns> 149 156 public string ToString(bool full, bool includeAssembly) { 150 StringBuilder sb = new StringBuilder();157 var sb = new StringBuilder(); 151 158 if (!string.IsNullOrEmpty(Namespace)) 152 159 sb.Append(Namespace).Append('.'); 153 sb.Append(ClassName); 160 if (GenericArgCounts != null) { 161 sb.Append(string.Join("+", 162 ClassName 163 .Split('+') 164 .Zip(GenericArgCounts, (n, c) => 165 c > 0 ? String.Format("{0}`{1}", n, c) : n))); 166 } else { 167 sb.Append(ClassName); 168 if (IsGeneric) 169 sb.Append('`').Append(GenericArgs.Count); 170 } 154 171 if (IsGeneric) { 155 sb.Append('`').Append(GenericArgs.Count).Append('['); 156 bool first = true; 157 foreach (TypeName t in GenericArgs) { 158 if (first) 159 first = false; 160 else 161 sb.Append(','); 162 sb.Append('[').Append(t.ToString(full)).Append(']'); 163 } 172 sb.Append('['); 173 sb.Append(String.Join(",", GenericArgs.Select(a => 174 string.Format("[{0}]", a.ToString(full))))); 164 175 sb.Append(']'); 165 176 } … … 174 185 } 175 186 176 public string GetTypeNameInCode(HashSet<string> omitNamespaces) { 177 StringBuilder sb = new StringBuilder(); 178 if (!string.IsNullOrEmpty(Namespace) && omitNamespaces == null || !omitNamespaces.Contains(Namespace)) 179 sb.Append(Namespace).Append('.'); 180 sb.Append(ClassName); 181 if (IsGeneric) { 182 sb.Append("<"); 183 sb.Append( 184 string.Join(", ", 185 GenericArgs 186 .Select(a => a.GetTypeNameInCode(omitNamespaces)) 187 .ToArray())); 188 sb.Append(">"); 187 private IEnumerable<string> GetNestedClassesInCode(HashSet<string> omitNamespaces, bool includeAllNamespaces) { 188 var i = 0; 189 foreach (var pair in ClassName.Split('+').Zip(GenericArgCounts, (n, c) => new {n, c})) { 190 if (pair.c == 0) { 191 yield return pair.n; 192 } 193 else { 194 yield return string.Format("{0}<{1}>", 195 pair.n, 196 string.Join(",", 197 GenericArgs 198 .GetRange(i, pair.c) 199 .Select(a => a.GetTypeNameInCode(omitNamespaces, includeAllNamespaces)))); 200 i += pair.c; 201 } 202 } 203 } 204 205 private string GetTypeNameInCode(HashSet<string> omitNamespaces, bool includeNamespaces) { 206 var sb = new StringBuilder(); 207 if (!string.IsNullOrEmpty(Namespace) && 208 (omitNamespaces == null && includeNamespaces) || 209 omitNamespaces != null && !omitNamespaces.Contains(Namespace)) 210 sb.Append(Namespace).Append('.'); 211 if (GenericArgCounts != null) { 212 sb.Append(string.Join(".", GetNestedClassesInCode(omitNamespaces, includeNamespaces))); 213 } else { 214 sb.Append(ClassName); 215 if (IsGeneric) { 216 sb.Append("<"); 217 sb.Append( 218 string.Join(", ", 219 GenericArgs 220 .Select(a => a.GetTypeNameInCode(omitNamespaces, includeNamespaces)) 221 .ToArray())); 222 sb.Append(">"); 223 } 189 224 } 190 225 sb.Append(MemoryMagic); … … 192 227 } 193 228 194 public string GetTypeNameInCode(bool includeAllNamespaces) { 195 StringBuilder sb = new StringBuilder(); 196 if (includeAllNamespaces) 197 sb.Append(Namespace).Append('.'); 198 sb.Append(ClassName); 199 if (IsGeneric) { 200 sb.Append("<"); 201 sb.Append( 202 string.Join(", ", 203 GenericArgs 204 .Select(a => a.GetTypeNameInCode(includeAllNamespaces)) 205 .ToArray())); 206 sb.Append(">"); 207 } 208 sb.Append(MemoryMagic); 209 return sb.ToString(); 229 public string GetTypeNameInCode(HashSet<string> omitNamespaces) { 230 return GetTypeNameInCode(omitNamespaces, false); 231 } 232 233 public string GetTypeNameInCode(bool includeNamespaces) { 234 return GetTypeNameInCode(null, includeNamespaces); 210 235 } 211 236
Note: See TracChangeset
for help on using the changeset viewer.