UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SaveContext.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
6#include "HAL/FileManager.h"
8#include "IO/IoHash.h"
10#include "Misc/Optional.h"
11#include "Misc/PackageName.h"
18#include "Templates/PimplPtr.h"
19#include "Templates/UniquePtr.h"
21#include "UObject/LinkerSave.h"
22#include "UObject/NameTypes.h"
25#include "UObject/Package.h"
26#include "UObject/SavePackage.h"
29#include "UObject/UObjectHash.h"
31
32namespace Verse { struct VCell; }
33
71
73{
74 return GetTypeHash(Export.Obj);
75}
76
81enum class ESaveRealm : uint32
82{
83 Game = 0,
85 Editor,
88};
89
100
109
124
126{
127
130{
131 UObject* Object = nullptr;
132 FProperty* Property = nullptr;
133};
134
137{
145 FObjectStatus(const FObjectStatus&) = default;
149 bool HasTransientFlag(const UObject* InObject)
150 {
151 check(InObject);
152 return InObject->HasAnyFlags(RF_Transient);
153 }
170 {
172 {
174 }
175 return bIsInSavePackage;
176 }
177
185 bool bEditorOnly : 1;
190};
191
192}
195{
196
198 {
200
201 if (TempFilename.IsSet())
202 {
203 IFileManager::Get().Delete(*TempFilename.GetValue());
204 }
205 if (TextFormatTempFilename.IsSet())
206 {
207 IFileManager::Get().Delete(*TextFormatTempFilename.GetValue());
208 }
209 }
210
212 {
213 DirectImports.Add(InObject);
214 }
215
217 {
218 Imports.Add(InObject);
219 }
220
222 {
223 Exports.Add(MoveTemp(InTagObj));
224 }
225
227 {
228 Excluded.Add(InObject);
229 }
230
232 {
233 NotExcluded.Add(InObject);
234 }
235
236 bool IsImport(TObjectPtr<UObject> InObject) const
237 {
238 return Imports.Contains(InObject);
239 }
240
241 bool IsExport(TObjectPtr<UObject> InObject) const
242 {
243 return Exports.Contains(InObject);
244 }
245
246 bool IsIncluded(TObjectPtr<UObject> InObject) const
247 {
248 return IsImport(InObject) || IsExport(InObject);
249 }
250
255 bool IsExcluded(TObjectPtr<UObject> InObject) const
256 {
257 return Excluded.Contains(InObject);
258 }
259
261 {
262 return NotExcluded.Contains(InObject);
263 }
264
265 void AddCellImport(Verse::VCell* InCell)
266 {
267 CellImports.Add(InCell);
268 }
269
270 void AddCellExport(Verse::VCell* InCell)
271 {
272 CellExports.Add(InCell);
273 }
274
275 bool IsCellImport(Verse::VCell* InCell) const
276 {
277 return CellImports.Contains(InCell);
278 }
279
280 bool IsCellExport(Verse::VCell* InCell) const
281 {
282 return CellExports.Contains(InCell);
283 }
284
285 bool IsCellIncluded(Verse::VCell* InCell) const
286 {
288 }
289
291 {
292 return Exports;
293 }
294
296 {
297 return Exports;
298 }
299
301 {
302 return PreloadDependencies;
303 }
304
309
311 {
312 return DirectImports;
313 }
314
316 {
317 return Imports;
318 }
319
321 {
322 return CellExports;
323 }
324
326 {
327 return CellImports;
328 }
329
331 {
332 return SoftPackageReferenceList;
333 }
334
336 {
337 return SoftPackageReferenceList;
338 }
339
341 {
342 return UntrackedSoftPackageReferenceList;
343 }
344
346 {
347 return UntrackedSoftPackageReferenceList;
348 }
349
351 {
352 return SearchableNamesObjectMap;
353 }
354
356 {
357 return SearchableNamesObjectMap;
358 }
359
361 {
362 return NamesReferencedFromExportData;
363 }
364
366 {
367 return NamesReferencedFromExportData;
368 }
369
371 {
372 return NamesReferencedFromPackageHeader;
373 }
374
376 {
377 return NamesReferencedFromPackageHeader;
378 }
379
381 {
382 return SoftObjectPathList;
383 }
384
386 {
387 return SoftObjectPathList;
388 }
389
391 {
392 return ExportObjectDependencies;
393 }
394
396 {
397 return ExportObjectDependencies;
398 }
399
401 {
402 return ExportNativeObjectDependencies;
403 }
404
406 {
407 return ExportNativeObjectDependencies;
408 }
409
411 {
412 return ExportCellDependencies;
413 }
414
416 {
417 return ExportCellDependencies;
418 }
419
421 {
422 return CellExportObjectDependencies;
423 }
424
426 {
427 return CellExportObjectDependencies;
428 }
429
431 {
432 return CellExportCellDependencies;
433 }
434
436 {
437 return CellExportCellDependencies;
438 }
439
440 bool NameExists(const FName& Name) const
441 {
442 // Normally FName comparisons would be case insensitive and done using the comparisonIndex however
443 // NamesReferencedFromExportData and NamesReferencedFromPackageHeader contain DisplayIndices and the passed in 'Name'
444 // comes from memory (rather than disk) where we will not have case-sensitive descrepancies. Using the more restrictive
445 // case-sensitive search in this case is valid and faster.
446 const FNameEntryId DisplayId = Name.GetDisplayIndex();
447 return NamesReferencedFromExportData.Find(DisplayId) || NamesReferencedFromPackageHeader.Find(DisplayId);
448 }
449
451 {
452 return Linker.Get();
453 }
454
459
461 {
462 bool bSuccess = true;
463 if (Linker)
464 {
465 bSuccess = Linker->CloseAndDestroySaver();
466 }
467 StructuredArchive.Reset();
468 Formatter.Reset();
469 TextFormatArchive.Reset();
470 return bSuccess;
471 }
472
474 {
475 return TextFormatArchive.Get();
476 }
477
482
484 {
485 return Formatter.Get();
486 }
487
492
494 {
495 return StructuredArchive.Get();
496 }
497
502
504 {
505 return TempFilename;
506 }
507
509 {
510 TempFilename = MoveTemp(InTemp);
511 }
512
514 {
515 return TextFormatTempFilename;
516 }
517
519 {
520 TextFormatTempFilename = MoveTemp(InTemp);
521 }
522
523private:
524 friend class FSaveContext;
525
528
530 TUniquePtr<FArchive> TextFormatArchive;
532 TUniquePtr<FStructuredArchive> StructuredArchive;
533
535 TOptional<FString> TempFilename;
536 TOptional<FString> TextFormatTempFilename;
537
538 // Set of objects excluded (import or exports) through marks or otherwise (i.e. transient flags, etc)
539 TSet<TObjectPtr<UObject>> Excluded;
540 // Set of objects not excluded through marks or otherwise (i.e. transient flags, etc) while not being marked specifically included yet
541 TSet<TObjectPtr<UObject>> NotExcluded;
542 // Set of objects marked as export
544 // Set of objects marked as import
546 // Set of EDL/ZenLoader dependencies that were written into the package for runtime loading
548 // Set of objects that were referenced directly from an export. Some imports are transitively added by
549 // FPackageHarvester::ProcessImport (Outer, Class, CDO, CDO subobjects, others?) for long-standing reasons
550 // (performance, loading behavior, other?)/ But some features such as allowed-import access warnings need
551 // to consider only the direct imports.
552 TSet<TObjectPtr<UObject>> DirectImports;
553 // Set of Verse cells marked as export
554 TSet<Verse::VCell*> CellExports;
555 // Set of Verse cells marked as import
556 TSet<Verse::VCell*> CellImports;
557 // Set of names referenced from export serialization
558 TSet<FNameEntryId> NamesReferencedFromExportData;
559 // Set of names referenced from the package header (import and export table object names etc)
560 TSet<FNameEntryId> NamesReferencedFromPackageHeader;
561 // Set of SoftObjectPath harvested in this realm
562 TSet<FSoftObjectPath> SoftObjectPathList;
563 // List of soft package reference found
564 TSet<FName> SoftPackageReferenceList;
565 // List of soft package reference not in the SoftPackageReferenceList because they are NeverCollect or EditorOnly.
566 // They are saved here anyway in case there is a redirection. The redirection will be saved in the build dependencies so
567 // incremental cook can detect when the redirection changed.
568 TSet<FName> UntrackedSoftPackageReferenceList;
569 // Map of objects to their list of searchable names
570 TMap<TObjectPtr<UObject>, TArray<FName>> SearchableNamesObjectMap;
571 // Map of objects to their dependencies
572 TMap<TObjectPtr<UObject>, TSet<TObjectPtr<UObject>>> ExportObjectDependencies;
573 // Map of objects to their native dependencies
574 TMap<TObjectPtr<UObject>, TSet<TObjectPtr<UObject>>> ExportNativeObjectDependencies;
575 // Map of objects to their cell dependencies
576 TMap<TObjectPtr<UObject>, TSet<Verse::VCell*>> ExportCellDependencies;
577 // Map of cells to their object dependencies
578 TMap<Verse::VCell*, TSet<TObjectPtr<UObject>>> CellExportObjectDependencies;
579 // Map of cells to their cell dependencies
580 TMap<Verse::VCell*, TSet<Verse::VCell*>> CellExportCellDependencies;
581};
582
583
588{
589public:
591 {
593 : Context(InContext)
594 , PreviousHarvestingRealm(InContext.CurrentHarvestingRealm)
595 {
596 Context.CurrentHarvestingRealm = InHarvestingRealm;
597 }
598
600 {
601 Context.CurrentHarvestingRealm = PreviousHarvestingRealm;
602 }
603
604 private:
605 FSaveContext& Context;
606 ESaveRealm PreviousHarvestingRealm;
607 };
608
609public:
611 : Package(InPackage)
612 , Asset(InAsset)
613 , Filename(InFilename)
614 , SaveArgs(InSaveArgs)
615 , PackageWriter(InSaveArgs.SavePackageContext ? InSaveArgs.SavePackageContext->PackageWriter : nullptr)
616 , ObjectSavePackageSerializeContext(ObjectSaveContext)
617 , ArchiveSavePackageData(ObjectSavePackageSerializeContext, nullptr, nullptr)
618 , GameRealmExcludedObjectMarks(GetExcludedObjectMarksForGameRealm(SaveArgs.GetTargetPlatform()))
619 {
620 // Assumptions & checks
621 check(InPackage);
623 // if we are cooking we should be doing it in the editor and with a PackageWriter
625 checkf(!IsCooking() || PackageWriter, TEXT("Cook saves require an IPackageWriter"));
626
627 // Store initial state
628 InitialPackageFlags = Package->GetPackageFlags();
629
631 if (PackageWriter)
632 {
634 }
635
636 // if the asset wasn't provided, fetch it from the package
637 if (Asset == nullptr)
638 {
639 Asset = InPackage->FindAssetInPackage();
640 }
641
642 TargetPackagePath = FPackagePath::FromLocalPath(InFilename);
643 if (TargetPackagePath.GetHeaderExtension() == EPackageExtension::Unspecified)
644 {
646 }
647
648 bCanUseUnversionedPropertySerialization = CanUseUnversionedPropertySerialization(SaveArgs.GetTargetPlatform());
649 bTextFormat = FString(Filename).EndsWith(FPackageName::GetTextAssetPackageExtension()) || FString(Filename).EndsWith(FPackageName::GetTextMapPackageExtension());
650 static const IConsoleVariable* ProcessPrestreamingRequests = IConsoleManager::Get().FindConsoleVariable(TEXT("s.ProcessPrestreamingRequests"));
652 {
653 bIsProcessingPrestreamPackages = ProcessPrestreamingRequests->GetInt() > 0;
654 }
655 static const IConsoleVariable* FixupStandaloneFlags = IConsoleManager::Get().FindConsoleVariable(TEXT("save.FixupStandaloneFlags"));
657 {
658 bIsFixupStandaloneFlags = FixupStandaloneFlags->GetInt() != 0;
659 }
660
661 ObjectSaveContext.Set(InPackage, GetTargetPlatform(), TargetPackagePath, SaveArgs.SaveFlags);
662 if (SaveArgs.ArchiveCookData)
663 {
664 ObjectSaveContext.CookType = SaveArgs.ArchiveCookData->CookContext.GetCookType();
665 ObjectSaveContext.CookingDLC = SaveArgs.ArchiveCookData->CookContext.GetCookingDLC();
666#if WITH_EDITOR
667 ObjectSaveContext.CookInfo = SaveArgs.ArchiveCookData->CookContext.GetCookInfo();
668#endif
669 }
670 ArchiveSavePackageData.TargetPlatform = ObjectSaveContext.TargetPlatform;
671 ArchiveSavePackageData.CookContext = SaveArgs.ArchiveCookData ? &SaveArgs.ArchiveCookData->CookContext : nullptr;
672 if (SaveArgs.InOutSaveOverrides)
673 {
674 ObjectSaveContext.SaveOverrides = MoveTemp(*SaveArgs.InOutSaveOverrides);
675 }
676 ObjectSaveContext.PackageWriter = PackageWriter;
677 if (PackageWriter)
678 {
680 }
681
682 // Setup the harvesting flags and generate the context for harvesting the package
683 SetupHarvestingRealms();
684 }
685
687 {
688 if (bPostSaveRootRequired && Asset)
689 {
690 UE::SavePackageUtilities::CallPostSaveRoot(Asset, ObjectSaveContext, bNeedPreSaveCleanup);
691 }
692
693 // Move the SaveOverrides that we copied and/or modified onto our ObjectSaveContext back to the
694 // InOut SaveOverrides parameter on the SaveArgs.
695 if (SaveArgs.InOutSaveOverrides)
696 {
697 *SaveArgs.InOutSaveOverrides = MoveTemp(ObjectSaveContext.SaveOverrides);
698 }
699 }
700
702 {
703 return InitialPackageFlags;
704 }
705
707 {
708 return SaveArgs;
709 }
710
712 {
713 return ArchiveSavePackageData;
714 }
715
717 {
718 return SaveArgs.GetTargetPlatform();
719 }
720
722 {
723 return Package;
724 }
725
727 {
728 return Asset;
729 }
730
731 const TCHAR* GetFilename() const
732 {
733 return Filename;
734 }
735
737 {
738 return TargetPackagePath;
739 }
740
742 {
743 switch (HarvestingRealm)
744 {
746 // When considering excluded objects for a platform, do not consider editor only object, not for platform, not for client and not for server objects in the optional context as excluded
748 case ESaveRealm::Game:
749 return GameRealmExcludedObjectMarks;
752 default:
753 checkNoEntry();
755 }
756 }
757
759 {
760 return SaveArgs.TopLevelFlags;
761 }
762
763 bool IsUsingSlowTask() const
764 {
765 return SaveArgs.bSlowTask;
766 }
767
769 {
770 return SaveArgs.Error;
771 }
772
774 {
775 return SaveArgs.FinalTimeStamp;
776 }
777
779 {
780 return SaveArgs.SavePackageContext;
781 }
782
783 bool IsCooking() const
784 {
785 return SaveArgs.IsCooking();
786 }
787
788 bool IsProceduralSave() const
789 {
790 return ObjectSaveContext.bProceduralSave;
791 }
792
794 {
795 return ObjectSaveContext.bUpdatingLoadedPath;
796 }
797
799 {
801 }
802
803 bool IsStripEditorOnly() const
804 {
806 }
807
809 {
810 return SaveArgs.bForceByteSwapping;
811 }
812
814 {
815 return SaveArgs.bWarnOfLongFilename;
816 }
817
818 bool IsTextFormat() const
819 {
820 return bTextFormat;
821 }
822
823 bool IsFromAutoSave() const
824 {
825 return !!(SaveArgs.SaveFlags & SAVE_FromAutosave);
826 }
827
828 bool IsSaveToMemory() const
829 {
830 return !!(SaveArgs.SaveFlags & SAVE_Async) || PackageWriter;
831 }
832
834 {
835 return !(SaveArgs.SaveFlags & SAVE_NoError);
836 }
837
838 bool IsKeepDirty() const
839 {
840 return !!(SaveArgs.SaveFlags & SAVE_KeepDirty);
841 }
842
844 {
845 return !!(SaveArgs.SaveFlags & SAVE_Unversioned_Native);
846 }
847
849 {
850 return !!(SaveArgs.SaveFlags & SAVE_Unversioned_Properties) && bCanUseUnversionedPropertySerialization;
851 }
852
853 bool IsSaveOptional() const
854 {
855 return !!(SaveArgs.SaveFlags & SAVE_Optional);
856 }
857
859 {
860 return bIsSaveAutoOptional;
861 }
862
863 bool IsConcurrent() const
864 {
865 return !!(SaveArgs.SaveFlags & SAVE_Concurrent);
866 }
867
869 {
870 return bIgnoreHeaderDiffs;
871 }
872
874 {
875 return bIsProcessingPrestreamPackages;
876 }
877
879 {
880 return bIsFixupStandaloneFlags;
881 }
882
884 {
885 return (SaveArgs.SaveFlags & ESaveFlags::SAVE_RehydratePayloads) != 0;
886 }
887
889 {
890 return bPostSaveRootRequired;
891 }
892
894 {
895 bPostSaveRootRequired = bInPostSaveRootRequired;
896 }
897
898 bool GetPreSaveCleanup() const
899 {
900 return bNeedPreSaveCleanup;
901 }
902
904 {
905 bNeedPreSaveCleanup = bInNeedPreSaveCleanup;
906 }
907
908 bool IsStubRequested() const
909 {
910 return bGenerateFileStub;
911 }
912
914 {
915 bGenerateFileStub = true;
916 }
917
919 {
920 return CurrentHarvestingRealm;
921 }
922
925
933
934 bool IsTransient(TObjectPtr<UObject> InObject);
937 bool bEmitWarning = true);
940 {
941 using namespace UE::SavePackageUtilities;
942 TUniquePtr<FObjectStatus>& ObjectStatus = ObjectStatusCache.FindOrAdd(InObject);
943 if (!ObjectStatus)
944 {
946 }
947 return *ObjectStatus;
948 }
949
951 {
952 using namespace UE::SavePackageUtilities;
953 if (const TUniquePtr<FObjectStatus>* ObjectStatus = ObjectStatusCache.Find(InObject))
954 {
955 return ObjectStatus->Get();
956 }
957 return nullptr;
958 }
959
961 {
962 HarvestedIllegalReferences.Add({ InFrom, InTo, InReason, MoveTemp(InOptionalReasonText) });
963 }
964
966 {
967 return HarvestedIllegalReferences;
968 }
969
970 void AddImport(UObject* InObject)
971 {
972 GetHarvestedRealm().AddImport(InObject);
973 }
974
975 void AddDirectImport(UObject* InObject)
976 {
978 }
979
984
985 void AddExcluded(UObject* InObject)
986 {
987 GetHarvestedRealm().AddExcluded(InObject);
988 }
989
990 bool IsImport(UObject* InObject) const
991 {
992 return GetHarvestedRealm().IsImport(InObject);
993 }
994
995 bool IsExport(UObject* InObject) const
996 {
997 return GetHarvestedRealm().IsExport(InObject);
998 }
999
1000 bool IsIncluded(TObjectPtr<UObject> InObject) const
1001 {
1002 return GetHarvestedRealm().IsIncluded(InObject);
1003 }
1004
1009
1014
1016 {
1017 return GetHarvestedRealm().GetImports();
1018 }
1019
1021 {
1023 }
1024
1029
1031 {
1033 }
1034
1036 {
1038 }
1039
1044
1049
1054
1059
1064
1066 {
1069 {
1070 return PackageBuildDependencies;
1071 }
1072 return EmptyList;
1073 }
1074
1088
1090
1095
1100
1105
1110
1115
1120
1125
1130
1135
1140
1145
1146 bool NameExists(const FName& Name) const
1147 {
1149 }
1150
1152 {
1153 return CustomVersions;
1154 }
1155
1157 {
1158 return PrestreamPackages;
1159 }
1160
1162 {
1163 return PrestreamPackages;
1164 }
1165
1167 {
1168 return PrestreamPackages.Contains(InPackage);
1169 }
1170
1172 {
1173 PrestreamPackages.Add(InPackage);
1174 }
1175
1180
1182 {
1184 for (const FHarvestedRealm& Realm : HarvestedRealms)
1185 {
1186 if (FLinkerSave* Linker = Realm.GetLinker())
1187 {
1188 Linkers.Add(Realm.GetLinker());
1189 }
1190 }
1191 return Linkers;
1192 }
1193
1195 {
1196 return GetHarvestedRealm().GetLinker();
1197 }
1198
1200 {
1202 check(Linker);
1203 Package->SetLinkerPackageVersion(Linker->UEVer());
1204 Package->SetLinkerLicenseeVersion(Linker->LicenseeUEVer());
1205 Package->SetLinkerCustomVersions(Linker->GetCustomVersions());
1206 }
1207
1209 {
1210 Package->SetFileSize(InFileSize);
1211 }
1212
1217
1219 {
1221 }
1222
1227
1232
1234 {
1236 }
1237
1242
1247
1252
1254 {
1256 }
1257
1262
1267
1272
1274
1276 {
1277 return ObjectSaveContext;
1278 }
1279
1281 {
1282 return PackageWriter;
1283 }
1284
1287 {
1288 return SaveArgs.SavePackageContext ? SaveArgs.SavePackageContext->GetValidator() : nullptr;
1289 }
1291
1293 {
1294 return SaveArgs.SavePackageContext ? SaveArgs.SavePackageContext->GetExternalImportValidations().Num() > 0 : false;
1295 }
1296
1302
1304 {
1305 return SaveArgs.SavePackageContext ? SaveArgs.SavePackageContext->GetExternalExportValidations().Num() > 0 : false;
1306 }
1307
1313
1315 {
1316 return HarvestedRealms[(uint32)(Realm == ESaveRealm::None ? CurrentHarvestingRealm : Realm)];
1317 }
1319 {
1320 return HarvestedRealms[(uint32)(Realm == ESaveRealm::None ? CurrentHarvestingRealm : Realm)];
1321 }
1322
1324 {
1325 return SavedAssets;
1326 }
1327
1329 {
1330 return TransientPropertyOverrides;
1331 }
1332
1337
1339 {
1341 {
1342 Pair.Value->ClearSaveableStatus();
1343 }
1344 }
1345
1346#if WITH_EDITORONLY_DATA
1348 {
1349 using namespace UE::SavePackageUtilities;
1350 return [this](const UObject* Obj)
1351 {
1352 FObjectStatus& Status = GetCachedObjectStatus(const_cast<UObject*>(Obj));
1353 return !Status.bEditorOnlyValid ? EEditorOnlyObjectResult::Uninitialized :
1354 Status.bEditorOnly ? EEditorOnlyObjectResult::EditorOnly :
1355 EEditorOnlyObjectResult::NonEditorOnly;
1356 };
1357 }
1359 {
1360 using namespace UE::SavePackageUtilities;
1361 return [this](const UObject* Obj, bool bEditorOnly)
1362 {
1363 FObjectStatus& Status = GetCachedObjectStatus(const_cast<UObject*>(Obj));
1364 Status.bEditorOnlyValid = true;
1365 Status.bEditorOnly = bEditorOnly;
1366 };
1367 }
1368#endif
1370
1372
1374
1375public:
1377
1379
1380 //@note FH: Most of these public members should be moved to harvested realm class
1391private:
1392
1393 // Create the harvesting contexts and automatic optional context gathering options
1394 void SetupHarvestingRealms();
1395 ESaveableStatus GetSaveableStatusNoOuter(TObjectPtr<UObject> Obj,
1397 static EObjectMark GetExcludedObjectMarksForGameRealm(const ITargetPlatform* TargetPlatform);
1398
1399 friend class FPackageHarvester;
1400
1401 // Args
1403 UObject* Asset;
1404 FPackagePath TargetPackagePath;
1405 const TCHAR* Filename;
1406 FSavePackageArgs SaveArgs;
1407 IPackageWriter* PackageWriter;
1408
1409 // State context
1410 FObjectSaveContextData ObjectSaveContext;
1411 FObjectSavePackageSerializeContext ObjectSavePackageSerializeContext;
1412 FArchiveSavePackageData ArchiveSavePackageData;
1413 bool bCanUseUnversionedPropertySerialization = false;
1414 bool bTextFormat = false;
1415 bool bIsProcessingPrestreamPackages = false;
1416 bool bIsFixupStandaloneFlags = false;
1417 bool bPostSaveRootRequired = false;
1418 bool bNeedPreSaveCleanup = false;
1419 bool bGenerateFileStub = false;
1420 bool bIgnoreHeaderDiffs = false;
1421 bool bIsSaveAutoOptional = false;
1422
1423 // Mutated package state
1424 uint32 InitialPackageFlags;
1425
1426 // Config classes shared with the old Save
1427 FCanSkipEditorReferencedPackagesWhenCooking SkipEditorRefCookingSetting;
1428
1429 // An object matching any GameRealmExcludedObjectMarks should be excluded from imports or exports in the game realm
1430 const EObjectMark GameRealmExcludedObjectMarks;
1431
1432 // Harvested custom versions
1433 FCustomVersionContainer CustomVersions;
1434
1435 // The current default harvesting context being queried by the save context
1436 ESaveRealm CurrentHarvestingRealm = ESaveRealm::None;
1437
1438 // List of harvested content split per harvesting context
1439 TArray<FHarvestedRealm> HarvestedRealms;
1440
1441 // List of harvested illegal references
1442 TArray<FIllegalReference> HarvestedIllegalReferences;
1443
1444 // Set of harvested prestream packages, should be deprecated
1445 TSet<TObjectPtr<UPackage>> PrestreamPackages;
1446
1447 // Set of AssetDatas created for the Assets saved into the package
1448 TArray<FAssetData> SavedAssets;
1449
1450 // Overridden properties for each export that should be treated as transient, and nulled out when serializing
1451 TMap<UObject*, TSet<FProperty*>> TransientPropertyOverrides;
1452
1453 // Cache of FObjectStatus for every object encountered during the save
1455
1456 // List of package build dependencies reported from PreSave or Serialize functions
1457 TArray<FName> PackageBuildDependencies;
1458 // Empty list of FNames, used for functions that need to return a reference to an empty array.
1459 TArray<FName> EmptyList;
1460
1461 // List of objects to serialize again during the post save phase.
1462 TSet<UObject*> PostSaveObjectsToSerialize;
1463};
1464
1465const TCHAR* LexToString(ESaveableStatus Status);
#define check(expr)
Definition AssertionMacros.h:314
#define checkNoEntry()
Definition AssertionMacros.h:316
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
#define WITH_EDITOR
Definition Build.h:67
bool bSuccess
Definition ConvexDecomposition3.cpp:819
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define PRAGMA_ENABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:12
#define PRAGMA_DISABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:8
@ SAVE_FromAutosave
Used to indicate this save was initiated automatically.
Definition ObjectMacros.h:100
@ SAVE_NoError
Don't generate errors on save.
Definition ObjectMacros.h:99
@ SAVE_Async
Save to a memory writer, then actually write to disk async.
Definition ObjectMacros.h:103
@ SAVE_RehydratePayloads
Any virtualized payloads in the package should be pulled and stored locally in the package file durin...
Definition ObjectMacros.h:117
@ SAVE_KeepEditorOnlyCookedPackages
Keep packages which are marked as editor only even though we are cooking.
Definition ObjectMacros.h:106
@ SAVE_Unversioned_Properties
Definition ObjectMacros.h:113
@ SAVE_Unversioned_Native
Save all versions as zero. Upon load this is changed to the current version. This is only reasonable ...
Definition ObjectMacros.h:104
@ SAVE_Optional
Indicate that we to save optional exports. This flag is only valid while cooking. Optional exports ar...
Definition ObjectMacros.h:115
@ SAVE_Concurrent
We are save packages in multiple threads at once and should not call non-threadsafe functions or rely...
Definition ObjectMacros.h:107
@ SAVE_KeepDirty
Do not clear the dirty flag when saving.
Definition ObjectMacros.h:101
@ PKG_FilterEditorOnly
Package has editor-only data filtered out.
Definition ObjectMacros.h:161
EObjectFlags
Definition ObjectMacros.h:552
@ RF_Transient
Don't save object.
Definition ObjectMacros.h:565
ESavePackageResult
Definition Package.h:74
EPropertyLocalizationGathererResultFlags
Definition PropertyLocalizationDataGathering.h:80
uint32 GetTypeHash(const FTaggedExport &Export)
Definition SaveContext.h:72
const TCHAR * LexToString(ESaveableStatus Status)
Definition SaveContext.cpp:468
ESaveRealm
Definition SaveContext.h:82
EIllegalRefReason
Definition SaveContext.h:92
@ ReferenceFromOptionalToMissingGameExport
ESaveableStatus
Definition SaveContext.h:111
std::conditional_t< WITH_TEXT_ARCHIVE_SUPPORT, FStructuredArchiveFormatter, FBinaryArchiveFormatter > FArchiveFormatterType
Definition StructuredArchiveFwd.h:26
EObjectMark
Definition UObjectMarks.h:46
@ OBJECTMARK_NotForTargetPlatform
Definition UObjectMarks.h:55
@ OBJECTMARK_NOMARKS
Definition UObjectMarks.h:47
@ OBJECTMARK_NotForClient
Definition UObjectMarks.h:51
@ OBJECTMARK_EditorOnly
Definition UObjectMarks.h:54
@ OBJECTMARK_NotForServer
Definition UObjectMarks.h:52
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
COREUOBJECT_API bool CanUseUnversionedPropertySerialization(const ITargetPlatform *Target)
Definition UnversionedPropertySerialization.cpp:926
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Archive.h:1208
Definition CustomVersion.h:111
Definition LinkerSave.h:48
Definition NameTypes.h:617
Definition ObjectSaveContext.h:343
Definition OutputDevice.h:133
Definition PackageHarvester.h:28
static COREUOBJECT_API const FString & GetTextMapPackageExtension()
Definition PackageName.cpp:2535
static COREUOBJECT_API const FString & GetTextAssetPackageExtension()
Definition PackageName.cpp:2529
Definition PackagePath.h:89
static COREUOBJECT_API FPackagePath FromLocalPath(FStringView InFilename)
Definition PackagePath.cpp:243
COREUOBJECT_API void SetHeaderExtension(EPackageExtension Extension, FStringView CustomExtension=FStringView()) const
Definition PackagePath.cpp:1203
COREUOBJECT_API EPackageExtension GetHeaderExtension() const
Definition PackagePath.cpp:266
Definition UnrealType.h:174
Definition SaveContext.h:588
TSet< FName > & GetSoftPackagesUsedInGame()
Definition SaveContext.h:1055
FOutputDevice * GetError() const
Definition SaveContext.h:768
const TSet< FNameEntryId > & GetNamesReferencedFromPackageHeader() const
Definition SaveContext.h:1106
const FPackagePath & GetTargetPackagePath() const
Definition SaveContext.h:736
bool CloseLinkerArchives()
Definition SaveContext.h:1218
FObjectSaveContextData & GetObjectSaveContext()
Definition SaveContext.h:1275
const TSet< FName > & GetSoftPackagesUsedInGame() const
Definition SaveContext.h:1050
FIoHash PackageSavedHash
Definition SaveContext.h:1381
void SetTextFormatTempFilename(TOptional< FString > InTemp)
Definition SaveContext.h:1268
bool IsForceByteSwapping() const
Definition SaveContext.h:808
void SetTransientPropertyOverrides(TMap< UObject *, TSet< FProperty * > > &&InTransientPropertyOverrides)
Definition SaveContext.h:1333
bool GetPreSaveCleanup() const
Definition SaveContext.h:898
bool IsSaveUnversionedProperties() const
Definition SaveContext.h:848
bool IsSaveAutoOptional() const
Definition SaveContext.h:858
bool IsWarningLongFilename() const
Definition SaveContext.h:813
int32 SerializedPackageFlags
Definition SaveContext.h:1388
void SetFormatter(TUniquePtr< FArchiveFormatterType > InFormatter)
Definition SaveContext.h:1238
TSet< TObjectPtr< UPackage > > & GetPrestreamPackages()
Definition SaveContext.h:1161
bool IsSaveUnversionedNative() const
Definition SaveContext.h:843
void SetPreSaveCleanup(bool bInNeedPreSaveCleanup)
Definition SaveContext.h:903
const TArray< FIllegalReference > & GetIllegalReferences() const
Definition SaveContext.h:965
bool IsTextFormat() const
Definition SaveContext.h:818
const TMap< Verse::VCell *, TSet< Verse::VCell * > > & GetCellCellDependeices() const
Definition SaveContext.h:1141
bool IsPrestreamPackage(TObjectPtr< UPackage > InPackage) const
Definition SaveContext.h:1166
uint32 GetInitialPackageFlags() const
Definition SaveContext.h:701
const TSet< TObjectPtr< UPackage > > & GetPrestreamPackages() const
Definition SaveContext.h:1156
void AddDirectImport(UObject *InObject)
Definition SaveContext.h:975
UE::SavePackageUtilities::FObjectStatus & GetCachedObjectStatus(TObjectPtr< UObject > InObject)
Definition SaveContext.h:939
void SetTempFilename(TOptional< FString > InTemp)
Definition SaveContext.h:1258
int32 OffsetAfterImportMap
Definition SaveContext.h:1385
EObjectMark GetExcludedObjectMarks(ESaveRealm HarvestingRealm) const
Definition SaveContext.h:741
FHarvestedRealm & GetHarvestedRealm(ESaveRealm Realm=ESaveRealm::None)
Definition SaveContext.h:1318
const TOptional< FString > & GetTextFormatTempFilename() const
Definition SaveContext.h:1263
TSet< FNameEntryId > & GetNamesReferencedFromPackageHeader()
Definition SaveContext.h:1111
FSavePackageContext * GetSavePackageContext() const
Definition SaveContext.h:778
int64 OffsetAfterPayloadToc
Definition SaveContext.h:1387
void AddPrestreamPackages(UPackage *InPackage)
Definition SaveContext.h:1171
void AddObjectToPostSaveSerialization(UObject *Object)
Definition SaveContext.cpp:300
bool IsUnsaveable(TObjectPtr< UObject > InObject, UE::SavePackageUtilities::FObjectStatus &ObjectStatus, bool bEmitWarning=true)
Definition SaveContext.cpp:32
void UpdateEditorRealmPackageBuildDependencies()
Definition SaveContext.cpp:372
bool IsIncluded(TObjectPtr< UObject > InObject) const
Definition SaveContext.h:1000
const TSet< FSoftObjectPath > & GetSoftObjectPathList() const
Definition SaveContext.h:1116
~FSaveContext()
Definition SaveContext.h:686
bool IsStripEditorOnly() const
Definition SaveContext.h:803
void SetStructuredArchive(TUniquePtr< FStructuredArchive > InArchive)
Definition SaveContext.h:1248
bool IsProceduralSave() const
Definition SaveContext.h:788
bool IsIgnoringHeaderDiff() const
Definition SaveContext.h:868
const FSavePackageArgs & GetSaveArgs() const
Definition SaveContext.h:706
bool GetPostSaveRootRequired() const
Definition SaveContext.h:888
PRAGMA_ENABLE_DEPRECATION_WARNINGS bool HasExternalImportValidations() const
Definition SaveContext.h:1292
bool IsUsingSlowTask() const
Definition SaveContext.h:763
void RequestStubFile()
Definition SaveContext.h:913
EObjectFlags GetTopLevelFlags() const
Definition SaveContext.h:758
bool IsProcessingPrestreamingRequests() const
Definition SaveContext.h:873
FLinkerSave * GetLinker() const
Definition SaveContext.h:1194
const TMap< TObjectPtr< UObject >, TSet< TObjectPtr< UObject > > > & GetNativeObjectDependencies() const
Definition SaveContext.h:1126
bool IsUpdatingLoadedPath() const
Definition SaveContext.h:793
const TSet< FNameEntryId > & GetNamesReferencedFromExportData() const
Definition SaveContext.h:1101
TArray< UE::SavePackageUtilities::FPreloadDependency > & GetPreloadDependencies()
Definition SaveContext.h:1010
void ClearSaveableCache()
Definition SaveContext.h:1338
void SetTextFormatArchive(TUniquePtr< FArchive > InTextArchive)
Definition SaveContext.h:1228
IPackageWriter * GetPackageWriter() const
Definition SaveContext.h:1280
const TMap< TObjectPtr< UObject >, TSet< Verse::VCell * > > & GetCellDependencies() const
Definition SaveContext.h:1131
const ITargetPlatform * GetTargetPlatform() const
Definition SaveContext.h:716
const TSet< Verse::VCell * > & GetCellExports() const
Definition SaveContext.h:1030
TMap< TObjectPtr< UObject >, TArray< FName > > & GetSearchableNamesObjectMap()
Definition SaveContext.h:1096
void AddExportedClassesToDependencies()
Definition SaveContext.cpp:425
UObject * GetAsset() const
Definition SaveContext.h:726
UE::SavePackageUtilities::EEditorOnlyObjectFlags GetEditorOnlyObjectFlags() const
Definition SaveContext.cpp:286
FSaveContext(UPackage *InPackage, UObject *InAsset, const TCHAR *InFilename, const FSavePackageArgs &InSaveArgs)
Definition SaveContext.h:610
const TSet< FName > & GetSoftPackageReferenceList() const
Definition SaveContext.h:1040
bool IsGenerateSaveError() const
Definition SaveContext.h:833
ESavePackageResult Result
Definition SaveContext.h:1376
const TCHAR * GetFilename() const
Definition SaveContext.h:731
ESaveRealm GetCurrentHarvestingRealm() const
Definition SaveContext.h:918
const TSet< TObjectPtr< UObject > > & GetDirectImports() const
Definition SaveContext.h:1020
UPackage * GetPackage() const
Definition SaveContext.h:721
const TArray< TFunction< FSavePackageSettings::ExternalImportValidationFunc > > & GetExternalImportValidations() const
Definition SaveContext.h:1297
UE::SavePackageUtilities::FObjectStatus * FindCachedObjectStatus(TObjectPtr< const UObject > InObject) const
Definition SaveContext.h:950
void UpdatePackageFileSize(int64 InFileSize)
Definition SaveContext.h:1208
FArchive * GetTextFormatArchive() const
Definition SaveContext.h:1223
TArray< FLinkerSave * > GetLinkers() const
Definition SaveContext.h:1181
bool HasExternalExportValidations() const
Definition SaveContext.h:1303
TArray< FLargeMemoryWriter, TInlineAllocator< 4 > > AdditionalFilesFromExports
Definition SaveContext.h:1389
bool IsImport(UObject *InObject) const
Definition SaveContext.h:990
PRAGMA_DISABLE_DEPRECATION_WARNINGS ISavePackageValidator * GetPackageValidator() const
Definition SaveContext.h:1286
const FCustomVersionContainer & GetCustomVersions() const
Definition SaveContext.h:1151
const TSet< TObjectPtr< UObject > > & GetImports() const
Definition SaveContext.h:1015
FStructuredArchive * GetStructuredArchive() const
Definition SaveContext.h:1243
void RecordIllegalReference(UObject *InFrom, UObject *InTo, EIllegalRefReason InReason, FString &&InOptionalReasonText=FString())
Definition SaveContext.h:960
int32 OffsetAfterPackageFileSummary
Definition SaveContext.h:1384
const TSet< Verse::VCell * > & GetCellImports() const
Definition SaveContext.h:1035
bool IsCooking() const
Definition SaveContext.h:783
void AddExport(FTaggedExport InTagObj)
Definition SaveContext.h:980
int64 PackageHeaderAndExportSize
Definition SaveContext.h:1382
bool IsFilterEditorOnly() const
Definition SaveContext.h:798
FSavePackageOutputFileArray AdditionalPackageFiles
Definition SaveContext.h:1390
bool IsKeepDirty() const
Definition SaveContext.h:838
const TArray< TFunction< FSavePackageSettings::ExternalExportValidationFunc > > & GetExternalExportValidations() const
Definition SaveContext.h:1308
bool IsSaveOptional() const
Definition SaveContext.h:853
bool IsFixupStandaloneFlags() const
Definition SaveContext.h:878
const FDateTime & GetFinalTimestamp() const
Definition SaveContext.h:773
void UpdateSaveableStatus(TObjectPtr< UObject > InObject, UE::SavePackageUtilities::FObjectStatus &ObjectStatus)
Definition SaveContext.cpp:67
const TMap< TObjectPtr< UObject >, TArray< FName > > & GetSearchableNamesObjectMap() const
Definition SaveContext.h:1091
bool IsTransient(TObjectPtr< UObject > InObject)
Definition SaveContext.cpp:191
void AddImport(UObject *InObject)
Definition SaveContext.h:970
TArray< ESaveRealm > GetHarvestedRealmsToSave()
Definition SaveContext.cpp:14
const TMap< Verse::VCell *, TSet< TObjectPtr< UObject > > > & GetCellObjectDependencies() const
Definition SaveContext.h:1136
void UpdatePackageLinkerVersions()
Definition SaveContext.h:1199
FArchiveFormatterType * GetFormatter() const
Definition SaveContext.h:1233
bool IsExport(UObject *InObject) const
Definition SaveContext.h:995
const TSet< TObjectPtr< UObject > > & GetImportsUsedInGame() const
Definition SaveContext.h:1025
bool IsConcurrent() const
Definition SaveContext.h:863
int32 OffsetAfterExportMap
Definition SaveContext.h:1386
bool IsSaveToMemory() const
Definition SaveContext.h:828
const TMap< UObject *, TSet< FProperty * > > & GetTransientPropertyOverrides()
Definition SaveContext.h:1328
EPropertyLocalizationGathererResultFlags GatherableTextResultFlags
Definition SaveContext.h:1378
void SetLinker(TPimplPtr< FLinkerSave > InLinker)
Definition SaveContext.h:1213
TArray< FAssetData > & GetSavedAssets()
Definition SaveContext.h:1323
bool IsStubRequested() const
Definition SaveContext.h:908
bool ShouldRehydratePayloads() const
Definition SaveContext.h:883
void AddExcluded(UObject *InObject)
Definition SaveContext.h:985
UObject * ResolveForSave(TObjectPtr< UObject > InObject, UE::SavePackageUtilities::FObjectStatus &Status)
Definition SaveContext.cpp:153
FSavePackageResultStruct GetFinalResult()
Definition SaveContext.cpp:223
bool NameExists(const FName &Name) const
Definition SaveContext.h:1146
const TOptional< FString > & GetTempFilename() const
Definition SaveContext.h:1253
TSet< FName > & GetSoftPackageReferenceList()
Definition SaveContext.h:1045
int64 TotalPackageSizeUncompressed
Definition SaveContext.h:1383
const FHarvestedRealm & GetHarvestedRealm(ESaveRealm Realm=ESaveRealm::None) const
Definition SaveContext.h:1314
const TArray< FName > & GetPackageBuildDependencies(ESaveRealm SaveRealm=ESaveRealm::None)
Definition SaveContext.h:1065
FArchiveSavePackageData & GetArchiveSavePackageData()
Definition SaveContext.h:711
const TSet< UObject * > & GetPostSaveObjectsToSerialize() const
Definition SaveContext.cpp:305
TSet< FTaggedExport > & GetExports()
Definition SaveContext.h:1005
const TSet< FName > & GetUntrackedSoftPackageReferenceList() const
Definition SaveContext.h:1060
bool IsFromAutoSave() const
Definition SaveContext.h:823
const TMap< TObjectPtr< UObject >, TSet< TObjectPtr< UObject > > > & GetObjectDependencies() const
Definition SaveContext.h:1121
void SetCustomVersions(FCustomVersionContainer InCustomVersions)
Definition SaveContext.h:1176
void SetPostSaveRootRequired(bool bInPostSaveRootRequired)
Definition SaveContext.h:893
Definition SavePackage.h:226
PRAGMA_DISABLE_DEPRECATION_WARNINGS ISavePackageValidator * GetValidator()
Definition SavePackage.h:249
PRAGMA_ENABLE_DEPRECATION_WARNINGS const TArray< TFunction< FSavePackageSettings::ExternalImportValidationFunc > > & GetExternalImportValidations() const
Definition SavePackage.h:259
IPackageWriter::FCapabilities PackageWriterCapabilities
Definition SavePackage.h:271
const TArray< TFunction< FSavePackageSettings::ExternalExportValidationFunc > > & GetExternalExportValidations() const
Definition SavePackage.h:264
Definition StructuredArchive.h:57
Definition IConsoleManager.h:558
static CORE_API IFileManager & Get()
Definition FileManagerGeneric.cpp:1072
virtual bool Delete(const TCHAR *Filename, bool RequireExists=0, bool EvenReadOnly=0, bool Quiet=0)=0
Definition PackageWriter.h:41
Definition SavePackage.h:135
Definition Array.h:670
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
Definition UnrealString.h.inl:34
Definition UniquePtr.h:107
void Reset(T *InPtr=nullptr)
Definition UniquePtr.h:346
UE_FORCEINLINE_HINT T * Get() const
Definition UniquePtr.h:324
bool HasAnyFlags(EObjectFlags FlagsToCheck) const
Definition UObjectBaseUtility.h:93
Definition Object.h:95
Definition Package.h:216
UE_FORCEINLINE_HINT bool HasAnyPackageFlags(uint32 FlagsToCheck) const
Definition Package.h:915
uint32 GetPackageFlags() const
Definition Package.h:936
COREUOBJECT_API UObject * FindAssetInPackage(EObjectFlags RequiredTopLevelFlags=RF_NoFlags) const
Definition Package.cpp:221
Definition Linker.cpp:38
Definition PackageHarvester.cpp:207
void CallPostSaveRoot(UObject *Object, FObjectSaveContextData &ObjectSaveContext, bool bNeedsCleanup)
Definition SavePackageUtilities.cpp:695
EEditorOnlyObjectFlags
Definition SavePackageUtilities.h:202
EObjectFlags NormalizeTopLevelFlags(EObjectFlags TopLevelFlags, bool bIsCooking)
Definition SavePackageUtilities.cpp:704
Definition Archive.h:36
@ false
Definition radaudio_common.h:23
UE::Cook::ECookingDLC GetCookingDLC() const
Definition ArchiveCookContext.h:131
UE::Cook::ECookType GetCookType() const
Definition ArchiveCookContext.h:126
UE::Cook::ICookInfo * GetCookInfo()
Definition ArchiveCookContext.h:136
FArchiveCookContext & CookContext
Definition ArchiveCookData.h:15
Definition ArchiveSavePackageData.h:11
FArchiveCookContext * CookContext
Definition ArchiveSavePackageData.h:24
const ITargetPlatform * TargetPlatform
Definition ArchiveSavePackageData.h:22
Definition SavePackageUtilities.h:76
Definition DateTime.h:76
Definition SaveContext.h:195
FArchive * GetTextFormatArchive() const
Definition SaveContext.h:473
TMap< TObjectPtr< UObject >, TSet< Verse::VCell * > > & GetCellDependencies()
Definition SaveContext.h:415
bool IsExport(TObjectPtr< UObject > InObject) const
Definition SaveContext.h:241
bool IsImport(TObjectPtr< UObject > InObject) const
Definition SaveContext.h:236
bool IsIncluded(TObjectPtr< UObject > InObject) const
Definition SaveContext.h:246
const TMap< TObjectPtr< UObject >, TSet< Verse::VCell * > > & GetCellDependencies() const
Definition SaveContext.h:410
TMap< TObjectPtr< UObject >, TArray< FName > > & GetSearchableNamesObjectMap()
Definition SaveContext.h:355
void SetFormatter(TUniquePtr< FArchiveFormatterType > InFormatter)
Definition SaveContext.h:488
const TMap< Verse::VCell *, TSet< Verse::VCell * > > & GetCellCellDependencies() const
Definition SaveContext.h:430
bool CloseLinkerArchives()
Definition SaveContext.h:460
TMap< TObjectPtr< UObject >, TSet< TObjectPtr< UObject > > > & GetObjectDependencies()
Definition SaveContext.h:395
const TMap< TObjectPtr< UObject >, TSet< TObjectPtr< UObject > > > & GetObjectDependencies() const
Definition SaveContext.h:390
const TSet< FSoftObjectPath > & GetSoftObjectPathList() const
Definition SaveContext.h:380
void AddExcluded(TObjectPtr< UObject > InObject)
Definition SaveContext.h:226
const TSet< TObjectPtr< UObject > > & GetDirectImports() const
Definition SaveContext.h:310
TSet< FName > & GetSoftPackageReferenceList()
Definition SaveContext.h:335
TArray< UE::SavePackageUtilities::FPreloadDependency > & GetPreloadDependencies()
Definition SaveContext.h:305
const TArray< UE::SavePackageUtilities::FPreloadDependency > & GetPreloadDependencies() const
Definition SaveContext.h:300
const TSet< FTaggedExport > & GetExports() const
Definition SaveContext.h:295
const TSet< Verse::VCell * > & GetCellExports() const
Definition SaveContext.h:320
bool IsCellImport(Verse::VCell *InCell) const
Definition SaveContext.h:275
const TMap< TObjectPtr< UObject >, TArray< FName > > & GetSearchableNamesObjectMap() const
Definition SaveContext.h:350
TSet< FNameEntryId > & GetNamesReferencedFromPackageHeader()
Definition SaveContext.h:375
TSet< FTaggedExport > & GetExports()
Definition SaveContext.h:290
void AddCellImport(Verse::VCell *InCell)
Definition SaveContext.h:265
bool IsCellIncluded(Verse::VCell *InCell) const
Definition SaveContext.h:285
bool IsExcluded(TObjectPtr< UObject > InObject) const
Definition SaveContext.h:255
void AddNotExcluded(TObjectPtr< UObject > InObject)
Definition SaveContext.h:231
const TSet< FNameEntryId > & GetNamesReferencedFromExportData() const
Definition SaveContext.h:360
const TSet< FNameEntryId > & GetNamesReferencedFromPackageHeader() const
Definition SaveContext.h:370
const TOptional< FString > & GetTextFormatTempFilename() const
Definition SaveContext.h:513
bool IsNotExcluded(TObjectPtr< UObject > InObject) const
Definition SaveContext.h:260
TMap< Verse::VCell *, TSet< TObjectPtr< UObject > > > & GetCellObjectDependencies()
Definition SaveContext.h:425
const TSet< TObjectPtr< UObject > > & GetImports() const
Definition SaveContext.h:315
void AddExport(FTaggedExport InTagObj)
Definition SaveContext.h:221
const TSet< FName > & GetUntrackedSoftPackageReferenceList() const
Definition SaveContext.h:340
void SetTextFormatArchive(TUniquePtr< FArchive > InTextArchive)
Definition SaveContext.h:478
void SetTempFilename(TOptional< FString > InTemp)
Definition SaveContext.h:508
const TSet< Verse::VCell * > & GetCellImports() const
Definition SaveContext.h:325
FLinkerSave * GetLinker() const
Definition SaveContext.h:450
TSet< FSoftObjectPath > & GetSoftObjectPathList()
Definition SaveContext.h:385
~FHarvestedRealm()
Definition SaveContext.h:197
void SetLinker(TPimplPtr< FLinkerSave > InLinker)
Definition SaveContext.h:455
TMap< Verse::VCell *, TSet< Verse::VCell * > > & GetCellCellDependencies()
Definition SaveContext.h:435
void SetStructuredArchive(TUniquePtr< FStructuredArchive > InArchive)
Definition SaveContext.h:498
void AddDirectImport(TObjectPtr< UObject > InObject)
Definition SaveContext.h:211
TSet< FNameEntryId > & GetNamesReferencedFromExportData()
Definition SaveContext.h:365
const TMap< TObjectPtr< UObject >, TSet< TObjectPtr< UObject > > > & GetNativeObjectDependencies() const
Definition SaveContext.h:400
FStructuredArchive * GetStructuredArchive() const
Definition SaveContext.h:493
void SetTextFormatTempFilename(TOptional< FString > InTemp)
Definition SaveContext.h:518
const TMap< Verse::VCell *, TSet< TObjectPtr< UObject > > > & GetCellObjectDependencies() const
Definition SaveContext.h:420
bool IsCellExport(Verse::VCell *InCell) const
Definition SaveContext.h:280
const TSet< FName > & GetSoftPackageReferenceList() const
Definition SaveContext.h:330
TMap< TObjectPtr< UObject >, TSet< TObjectPtr< UObject > > > & GetNativeObjectDependencies()
Definition SaveContext.h:405
FArchiveFormatterType * GetFormatter() const
Definition SaveContext.h:483
TSet< FName > & GetUntrackedSoftPackageReferenceList()
Definition SaveContext.h:345
const TOptional< FString > & GetTempFilename() const
Definition SaveContext.h:503
void AddImport(TObjectPtr< UObject > InObject)
Definition SaveContext.h:216
bool NameExists(const FName &Name) const
Definition SaveContext.h:440
void AddCellExport(Verse::VCell *InCell)
Definition SaveContext.h:270
Definition SaveContext.h:103
UObject * To
Definition SaveContext.h:105
FString FormatStringArg
Definition SaveContext.h:107
EIllegalRefReason Reason
Definition SaveContext.h:106
UObject * From
Definition SaveContext.h:104
Definition IoHash.h:33
Definition NameTypes.h:69
Definition ObjectSaveContext.h:70
const ITargetPlatform * TargetPlatform
Definition ObjectSaveContext.h:109
TMap< UObject *, FObjectSaveOverride > SaveOverrides
Definition ObjectSaveContext.h:174
IPackageWriter * PackageWriter
Definition ObjectSaveContext.h:115
UE::Cook::ECookType CookType
Definition ObjectSaveContext.h:126
bool bProceduralSave
Definition ObjectSaveContext.h:137
bool bDeterminismDebug
Definition ObjectSaveContext.h:159
bool bUpdatingLoadedPath
Definition ObjectSaveContext.h:143
COREUOBJECT_API void Set(UPackage *Package, const ITargetPlatform *InTargetPlatform, const TCHAR *InTargetFilename, uint32 InSaveFlags)
Definition SavePackageUtilities.cpp:923
UE::Cook::ICookInfo * CookInfo
Definition ObjectSaveContext.h:112
UE::Cook::ECookingDLC CookingDLC
Definition ObjectSaveContext.h:127
Definition SaveContext.h:591
FSetSaveRealmToSaveScope(FSaveContext &InContext, ESaveRealm InHarvestingRealm)
Definition SaveContext.h:592
~FSetSaveRealmToSaveScope()
Definition SaveContext.h:599
Definition SavePackage.h:63
bool IsCooking() const
Definition SavePackage.h:67
FSavePackageContext * SavePackageContext
Definition SavePackage.h:92
const ITargetPlatform * GetTargetPlatform() const
Definition SavePackage.h:68
FOutputDevice * Error
Definition SavePackage.h:90
FDateTime FinalTimeStamp
Definition SavePackage.h:88
bool bWarnOfLongFilename
Definition SavePackage.h:81
bool bForceByteSwapping
Definition SavePackage.h:79
TMap< UObject *, FObjectSaveOverride > * InOutSaveOverrides
Definition SavePackage.h:98
bool bSlowTask
Definition SavePackage.h:83
FArchiveCookData * ArchiveCookData
Definition SavePackage.h:65
EObjectFlags TopLevelFlags
Definition SavePackage.h:75
uint32 SaveFlags
Definition SavePackage.h:77
Definition Package.h:130
Definition SaveContext.h:38
uint32 bFromOptionalReference
Definition SaveContext.h:50
bool operator==(const FTaggedExport &Other) const
Definition SaveContext.h:66
FTaggedExport(TObjectPtr< UObject > InObj, bool bInNotAlwaysLoadedForEditorGame=true, bool bInFromOptionalReference=false)
Definition SaveContext.h:59
FTaggedExport()
Definition SaveContext.h:52
TObjectPtr< UObject > Obj
Definition SaveContext.h:39
uint32 bGeneratePublicHash
Definition SaveContext.h:45
uint32 bNotAlwaysLoadedForEditorGame
Definition SaveContext.h:40
virtual IConsoleVariable * FindConsoleVariable(const TCHAR *Name, bool bTrackFrequentCalls=true) const =0
static IConsoleManager & Get()
Definition IConsoleManager.h:1270
bool bDeterminismDebug
Definition PackageWriter.h:64
bool bIgnoreHeaderDiffs
Definition PackageWriter.h:58
Definition ObjectPtr.h:488
FORCEINLINE TObjectPtr< UPackage > GetPackage() const
Definition ObjectPtr.h:672
Definition Optional.h:131
constexpr OptionalType & GetValue()
Definition Optional.h:443
constexpr bool IsSet() const
Definition Optional.h:69
Definition PimplPtr.h:50
Definition Tuple.h:652
Definition SaveContext.h:137
UObject * SaveableStatusCulprit
Definition SaveContext.h:179
FObjectStatus & operator=(const FObjectStatus &)=default
bool bEditorOnly
Definition SaveContext.h:185
FObjectStatus(FObjectStatus &&)=default
bool bIsInSavePackageValid
Definition SaveContext.h:187
TOptional< bool > IsInSavePackage() const
Definition SaveContext.h:165
void ClearSaveableStatus()
Definition SaveContext.h:154
FObjectStatus(const FObjectStatus &)=default
FRealmInstigator RealmInstigator[(uint32) ESaveRealm::RealmCount]
Definition SaveContext.h:178
bool bEditorOnlyValid
Definition SaveContext.h:184
bool IsInSavePackage(TObjectPtr< UObject > InObject, UPackage *SavePackage)
Definition SaveContext.h:169
FObjectStatus()
Definition SaveContext.h:138
bool bDeclaredSaveBuildDependency
Definition SaveContext.h:189
bool bSaveableStatusValid
Definition SaveContext.h:183
bool HasTransientFlag(const UObject *InObject)
Definition SaveContext.h:149
FObjectStatus & operator=(FObjectStatus &&)=default
bool bIsInSavePackage
Definition SaveContext.h:188
bool bAttemptedExport
Definition SaveContext.h:186
void SetIsInSavePackage(bool bInIsInSavePackage)
Definition SaveContext.h:160
ESaveableStatus SaveableStatusCulpritStatus
Definition SaveContext.h:181
bool bSaveOverrideForcedTransient
Definition SaveContext.h:182
ESaveableStatus SaveableStatus
Definition SaveContext.h:180
Definition SaveContext.h:130
UObject * Object
Definition SaveContext.h:131
FProperty * Property
Definition SaveContext.h:132