Avoid an assert experienced when wrapped object pointers are used in named values via the StructuredArchive's FArchiveFromStructuredArchive adapter. This change ensures that the wrapped pointers are serialized directly instead of through the adapter. The groundwork for avoiding the adapter was already there, but what was missing was the operator necessary to convert from the templated TObjectPtr class to the private non-templated FObjectPtr base class used by serialization. I suspect this same issue may also be happening for other types like TLazyObjectPtr which don't implement the necessary operator to convert to their private base type used in serialization.
#jira UE-106345
#rb devin.doucette
#fyi johan.torp
[CL 15162153 by Zousar Shaker in ue5-main branch]
Change the FObjectPtrProperty reflection type to derive from FObjectProperty type (instead of TFObjectPropertyBase) to avoid incompatibility with code that uses the reflection system to operate on specifically FObjectProperty fields. Also removed the override of the GetID virtual method to allow ObjectPtr properties to have the same identifying name as Object properties. This ensures there's no serialization incompatibility when moving between Object<->ObjectPtr or ObjectPtr->(Object compatible type) in the serialization and reflection code.
#jira UE-106329
#rb devin.doucette
[CL 15132777 by Zousar Shaker in ue5-main branch]
1) Save1 had reversed condition around SetLoadedPath: it _should_ be done if IsMountedPath.
2) Save2 needs the calls to SetPersistentGuid and SetLoadedPath that were added to Save1.
#rb Francis.Hurteau
#rnx
[CL 15132572 by Matt Peters in ue5-main branch]
Change cast of wrapped pointer to return raw pointer instead of wrapped pointer. This is because the cast may return an IInterface instead of a UObject, and TObjectPtr<IInterface> is invalid and can result in some code (eg: access tracking) interpreting the pointer as a UObject, when that is not valid. Could be modified in the future to return a wrapped pointer if the type being cast to is a UObject, and a raw pointer if the type being cast to is an IInterface.
#rb devin.doucette
[CL 15130801 by Zousar Shaker in ue5-main branch]
I'm unable to repro a reported compilation issue on Xbox but CL 14587450 addressed the same issue for Hololens by adding a platform exclusion to these static asserts. I've changed it to exclude all Microsoft platforms rather than be piecemeal.
#rb David.Harvey
#jira none
[CL 15106695 by eric mcdaniel in ue5-main branch]
warning V1062: The 'XYZ' class defines a custom 'new' operator. The 'delete' operator must also be defined.
#rb steve.robb
#jira UE-91644
[CL 15019000 by Tim Smith in ue5-main branch]
If FPackageName::DoesPackageExist uses DoesPackageExistOverrideDelegate to find the package, it needs to set the extension to a special marker EmptyExtension, so that IPackageResourceManagerFile sends the filename without an extension to IFileManager rather than searching for one of the regular extensions.
#rb Francis.Hurteau
#rnx
[CL 15016768 by Matt Peters in ue5-main branch]
Fix DirectoriesToAlwaysCook and DirectoriesToNeverCook not recognizing a path if it is the roots of a plugin content directory without a terminating / (e.g. /PluginRoot instead of /PluginRoot/).
Change all FPackageName functions that find the mount point for a filepath or packagename to find the mountpoint even if the input path is the root path of the mountpoint but without the terminating slash.
#rb Devin.Doucette
#rnx
[CL 15016718 by Matt Peters in ue5-main branch]
- FUniqueBuffer has been added as a single-ownership mutable buffer.
- FSharedBuffer remains a shared-ownership buffer and is now always immutable. In addition to the factory functions that were available previously, it can be also be created by moving FUniqueBuffer.
- FSharedBuffer is now used directly rather than requiring several pointer and reference types.
- FWeakSharedBuffer has been added as a weak reference to a shared buffer, in place of the previous weak pointer types.
- FBufferOwner has been promoted out of FSharedBuffer and can be used for advanced buffer management, including lazy buffer materialization where allocating and/or populating the buffer may be deferred until the buffer is accessed.
#jira none
#rb Zousar.Shaker
#fyi Paul.Chipchase
#rnx
[CL 14939736 by Devin Doucette in ue5-main branch]