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)); } } }