private FieldInfo GetMappedFieldInfo(IType targetType, IField source)
{
FieldInfo fi = GetFieldInfo(source);
if (!fi.DeclaringType.IsGenericTypeDefinition)
{
// HACK: .NET Reflection doesn't allow calling TypeBuilder.GetField(Type, FieldInfo)
// on types that aren't generic definitions (like open constructed types), so we have
// to manually find the corresponding FieldInfo on the declaring type's definition
// before mapping it
Type definition = fi.DeclaringType.GetGenericTypeDefinition();
fi = definition.GetField(fi.Name);
}
return TypeBuilder.GetField(GetSystemType(targetType), fi);
}