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;
        }
Example #2
0
        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;