This change consists of multiple changes:
Core:
- Deprecation of ANY_PACKAGE macro. Added ANY_PACKAGE_DEPRECATED macro which can still be used for backwards compatibility purposes (only used in CoreUObject)
- Deprecation of StaticFindObjectFast* functions that take bAnyPackage parameter
- Added UStruct::GetStructPathName function that returns FTopLevelAssetPath representing the path name (package + object FName, super quick compared to UObject::GetPathName) + wrapper UClass::GetClassPathName to make it look better when used with UClasses
- Added (Static)FindFirstObject* functions that find a first object given its Name (no Outer). These functions are used in places I consider valid to do global UObject (UClass) lookups like parsing command line parameters / checking for unique object names
- Added static UClass::TryFindType function which serves a similar purpose as FindFirstObject however it's going to throw a warning (with a callstack / maybe ensure in the future?) if short class name is provided. This function is used in places that used to use short class names but now should have been converted to use path names to catch any potential regressions and or edge cases I missed.
- Added static UClass::TryConvertShortNameToPathName utility function
- Added static UClass::TryFixShortClassNameExportPath utility function
- Object text export paths will now also include class path (Texture2D'/Game/Textures/Grass.Grass' -> /Script/Engine.Texture2D'/Game/Textures/Grass.Grass')
- All places that manually generated object export paths for objects will now use FObjectPropertyBase::GetExportPath
- Added a new startup test that checks for short type names in UClass/FProperty MetaData values
AssetRegistry:
- Deprecated any member variables (FAssetData / FARFilter) or functions that use FNames to represent class names and replaced them with FTopLevelAssetPath
- Added new member variables and new function overloads that use FTopLevelAssetPath to represent class names
- This also applies to a few other modules' APIs to match AssetRegistry changes
Everything else:
- Updated code that used ANY_PACKAGE (depending on the use case) to use FindObject(nullptr, PathToObject), UClass::TryFindType (used when path name is expected, warns if it's a short name) or FindFirstObject (usually for finding types based on user input but there's been a few legitimate use cases not related to user input)
- Updated code that used AssetRegistry API to use FTopLevelAssetPaths and USomeClass::StaticClass()->GetClassPathName() instead of GetFName()
- Updated meta data and hardcoded FindObject(ANY_PACKAGE, "EEnumNameOrClassName") calls to use path names
#jira UE-99463
#rb many.people
[FYI] Marcus.Wassmer
#preflight 629248ec2256738f75de9b32
#codereviewnumbers 20320742, 20320791, 20320799, 20320756, 20320809, 20320830, 20320840, 20320846, 20320851, 20320863, 20320780, 20320765, 20320876, 20320786
#ROBOMERGE-OWNER: robert.manuszewski
#ROBOMERGE-AUTHOR: robert.manuszewski
#ROBOMERGE-SOURCE: CL 20430220 via CL 20433854 via CL 20435474 via CL 20435484
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v949-20362246)
[CL 20448496 by robert manuszewski in ue5-main branch]
Setters and getters are native functions called by FProperties when setting property values with *_InContainer functions.
Setters and getter function names can be manually specified with Setter = Func and Getter = Func keywords inside of UPROEPRTY macro but they will also be automatically parsed if the name is not explicitly specified if the setter or getter function name matches SetPropertyName and GetPropertyName pattern.
The latter behavior can be disabled in UHT's DefaultEngine.ini by setting AutomaticSettersAndGetters=False.
ImportText and ExportTextItem functions have been deprecated and should be replaced with *_InContainer or *_Direct variants.
#rb Steve.Robb
#preflight 6210a377a83e0bcefd03d9e1
#ROBOMERGE-OWNER: marc.audy
#ROBOMERGE-AUTHOR: robert.manuszewski
#ROBOMERGE-SOURCE: CL 19070318 via CL 19098059 via CL 19104650 via CL 19104661 via CL 19110012
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v921-19075845)
[CL 19147839 by marc audy in ue5-main branch]
This represents UE4/Main @17774255, Release-5.0 @17791557 and Dev-PerfTest @17789485
[CL 17794212 by aurel cordonnier in ue5-release-engine-test branch]
Replace uses of the old SCSEditor with the new Subobject Editor in Blueprints.
The behavior will be functionally the same, but now has a properly seperated data model for modifying subobjects in the editor.
#jira UE-64131
#jira UE-112228
#jira UE-29873
#rb phillip.kavan
#ROBOMERGE-SOURCE: CL 16315302 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v804-16311228)
[CL 16315307 by ben hoffman in ue5-release-engine-test branch]
#rb chris.gagnon
#ROBOMERGE-OWNER: rex.hill
#ROBOMERGE-AUTHOR: rex.hill
#ROBOMERGE-SOURCE: CL 11604269 via CL 11604360 via CL 11604439
#ROBOMERGE-BOT: (v656-11643781)
[CL 11743509 by rex hill in Main branch]
#rnx
#rb none
#ROBOMERGE-SOURCE: CL 10869241 via CL 10869527 via CL 10869904
#ROBOMERGE-BOT: (v613-10869866)
[CL 10870586 by ryan durand in Main branch]
#rb Phillip.Kavan
#jira UE-82443
#ROBOMERGE-SOURCE: CL 9825477 in //UE4/Release-4.24/...
#ROBOMERGE-BOT: RELEASE (Release-4.24 -> Main) (v546-9757112)
[CL 9825499 by dan oconnor in Main branch]
Change summary:
- Added FSearchDataVersionInfo to consolidate cached version data passed between internal APIs.
- Modified FFindInBlueprintManager::QuerySingleBlueprint() to return a read-only ptr to the matching entry.
- Modified a few internal APIs to include FSearchDataVersionInfo as input.
- Modified FFindInBlueprintSearchManager::ExtractUnloadedFiBData() to query unloaded asset package summaries for last-saved editor object custom version info. This value is then cached into the search DB.
- Modified FFindInBlueprintSearchManager::ConvertJsonStringToObject() (and helpers) to configure the FArchive stream with the cached editor object custom version from the search DB before deserializing the LUT.
#jira UE-77166
#rb Dan.OConnor
#ROBOMERGE-SOURCE: CL 7479471 in //UE4/Release-4.23/...
#ROBOMERGE-BOT: RELEASE (Release-4.23 -> Main) (v372-7473910)
[CL 7479472 by phillip kavan in Main branch]
Notes:
- Blueprint asset re-indexing is now queued and occurs only when a Blueprint editor window OR any global Find-in-Blueprint tab is open.
- Includes an editor INI option (bDisableDeferredIndexing) to allow the new UX to be disabled if necessary (i.e. revert to previous behavior).
#jira UE-65489
#rb Dan.OConnor
#ROBOMERGE-SOURCE: CL 4691239
[CL 4691376 by phillip kavan in Main branch]
- Added IBlueprintAssetHandler to define how blueprints should be retrieved from particular assets, registered by class name
- Replaced the majority of UWorld specific logic from the find in blueprint manager with calls to this new handler
- All search entries are stored as the full Blueprint path, all unindexed (uncached) entries are stored as the full asset path.
- Added a function (SupportsNativization) to UBlueprint to enable specific blueprints to explicitly disallow nativization
#rb Phillip.Kavan
[CL 4209438 by Andrew Rodham in Dev-Sequencer branch]