UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
RedirectCollector.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 RedirectCollector: Editor-only global object that handles resolving redirectors and handling string asset cooking rules
5=============================================================================*/
6
7#pragma once
8
9#include "Async/UniqueLock.h"
10#include "Containers/Map.h"
11#include "Containers/Set.h"
13#include "CoreMinimal.h"
14#include "HAL/CriticalSection.h"
15#include "HAL/Platform.h"
16#include "Misc/ScopeLock.h"
17#include "Misc/TVariant.h"
18#include "Templates/Function.h"
19#include "Templates/TypeHash.h"
20#include "Templates/UniquePtr.h"
21#include "UObject/NameTypes.h"
23#include "UObject/UnrealNames.h"
24
25class FArchive;
26
27#if WITH_EDITOR
28
30
32{
33private:
34
37 {
42 {}
43
45 {
46 return ObjectPath == Other.ObjectPath &&
47 PropertyName == Other.PropertyName &&
48 bReferencedByEditorOnlyProperty == Other.bReferencedByEditorOnlyProperty;
49 }
50
51 friend inline uint32 GetTypeHash(const FSoftObjectPathProperty& Key)
52 {
53 uint32 Hash = 0;
54 Hash = HashCombine(Hash, GetTypeHash(Key.ObjectPath));
55 Hash = HashCombine(Hash, GetTypeHash(Key.PropertyName));
56 Hash = HashCombine(Hash, (uint32)Key.bReferencedByEditorOnlyProperty);
57 return Hash;
58 }
59
60 const FSoftObjectPath& GetObjectPath() const
61 {
62 return ObjectPath;
63 }
64
65 const FName& GetPropertyName() const
66 {
67 return PropertyName;
68 }
69
71 {
73 }
74
75 private:
79 };
80
81public:
82
89
97
103
111
114
117
121
127 {
128 return SoftObjectPathMap.Num() > 0;
129 }
130
140
143
145 UE_DEPRECATED(5.6, "Use EnumerateRedirectsUnderLock instead.")
147 GetObjectPathRedirectionMapUnderLock(const UE::TDynamicUniqueLock<FCriticalSection>& Lock) const;
148
154 {
155 public:
156 const FSoftObjectPath& GetSource() const;
157 const FSoftObjectPath& GetFirstTarget() const;
158 const FSoftObjectPath& GetFinalTarget() const;
159
160 private:
161 const FSoftObjectPath& Source;
166 friend FRedirectCollector;
167 };
173
176
177 UE_DEPRECATED(5.6, "Use EnumerateRedirectsUnderLock instead.")
178 UE::TDynamicUniqueLock<FCriticalSection> AcquireLock() const
179 {
180 return UE::TDynamicUniqueLock<FCriticalSection>(CriticalSection);
181 }
182
183private:
184
186 void AddObjectPathRedirectionInternal(const FSoftObjectPath& Source, const FSoftObjectPath& Destination);
187
190
197
201
204
206 FSoftObjectPathMap SoftObjectPathMap;
209
212 {
215 };
221 {
222 public:
228
229 const FSoftObjectPath& GetFirstTarget() const;
230 const FSoftObjectPath& GetFinalTarget() const;
231 bool IsSimpleRedirect() const;
232 bool IsChainedRedirect() const;
233
234 private:
236 };
239
243
245 mutable FCriticalSection CriticalSection;
246
248 {
250 Disabled,
251 Enabled,
252 };
254
256};
257
258// global redirect collector callback structure
260
261
263// Inline implementations
265
266
267inline FRedirectCollector::FSimpleOrChainedRedirect::FSimpleOrChainedRedirect()
269{
270}
271
272inline FRedirectCollector::FSimpleOrChainedRedirect::FSimpleOrChainedRedirect(
275{
276}
277
278inline FRedirectCollector::FSimpleOrChainedRedirect::FSimpleOrChainedRedirect(
282{
283}
284
285inline FRedirectCollector::FSimpleOrChainedRedirect
286FRedirectCollector::FSimpleOrChainedRedirect::ConstructSimpleOrChained(
288{
292}
293
294inline const FSoftObjectPath& FRedirectCollector::FSimpleOrChainedRedirect::GetFirstTarget() const
295{
296 return IsSimpleRedirect()
297 ? Data.Get<FSoftObjectPath>()
299}
300
301inline const FSoftObjectPath& FRedirectCollector::FSimpleOrChainedRedirect::GetFinalTarget() const
302{
303 return IsSimpleRedirect()
304 ? Data.Get<FSoftObjectPath>()
306}
307
308inline bool FRedirectCollector::FSimpleOrChainedRedirect::IsSimpleRedirect() const
309{
310 return Data.IsType<FSoftObjectPath>();
311}
312
313inline bool FRedirectCollector::FSimpleOrChainedRedirect::IsChainedRedirect() const
314{
316}
317
318inline const FSoftObjectPath& FRedirectCollector::FRedirectionData::GetSource() const
319{
320 return Source;
321}
322
323inline const FSoftObjectPath& FRedirectCollector::FRedirectionData::GetFirstTarget() const
324{
325 return FirstTarget;
326}
327
328inline const FSoftObjectPath& FRedirectCollector::FRedirectionData::GetFinalTarget() const
329{
330 return FinalTarget;
331}
332
333inline FRedirectCollector::FRedirectionData::FRedirectionData(const FSoftObjectPath& InSource,
336{
337}
338
339#endif // WITH_EDITOR
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
ESoftObjectPathCollectType
Definition SoftObjectPath.h:618
constexpr uint32 HashCombine(uint32 A, uint32 C)
Definition TypeHash.h:36
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
FRWLock Lock
Definition UnversionedPropertySerialization.cpp:921
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 NameTypes.h:617
Definition Array.h:670
Definition AssetRegistryState.h:50
Definition UnrealString.h.inl:34
Definition UniquePtr.h:107
Definition TVariant.h:48
Definition UniqueLock.h:49
GeometryCollection::Facades::FMuscleActivationData Data
Definition MuscleActivationConstraints.h:15
uint32 GetTypeHash(const FKey &Key)
Definition BlackboardKey.h:35
FORCEINLINE T * Get(const FObjectPtr &ObjectPtr)
Definition ObjectPtr.h:426
bool operator==(const FCachedAssetKey &A, const FCachedAssetKey &B)
Definition AssetDataMap.h:501
Definition AdvancedWidgetsModule.cpp:13
Definition SoftObjectPath.h:56
Definition TVariant.h:13