UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
CoreRedirects.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 CoreRedirects.h: Object/Class/Field redirects read from ini files or registered at startup
5=============================================================================*/
6
7#pragma once
8
9#include "Containers/Array.h"
11#include "Containers/Map.h"
14#include "CoreMinimal.h"
15#include "CoreTypes.h"
17#include "Misc/EnumClassFlags.h"
19#include "UObject/NameTypes.h"
20#include "UObject/UnrealNames.h"
21
22// TODO: Internal headers should not be included
24
25class FBlake3;
26class IPakFile;
27class UClass;
28struct FSoftObjectPath;
33namespace UE::CoreRedirects::Private { struct FCoreRedirectObjectUtf8Name; }
34
36
41{
42 None = 0,
43
44 // Core type of the Thing being redirected, multiple can be set. A Query will only find Redirects that have at least one of the same Type bits set.
45 Type_Object = 0x00000001, // UObject
46 Type_Class = 0x00000002, // UClass
47 Type_Struct = 0x00000004, // UStruct
48 Type_Enum = 0x00000008, // UEnum
49 Type_Function = 0x00000010, // UFunction
50 Type_Property = 0x00000020, // FProperty
51 Type_Package = 0x00000040, // UPackage
52 Type_Asset = 0x00000080, // Redirects derived from UObjectRedirectors. Implicitly included with other search types
53 Type_AllMask = 0x0000FFFF, // Bit mask of all possible Types
54
55 // Category flags. A Query will only match Redirects that have the same value for every category bit.
56 Category_InstanceOnly = 0x00010000, // Only redirect instances of this type, not the type itself
57 Category_Removed = 0x00020000, // This type was explicitly removed, new name isn't valid
58 Category_AllMask = 0x00FF0000, // Bit mask of all possible Categories
59
60 // Option flags. Does not behave as a bit-match between Queries and Redirects. Each one specifies a custom rule for how FCoreRedirects handles the Redirect.
61 Option_MatchPrefix = 0x01000000, // Does a prefix string match
62 Option_MatchSuffix = 0x02000000, // Does a suffix string match
63 Option_MatchSubstring = Option_MatchPrefix | Option_MatchSuffix, // Does a slow substring match
64 Option_MatchWildcardMask = Option_MatchSubstring, // Bit mask of all possible wildcards
65
66 Option_MissingLoad = 0x04000000, // An automatically-created redirect that was created in response to a missing Thing during load. Redirect will be removed if and when the Thing is loaded.
67 Option_AllMask = 0xFF000000, // Bit mask of all possible Options
68};
70
72{
73 None = 0,
76 AllowPartialMatch = (1 << 0),
81};
83
88{
91
94
97
100
107
109
111
113
116
118 COREUOBJECT_API FString ToString() const;
119
121 COREUOBJECT_API void Reset();
122
125 {
126 return ObjectName == Other.ObjectName && OuterName == Other.OuterName && PackageName == Other.PackageName;
127 }
128
130 {
131 return !(*this == Other);
132 }
133
136
138 enum class EMatchFlags
139 {
140 None = 0,
142 DisallowPartialLHSMatch = (1 << 0),
144 AllowPartialRHSMatch = (1 << 1),
152 CheckSubString = (1 << 2),
160 CheckPrefix = (1 << 3),
168 CheckSuffix = (1 << 4),
169 };
172
175
178
181
183 bool IsValid() const
184 {
186 }
187
188 friend uint32 GetTypeHash(const FCoreRedirectObjectName& RedirectName)
189 {
190 return HashCombine(GetTypeHash(RedirectName.ObjectName), HashCombine(GetTypeHash(RedirectName.OuterName), GetTypeHash(RedirectName.PackageName)));
191 }
192
195
197 COREUOBJECT_API void AppendHash(FBlake3& Hasher) const;
198
201
204
213};
215
220{
223
226
229
232
235
242
249
252
255
262
264 COREUOBJECT_API bool HasValueChanges() const;
265
268
271
274
277 {
279 }
280
282 COREUOBJECT_API void AppendHash(FBlake3& Hasher) const;
284 COREUOBJECT_API int Compare(const FCoreRedirect& Other) const;
285
286private:
287 friend struct FCoreRedirects;
289
290 /* Returns the updated name after redirection. If bIsKnownToMatch is true, OldObjectName must have
291 been validated previously to be acceptable for redirection */
293
295 bool IsWildcardMatch() const
296 {
298 }
299
301 bool IsPrefixMatch() const
302 {
304 }
305
307 bool IsSuffixMatch() const
308 {
310 }
311};
312
317{
322 static COREUOBJECT_API void Initialize();
323
327
331
336
339
348
357
359
362
366
368 static COREUOBJECT_API bool ReadRedirectsFromIni(const FString& IniName);
369
371 static COREUOBJECT_API bool AddRedirectList(TArrayView<const FCoreRedirect> Redirects, const FString& SourceString);
372
374 static COREUOBJECT_API bool RemoveRedirectList(TArrayView<const FCoreRedirect> Redirects, const FString& SourceString);
375
377 static COREUOBJECT_API bool IsInitialized();
378
380 static COREUOBJECT_API bool IsInDebugMode();
381
383 static COREUOBJECT_API void ValidateRedirectList(TArrayView<const FCoreRedirect> Redirects, const FString& SourceString);
384
387
390
393
396
399
400#if WITH_EDITOR
406 UE_DEPRECATED(5.6, "Use GetHashOfRedirectsAffectingPackages(const TConstArrayView<FName> PackageNames, TArray<FBlake3Hash>& Hashes) instead.")
408
415
421
423 static COREUOBJECT_API void RecordAddedObjectRedirector(const FSoftObjectPath& Source, const FSoftObjectPath& Dest);
426#endif
427
429 static COREUOBJECT_API bool RunTests();
430
436
439
440private:
441
444
446 static COREUOBJECT_API bool AddRedirectListUnderWriteLock(TArrayView<const FCoreRedirect> Redirects,
447 const FString& SourceString, FScopeCoreRedirectsWriteLockedContext& LockedContext);
448
450 static COREUOBJECT_API bool AddSingleRedirectUnderWriteLock(const FCoreRedirect& NewRedirect,
451 const FString& SourceString, FScopeCoreRedirectsWriteLockedContext& LockedContext);
452
454 static COREUOBJECT_API bool RemoveSingleRedirectUnderWriteLock(const FCoreRedirect& OldRedirect,
455 const FString& SourceString, FScopeCoreRedirectsWriteLockedContext& LockedContext);
456
458 static COREUOBJECT_API void RegisterNativeRedirectsUnderWriteLock(FScopeCoreRedirectsWriteLockedContext& LockedContext);
459
461 static COREUOBJECT_API bool GetMatchingRedirectsUnderReadLock(ECoreRedirectFlags Type,
464
466 static COREUOBJECT_API bool RedirectNameAndValuesUnderReadLock(ECoreRedirectFlags Type, const FCoreRedirectObjectName& OldObjectName,
469
471 static COREUOBJECT_API bool ValidateAssetRedirectsUnderReadLock(FScopeCoreRedirectsReadLockedContext& LockedContext);
472
474 struct FWildcardData
475 {
476 void Add(const FCoreRedirect& Redirect);
477
478 void Rebuild();
480
481 TArray<FCoreRedirect> Substrings;
482 TArray<FCoreRedirect> Prefixes;
483 TArray<FCoreRedirect> Suffixes;
484 private:
486 bool MatchSubstringApproximate(const UE::CoreRedirects::Private::FCoreRedirectObjectUtf8Name& RedirectName) const;
487 void AddPredictionWords(const FCoreRedirect& Redirect);
488
489 FPredictMatch8 PredictMatch;
490 };
491
493 struct FRedirectNameMap
494 {
499 };
500
502 struct FRedirectTypeMap
503 {
504 public:
505 FRedirectTypeMap() = default;
506 FRedirectTypeMap(const FRedirectTypeMap& Other);
507 FRedirectTypeMap& operator=(const FRedirectTypeMap& Other);
508 FRedirectNameMap& FindOrAdd(ECoreRedirectFlags Key);
509 FRedirectNameMap* Find(ECoreRedirectFlags Key);
510 void Empty();
511
512 TArray<TPair<ECoreRedirectFlags, FRedirectNameMap>>::RangedForIteratorType begin() { return FastIterable.begin(); }
513 TArray<TPair<ECoreRedirectFlags, FRedirectNameMap>>::RangedForIteratorType end() { return FastIterable.end(); }
514
515 FRedirectTypeMap(const FRedirectTypeMap&& Other) = delete;
516 FRedirectTypeMap& operator=(const FRedirectTypeMap&& Other) = delete;
517 private:
520 };
521
523};
524
525
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
ECoreRedirectMatchFlags
Definition CoreRedirects.h:72
ECoreRedirectFlags
Definition CoreRedirects.h:41
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
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
constexpr bool EnumHasAnyFlags(Enum Flags, Enum Contains)
Definition EnumClassFlags.h:35
constexpr bool EnumHasAllFlags(Enum Flags, Enum Contains)
Definition EnumClassFlags.h:28
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
#define DECLARE_LOG_CATEGORY_EXTERN(CategoryName, DefaultVerbosity, CompileTimeVerbosity)
Definition LogMacros.h:361
constexpr uint32 HashCombine(uint32 A, uint32 C)
Definition TypeHash.h:36
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Blake3.h:94
Definition NameTypes.h:617
Definition GenericPlatformFile.h:1020
Definition ArrayView.h:139
Definition Array.h:670
Definition UnrealString.h.inl:34
Definition SharedPointer.h:692
Definition Class.h:3793
Definition Object.h:95
Definition SoftObjectPath.cpp:24
Definition CoreRedirects.cpp:69
Definition CoreRedirects.h:88
FCoreRedirectObjectName(FName InObjectName, FName InOuterName, FName InPackageName)
Definition CoreRedirects.h:102
FName ObjectName
Definition CoreRedirects.h:90
FName OuterName
Definition CoreRedirects.h:93
COREUOBJECT_API void Reset()
Definition CoreRedirects.cpp:502
bool operator==(const FCoreRedirectObjectName &Other) const
Definition CoreRedirects.h:124
COREUOBJECT_API void AppendHash(FBlake3 &Hasher) const
Definition CoreRedirects.cpp:1549
FName PackageName
Definition CoreRedirects.h:96
static COREUOBJECT_API FCoreRedirectObjectName GetParent(const FCoreRedirectObjectName &Child)
Definition CoreRedirects.cpp:1150
bool IsValid() const
Definition CoreRedirects.h:183
static COREUOBJECT_API bool ExpandNames(const FStringView FullString, FName &OutName, FName &OutOuter, FName &OutPackage)
Definition CoreRedirects.cpp:897
COREUOBJECT_API bool Matches(const FCoreRedirectObjectName &Other, EMatchFlags MatchFlags=EMatchFlags::None) const
Definition CoreRedirects.cpp:676
static COREUOBJECT_API FCoreRedirectObjectName AppendObjectName(const FCoreRedirectObjectName &Parent, FName ObjectName)
Definition CoreRedirects.cpp:1077
FCoreRedirectObjectName()=default
COREUOBJECT_API void UnionFieldsInline(const FCoreRedirectObjectName &Other)
Definition CoreRedirects.cpp:846
COREUOBJECT_API FString ToString() const
Definition CoreRedirects.cpp:497
static COREUOBJECT_API FString CombineNames(FName NewName, FName NewOuter, FName NewPackage)
Definition CoreRedirects.cpp:962
friend uint32 GetTypeHash(const FCoreRedirectObjectName &RedirectName)
Definition CoreRedirects.h:188
bool operator!=(const FCoreRedirectObjectName &Other) const
Definition CoreRedirects.h:129
COREUOBJECT_API int Compare(const FCoreRedirectObjectName &Other) const
Definition CoreRedirects.cpp:1575
EMatchFlags
Definition CoreRedirects.h:139
COREUOBJECT_API int32 MatchScore(const FCoreRedirectObjectName &Other, ECoreRedirectFlags RedirectFlags, ECoreRedirectMatchFlags MatchFlags) const
Definition CoreRedirects.cpp:779
COREUOBJECT_API bool HasValidCharacters(ECoreRedirectFlags Type) const
Definition CoreRedirects.cpp:872
FName GetSearchKey(ECoreRedirectFlags Type) const
Definition CoreRedirects.cpp:862
Definition CoreRedirects.h:220
COREUOBJECT_API int Compare(const FCoreRedirect &Other) const
Definition CoreRedirects.cpp:1519
FCoreRedirect(ECoreRedirectFlags InRedirectFlags, const FCoreRedirectObjectName &InOldName, const FCoreRedirectObjectName &InNewName)
Definition CoreRedirects.h:244
COREUOBJECT_API bool IsSubstringMatch() const
Definition CoreRedirects.cpp:1390
COREUOBJECT_API bool IdenticalMatchRules(const FCoreRedirect &Other) const
Definition CoreRedirects.cpp:1498
COREUOBJECT_API FCoreRedirectObjectName RedirectName(const FCoreRedirectObjectName &OldObjectName) const
Definition CoreRedirects.cpp:1493
TMap< FString, FString > ValueChanges
Definition CoreRedirects.h:234
COREUOBJECT_API bool Matches(ECoreRedirectFlags InFlags, const FCoreRedirectObjectName &InName, ECoreRedirectMatchFlags MatchFlags=ECoreRedirectMatchFlags::None) const
Definition CoreRedirects.cpp:1338
FCoreRedirectObjectName NewName
Definition CoreRedirects.h:228
FName GetSearchKey() const
Definition CoreRedirects.h:276
friend class FRedirectionSummary
Definition CoreRedirects.h:288
COREUOBJECT_API bool HasValueChanges() const
Definition CoreRedirects.cpp:1385
ECoreRedirectFlags RedirectFlags
Definition CoreRedirects.h:222
COREUOBJECT_API const TCHAR * ParseValueChanges(const TCHAR *Buffer)
Definition CoreRedirects.cpp:1259
COREUOBJECT_API void NormalizeNewName()
Definition CoreRedirects.cpp:1242
COREUOBJECT_API void AppendHash(FBlake3 &Hasher) const
Definition CoreRedirects.cpp:1504
FCoreRedirectObjectName OverrideClassName
Definition CoreRedirects.h:231
FCoreRedirectObjectName OldName
Definition CoreRedirects.h:225
FCoreRedirect(ECoreRedirectFlags InRedirectFlags, FString InOldName, FString InNewName)
Definition CoreRedirects.h:237
Definition CoreRedirectsContext.h:21
Definition CoreRedirects.h:317
static COREUOBJECT_API bool IsKnownMissing(ECoreRedirectFlags Type, const FCoreRedirectObjectName &ObjectName)
Definition CoreRedirects.cpp:1975
static COREUOBJECT_API bool GetMatchingRedirects(ECoreRedirectFlags Type, const FCoreRedirectObjectName &OldObjectName, TArray< const FCoreRedirect * > &FoundRedirects, ECoreRedirectMatchFlags MatchFlags=ECoreRedirectMatchFlags::None)
Definition CoreRedirects.cpp:1821
static COREUOBJECT_API bool AddRedirectList(TArrayView< const FCoreRedirect > Redirects, const FString &SourceString)
Definition CoreRedirects.cpp:2686
static COREUOBJECT_API bool RunTests()
Definition CoreRedirects.cpp:2067
static COREUOBJECT_API bool ReadRedirectsFromIni(const FString &IniName)
Definition CoreRedirects.cpp:2541
static COREUOBJECT_API bool RemoveKnownMissing(ECoreRedirectFlags Type, const FCoreRedirectObjectName &ObjectName, ECoreRedirectFlags Channel=ECoreRedirectFlags::Option_MissingLoad)
Definition CoreRedirects.cpp:1992
static COREUOBJECT_API bool RedirectNameAndValues(ECoreRedirectFlags Type, const FCoreRedirectObjectName &OldObjectName, FCoreRedirectObjectName &NewObjectName, const FCoreRedirect **FoundValueRedirect, ECoreRedirectMatchFlags MatchFlags=ECoreRedirectMatchFlags::None)
Definition CoreRedirects.cpp:1692
static COREUOBJECT_API void ValidateAllRedirects()
Definition CoreRedirects.cpp:3074
static COREUOBJECT_API bool IsInDebugMode()
Definition CoreRedirects.cpp:2905
static COREUOBJECT_API void Initialize()
Definition CoreRedirects.cpp:1676
static COREUOBJECT_API const TMap< FString, FString > * GetValueRedirects(ECoreRedirectFlags Type, const FCoreRedirectObjectName &OldObjectName, ECoreRedirectMatchFlags MatchFlags=ECoreRedirectMatchFlags::None)
Definition CoreRedirects.cpp:1801
static COREUOBJECT_API ECoreRedirectFlags GetFlagsForTypeName(FName PackageName, FName TypeName)
Definition CoreRedirects.cpp:3108
static COREUOBJECT_API bool RemoveRedirectList(TArrayView< const FCoreRedirect > Redirects, const FString &SourceString)
Definition CoreRedirects.cpp:2856
static COREUOBJECT_API void AddAssetRedirects(const TMap< FSoftObjectPath, FSoftObjectPath > &InRedirects)
Definition CoreRedirects.cpp:2455
static COREUOBJECT_API const TMap< FName, ECoreRedirectFlags > & GetConfigKeyMap()
Definition CoreRedirects.cpp:3101
static COREUOBJECT_API FCoreRedirectObjectName GetRedirectedName(ECoreRedirectFlags Type, const FCoreRedirectObjectName &OldObjectName, ECoreRedirectMatchFlags MatchFlags=ECoreRedirectMatchFlags::None)
Definition CoreRedirects.cpp:1790
static COREUOBJECT_API void ClearKnownMissing(ECoreRedirectFlags Type, ECoreRedirectFlags Channel=ECoreRedirectFlags::Option_MissingLoad)
Definition CoreRedirects.cpp:2000
static COREUOBJECT_API ECoreRedirectFlags GetFlagsForTypeClass(UClass *TypeClass)
Definition CoreRedirects.cpp:3154
static COREUOBJECT_API bool IsInitialized()
Definition CoreRedirects.cpp:2900
static COREUOBJECT_API void ValidateRedirectList(TArrayView< const FCoreRedirect > Redirects, const FString &SourceString)
Definition CoreRedirects.cpp:2986
static COREUOBJECT_API void RemoveAllAssetRedirects()
Definition CoreRedirects.cpp:2528
static COREUOBJECT_API bool FindPreviousNames(ECoreRedirectFlags Type, const FCoreRedirectObjectName &NewObjectName, TArray< FCoreRedirectObjectName > &PreviousNames)
Definition CoreRedirects.cpp:1880
static COREUOBJECT_API bool AddKnownMissing(ECoreRedirectFlags Type, const FCoreRedirectObjectName &ObjectName, ECoreRedirectFlags Channel=ECoreRedirectFlags::Option_MissingLoad)
Definition CoreRedirects.cpp:1982
static COREUOBJECT_API bool ValidateAssetRedirects()
Definition CoreRedirects.cpp:3095
Definition PM-k.h:54
Definition CoreRedirectsContext.h:156
Definition CoreRedirectsContext.h:194
Definition SoftObjectPath.h:56
Definition TopLevelAssetPath.h:38