private DumpTypeRef(DumpTypeRef other, GenericTypeMap genericTypes) { Namespace = other.Namespace; Name = other.Name; IsGenericInstance = true; IsGenericTemplate = false; var newGenerics = new List <TypeRef>(other.Generics.Count); foreach (var genericParameter in other.Generics) { if (genericParameter.IsGeneric) { newGenerics.Add(genericParameter.MakeGenericInstance(genericTypes)); } else if (genericTypes.TryGetValue(genericParameter, out var genericArgument)) { newGenerics.Add(genericArgument); } else { throw new UnresolvedTypeException(genericParameter, other); } } Generics = newGenerics; OriginalDeclaringType = other.DeclaringType; UnNested = other.UnNested; ElementType = other.ElementType; }
private static void AddType(Type type) { string shortName = type.Name; if (TypeMap.ContainsKey(shortName)) { shortName = type.FullName; if (TypeMap.ContainsKey(shortName)) { return; } } ShortNames.Add(type, shortName); TypeMap.Add(shortName, type); if (!type.IsGenericType) { return; } GenericTypeMap.Add(shortName.Replace("`1", ""), type); GenericShortNames.Add(type, shortName.Replace("`1", "")); }
internal override TypeRef MakeGenericInstance(GenericTypeMap genericTypes) => IsGeneric ? new DumpTypeRef(this, genericTypes) : this;