Exemple #1
0
        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);
                }
            }
        }