private void EnqueueType(OrderedDictionary <TypeIdentifier, TypeDefinition> queue, TypeReference typeReference, LinkedListNode <TypeIdentifier> before = null) { var typedef = TypeUtil.GetTypeDefinition(typeReference); if (typedef == null) { return; } var identifier = new TypeIdentifier(typedef); if (queue.ContainsKey(identifier)) { return; } if (!TypeInformation.ContainsKey(identifier)) { LinkedListNode <TypeIdentifier> before2; if (before != null) { before2 = queue.EnqueueBefore(before, identifier, typedef); } else { before2 = queue.Enqueue(identifier, typedef); } if (typedef.BaseType != null) { EnqueueType(queue, typedef.BaseType, before2); } if (typedef.DeclaringType != null) { EnqueueType(queue, typedef.DeclaringType, before2); } foreach (var iface in typedef.Interfaces) { EnqueueType(queue, iface, before2); } } }