Beispiel #1
0
        internal void FinalizeDefiniton()
        {
            var genericParameters = GenericTypeDefinition.GenericParameters;

            if (GenericTypeDefinition.BaseType != null)
            {
                BaseType = (DeclaringTypeData)GenericTypeDefinition.BaseType.ReplaceGenericTypeParameters(genericParameters, GenericArguments);
            }

            ImplementedInterfaces = new ImplementedInterfacesCollection(
                GenericTypeDefinition.ImplementedInterfaces.Select(i => (DeclaringTypeData)i.ReplaceGenericTypeParameters(genericParameters, GenericArguments))
                );

            if (TypeKind == Microsoft.CodeAnalysis.TypeKind.Delegate)
            {
                var invokeMethod = (MethodData)GenericTypeDefinition.GetMethod("Invoke").ReplaceGenericTypeParameters(genericParameters, GenericArguments);
                DelegateParameters          = invokeMethod.Parameters;
                DelegateReturnType          = invokeMethod.Type;
                DelegateReturnTypeIsDynamic = invokeMethod.IsTypeDynamic;
            }
            else
            {
                foreach (var member in GenericTypeDefinition.GetMembers().Where(m => m.MetadataItemKind != MetadataItemKinds.TypeDefinition))
                {
                    AddMember(member.ReplaceGenericTypeParameters(genericParameters, GenericArguments));
                }
            }
        }