Hi all,
The bug was fixed some time ago, but didn’t make it into the 4.19 release. It will make it into the 4.20 release though.
For a fix in the meantime, your UObjectCompiledInDefer() function should look like this:
void UObjectCompiledInDefer(UClass *(*InRegister)(), UClass *(*InStaticClass)(), const TCHAR* Name, const TCHAR* PackageName, bool bDynamic, const TCHAR* DynamicPathName, void (*InInitSearchableValues) (TMap<FName, FName>&))
{
if (!bDynamic)
{
#if WITH_HOT_RELOAD
// Either add all classes if not hot-reloading, or those which have changed
TMap<FName, FFieldCompiledInInfo*>& DeferMap = GetDeferRegisterClassMap();
if (!GIsHotReload || DeferMap.FindChecked(Name)->bHasChanged)
#endif
{
FString NoPrefix(RemoveClassPrefix(Name));
NotifyRegistrationEvent(PackageName, *NoPrefix, ENotifyRegistrationType::NRT_Class, ENotifyRegistrationPhase::NRP_Added, (UObject *(*)())(InRegister), false);
NotifyRegistrationEvent(PackageName, *(FString(DEFAULT_OBJECT_PREFIX) + NoPrefix), ENotifyRegistrationType::NRT_ClassCDO, ENotifyRegistrationPhase::NRP_Added, (UObject *(*)())(InRegister), false);
TArray<UClass *(*)()>& DeferredCompiledInRegistration = GetDeferredCompiledInRegistration();
checkSlow(!DeferredCompiledInRegistration.Contains(InRegister));
DeferredCompiledInRegistration.Add(InRegister);
}
}
else
{
FDynamicClassStaticData ClassFunctions;
ClassFunctions.ZConstructFn = InRegister;
ClassFunctions.StaticClassFn = InStaticClass;
if (InInitSearchableValues)
{
InInitSearchableValues(ClassFunctions.SelectedSearchableValues);
}
GetDynamicClassMap().Add(FName(DynamicPathName), ClassFunctions);
FString OriginalPackageName = DynamicPathName;
check(OriginalPackageName.EndsWith(Name));
OriginalPackageName.RemoveFromEnd(FString(Name));
check(OriginalPackageName.EndsWith(TEXT(".")));
OriginalPackageName.RemoveFromEnd(FString(TEXT(".")));
NotifyRegistrationEvent(*OriginalPackageName, Name, ENotifyRegistrationType::NRT_Class, ENotifyRegistrationPhase::NRP_Added, (UObject *(*)())(InRegister), true);
NotifyRegistrationEvent(*OriginalPackageName, *(FString(DEFAULT_OBJECT_PREFIX) + Name), ENotifyRegistrationType::NRT_ClassCDO, ENotifyRegistrationPhase::NRP_Added, (UObject *(*)())(InRegister), true);
}
}
Hope this helps,
Steve