Fix crash when replicating C# object with NetworkReplicated attribute on derived generic class

#1988
This commit is contained in:
2024-02-10 17:26:10 +01:00
parent c646007882
commit 4a19657e75
@@ -802,7 +802,7 @@ namespace Flax.Build.Plugins
// Serialize base type
if (type.BaseType != null && type.BaseType.FullName != "System.ValueType" && type.BaseType.FullName != "FlaxEngine.Object" && type.BaseType.CanBeResolved())
{
GenerateSerializeCallback(module, il, type.BaseType.Resolve(), serialize);
GenerateSerializeCallback(module, il, type.BaseType, serialize);
}
var ildContext = new DotnetIlContext(il);
@@ -874,12 +874,13 @@ namespace Flax.Build.Plugins
return m;
}
private static void GenerateSerializeCallback(ModuleDefinition module, ILProcessor il, TypeDefinition type, bool serialize)
private static void GenerateSerializeCallback(ModuleDefinition module, ILProcessor il, TypeReference type, bool serialize)
{
if (type.IsScriptingObject())
{
// NetworkReplicator.InvokeSerializer(typeof(<type>), instance, stream, <serialize>)
il.Emit(OpCodes.Ldtoken, module.ImportReference(type));
module.ImportReference(type);
il.Emit(OpCodes.Ldtoken, type);
module.GetType("System.Type", out var typeType);
var getTypeFromHandle = typeType.Resolve().GetMethod("GetTypeFromHandle");
il.Emit(OpCodes.Call, module.ImportReference(getTypeFromHandle));