Space Plunder
Loading...
Searching...
No Matches
UCircularDependenciesLib Class Reference

#include <CircularDependenciesLib.h>

Inheritance diagram for UCircularDependenciesLib:

Public Member Functions

 DECLARE_DYNAMIC_DELEGATE (FVoidDelegate)
 
 DECLARE_DYNAMIC_DELEGATE_TwoParams (FParseDelegate, const TArray< FAssetData > &, toParseFileList, const TArray< FString > &, toParseFolderList)
 
 DECLARE_DYNAMIC_DELEGATE (FVoidDelegate)
 
 DECLARE_DYNAMIC_DELEGATE_TwoParams (FParseDelegate, const TArray< FAssetData > &, toParseFileList, const TArray< FString > &, toParseFolderList)
 

Static Public Member Functions

static void SearchInBlueprint (UObject *Asset, bool bAllBlueprints, FString NewSearchTerms)
 
static UClass * GetClassFromAsset (UObject *Asset)
 
static TArray< FString > GetAllFunctions (UObject *Asset)
 
static bool IsInGameOrSlateThread ()
 
static void ExecuteTask (const FVoidDelegate &toExecute, bool bInBackground, bool bWait)
 
static bool RegexFind (const FString &pattern, const FString &input)
 
static void AddToDependencyStack (const TArray< FString > &assetPackageArray, const FName &CurrentAsset, UPARAM(ref) TMap< FName, FNameArray > &DependencyListMap, UPARAM(ref) TArray< FName > &DependencyStack, UPARAM(ref) TSet< FNamePair > &BrokenDependecySet, UPARAM(ref) TArray< UCircularInvolvedAssetItem * > &circularInvolvedItemArray, UPARAM(ref) FBoolHolder &isStopping)
 
static int getMaxDetectionCount ()
 
static float getAutomaticRefreshDelay ()
 
static TArray< FPluginGetEnabledPlugins ()
 
static const TArray< FString > & getPluginList ()
 
static void addPlugin (const FString &plugin)
 
static void removePlugin (const FString &plugin)
 
static const TArray< FString > & getExcludedAssetList ()
 
static bool addExcludedAsset (const FString &excludedAsset)
 
static bool removeExcludedAsset (const FString &excludedAsset)
 
static void BindParseDelegate (const FParseDelegate &toBind)
 
static void SearchInBlueprint (UObject *Asset, bool bAllBlueprints, FString NewSearchTerms)
 
static UClass * GetClassFromAsset (UObject *Asset)
 
static TArray< FString > GetAllFunctions (UObject *Asset)
 
static bool IsInGameOrSlateThread ()
 
static void ExecuteTask (const FVoidDelegate &toExecute, bool bInBackground, bool bWait)
 
static bool RegexFind (const FString &pattern, const FString &input)
 
static void AddToDependencyStack (const TArray< FString > &assetPackageArray, const FName &CurrentAsset, UPARAM(ref) TMap< FName, FNameArray > &DependencyListMap, UPARAM(ref) TArray< FName > &DependencyStack, UPARAM(ref) TSet< FNamePair > &BrokenDependecySet, UPARAM(ref) TArray< UCircularInvolvedAssetItem * > &circularInvolvedItemArray, UPARAM(ref) FBoolHolder &isStopping)
 
static int getMaxDetectionCount ()
 
static float getAutomaticRefreshDelay ()
 
static TArray< FPluginGetEnabledPlugins ()
 
static const TArray< FString > & getPluginList ()
 
static void addPlugin (const FString &plugin)
 
static void removePlugin (const FString &plugin)
 
static const TArray< FString > & getExcludedAssetList ()
 
static bool addExcludedAsset (const FString &excludedAsset)
 
static bool removeExcludedAsset (const FString &excludedAsset)
 
static void BindParseDelegate (const FParseDelegate &toBind)
 

Static Public Attributes

static FParseDelegate parseDelegate
 

Member Function Documentation

◆ addExcludedAsset() [1/2]

bool UCircularDependenciesLib::addExcludedAsset ( const FString & excludedAsset)
static
184{
185 bool result = !UCDD_ProjectConfig::Get()->excludedAssetList.Contains(excludedAsset); // true if not already contained
186 if (result)
187 {
188 UCDD_ProjectConfig::Get()->excludedAssetList.Add(excludedAsset);
189 UCDD_ProjectConfig::Get()->SaveConfig();
190 }
191 return result;
192}

◆ addExcludedAsset() [2/2]

static bool UCircularDependenciesLib::addExcludedAsset ( const FString & excludedAsset)
static

◆ addPlugin() [1/2]

void UCircularDependenciesLib::addPlugin ( const FString & plugin)
static
170{
171 UCDD_ProjectConfig::Get()->pluginList.AddUnique(plugin);
172 UCDD_ProjectConfig::Get()->SaveConfig();
173}

◆ addPlugin() [2/2]

static void UCircularDependenciesLib::addPlugin ( const FString & plugin)
static

◆ AddToDependencyStack() [1/2]

void UCircularDependenciesLib::AddToDependencyStack ( const TArray< FString > & assetPackageArray,
const FName & CurrentAsset,
UPARAM(ref) TMap< FName, FNameArray > & DependencyListMap,
UPARAM(ref) TArray< FName > & DependencyStack,
UPARAM(ref) TSet< FNamePair > & BrokenDependecySet,
UPARAM(ref) TArray< UCircularInvolvedAssetItem * > & circularInvolvedItemArray,
UPARAM(ref) FBoolHolder & isStopping )
static
94{
95 if (!FModuleManager::Get().IsModuleLoaded("AssetRegistry")) return;
96 if (DependencyStack.Num() >= (int32)UCDD_EditorConfig::Get()->maxDependencyDepth) return;
97 DependencyStack.Add(CurrentAsset);
98 static FAssetRegistryModule& assetRegistryModule = FModuleManager::GetModuleChecked<FAssetRegistryModule>("AssetRegistry");
99 TArray<FName> outDependencies;
100
101 static const FRegexPattern externalPattern(TEXT("/__External[^/]*__/"));
102
103 if (isStopping.value
104 || !assetPackageArray.FindByPredicate(
105 [&CurrentAsset](FString assetPackage) { return CurrentAsset.ToString().StartsWith(assetPackage); })
106 || FRegexMatcher(externalPattern, CurrentAsset.ToString()).FindNext())
107 {
108 DependencyStack.RemoveAt(DependencyStack.Num() - 1);
109 return;
110 }
111
112 if (const FNameArray* pDependencyList = DependencyListMap.Find(CurrentAsset)) outDependencies = pDependencyList->content;
113 else
114 {
115 if (!getExcludedAssetList().Contains(CurrentAsset.ToString()))
116 assetRegistryModule.GetRegistry().GetDependencies(CurrentAsset,
117 outDependencies,
118 UE::AssetRegistry::EDependencyCategory::Package,
119 UE::AssetRegistry::FDependencyQuery(UE::AssetRegistry::EDependencyQuery::Hard));
120 DependencyListMap.Add(CurrentAsset, FNameArray(outDependencies));
121 }
122 for (const auto& childAsset : outDependencies)
123 {
124 if (!assetPackageArray.FindByPredicate(
125 [&childAsset](FString assetPackage) { return childAsset.ToString().StartsWith(assetPackage); })
126 || FRegexMatcher(externalPattern, childAsset.ToString()).FindNext())
127 continue;
128 FNamePair currentDependency = FNamePair(CurrentAsset, childAsset);
129 if (childAsset.ToString() == CurrentAsset.ToString() || BrokenDependecySet.Contains(currentDependency)) continue;
130 int childAssetIndex = DependencyStack.Find(childAsset);
131 if (childAssetIndex == INDEX_NONE)
132 AddToDependencyStack(assetPackageArray,
133 childAsset,
134 DependencyListMap,
135 DependencyStack,
136 BrokenDependecySet,
137 circularInvolvedItemArray,
138 isStopping);
139 else
140 {
141 FNamePair oppositeDependency = FNamePair(childAsset, CurrentAsset);
142 BrokenDependecySet.Add(currentDependency);
143 BrokenDependecySet.Add(oppositeDependency);
144 TArray<FName> involvedDependencyStack;
145 for (int i = childAssetIndex; i < DependencyStack.Num(); i++) involvedDependencyStack.Add(DependencyStack[i]);
146 UCircularInvolvedAssetItem* circularInvolvedItem = NewObject<UCircularInvolvedAssetItem>();
147 circularInvolvedItem->AssetName = involvedDependencyStack[0];
148 circularInvolvedItem->DependencyStack = involvedDependencyStack;
149 circularInvolvedItemArray.Add(circularInvolvedItem);
150 }
151 }
152 DependencyStack.RemoveAt(DependencyStack.Num() - 1);
153}
static const TArray< FString > & getExcludedAssetList()
Definition CircularDependenciesLib.cpp:181
static void AddToDependencyStack(const TArray< FString > &assetPackageArray, const FName &CurrentAsset, UPARAM(ref) TMap< FName, FNameArray > &DependencyListMap, UPARAM(ref) TArray< FName > &DependencyStack, UPARAM(ref) TSet< FNamePair > &BrokenDependecySet, UPARAM(ref) TArray< UCircularInvolvedAssetItem * > &circularInvolvedItemArray, UPARAM(ref) FBoolHolder &isStopping)
Definition CircularDependenciesLib.cpp:87
Definition CircularInvolvedAssetItem.h:13
FName AssetName
Definition CircularInvolvedAssetItem.h:19
TArray< FName > DependencyStack
Definition CircularInvolvedAssetItem.h:22
Definition NameArray.h:13
Definition NamePair.h:13

◆ AddToDependencyStack() [2/2]

static void UCircularDependenciesLib::AddToDependencyStack ( const TArray< FString > & assetPackageArray,
const FName & CurrentAsset,
UPARAM(ref) TMap< FName, FNameArray > & DependencyListMap,
UPARAM(ref) TArray< FName > & DependencyStack,
UPARAM(ref) TSet< FNamePair > & BrokenDependecySet,
UPARAM(ref) TArray< UCircularInvolvedAssetItem * > & circularInvolvedItemArray,
UPARAM(ref) FBoolHolder & isStopping )
static

◆ BindParseDelegate() [1/2]

void UCircularDependenciesLib::BindParseDelegate ( const FParseDelegate & toBind)
static
202{
204}
static FParseDelegate parseDelegate
Definition CircularDependenciesLib.h:89

◆ BindParseDelegate() [2/2]

static void UCircularDependenciesLib::BindParseDelegate ( const FParseDelegate & toBind)
static

◆ DECLARE_DYNAMIC_DELEGATE() [1/2]

UCircularDependenciesLib::DECLARE_DYNAMIC_DELEGATE ( FVoidDelegate )

◆ DECLARE_DYNAMIC_DELEGATE() [2/2]

UCircularDependenciesLib::DECLARE_DYNAMIC_DELEGATE ( FVoidDelegate )

◆ DECLARE_DYNAMIC_DELEGATE_TwoParams() [1/2]

UCircularDependenciesLib::DECLARE_DYNAMIC_DELEGATE_TwoParams ( FParseDelegate ,
const TArray< FAssetData > & ,
toParseFileList ,
const TArray< FString > & ,
toParseFolderList  )

◆ DECLARE_DYNAMIC_DELEGATE_TwoParams() [2/2]

UCircularDependenciesLib::DECLARE_DYNAMIC_DELEGATE_TwoParams ( FParseDelegate ,
const TArray< FAssetData > & ,
toParseFileList ,
const TArray< FString > & ,
toParseFolderList  )

◆ ExecuteTask() [1/2]

void UCircularDependenciesLib::ExecuteTask ( const FVoidDelegate & toExecute,
bool bInBackground,
bool bWait )
static
65{
66 volatile bool isDone = false;
67
68 // toExecute must be passed as copy because...
69 AsyncTask(bInBackground ? ENamedThreads::AnyBackgroundThreadNormalTask : ENamedThreads::GameThread,
70 [toExecute, &isDone]
71 {
72 toExecute.ExecuteIfBound();
73 isDone = true;
74 });
75
76 if (bWait)
77 while (!isDone)
78 {
79 } // wait
80}

◆ ExecuteTask() [2/2]

static void UCircularDependenciesLib::ExecuteTask ( const FVoidDelegate & toExecute,
bool bInBackground,
bool bWait )
static

◆ GetAllFunctions() [1/2]

TArray< FString > UCircularDependenciesLib::GetAllFunctions ( UObject * Asset)
static
51{
52 TArray<FString> result;
53
54 if (!IsValid(Asset)) return result;
55
56 if (UBlueprint* blueprint = Cast<UBlueprint>(Asset))
57 for (auto p : blueprint->FunctionGraphs) result.Add(p->GetName());
58
59 return result;
60}

◆ GetAllFunctions() [2/2]

static TArray< FString > UCircularDependenciesLib::GetAllFunctions ( UObject * Asset)
static

◆ getAutomaticRefreshDelay() [1/2]

float UCircularDependenciesLib::getAutomaticRefreshDelay ( )
static
157{ return UCDD_EditorConfig::Get()->automaticRefreshDelay; }

◆ getAutomaticRefreshDelay() [2/2]

static float UCircularDependenciesLib::getAutomaticRefreshDelay ( )
static

◆ GetClassFromAsset() [1/2]

UClass * UCircularDependenciesLib::GetClassFromAsset ( UObject * Asset)
static
43{
44 if (!IsValid(Asset)) return nullptr;
45
46 if (UBlueprint* blueprint = Cast<UBlueprint>(Asset)) return blueprint->GeneratedClass;
47 return nullptr;
48}

◆ GetClassFromAsset() [2/2]

static UClass * UCircularDependenciesLib::GetClassFromAsset ( UObject * Asset)
static

◆ GetEnabledPlugins() [1/2]

TArray< FPlugin > UCircularDependenciesLib::GetEnabledPlugins ( )
static
160{
161 TArray<FPlugin> result;
162 for (const auto& plugin : IPluginManager::Get().GetEnabledPlugins())
163 result.Add(FPlugin(plugin->GetName(), plugin->GetBaseDir()));
164 return result;
165}
static TArray< FPlugin > GetEnabledPlugins()
Definition CircularDependenciesLib.cpp:159
Definition Plugin.h:10

◆ GetEnabledPlugins() [2/2]

static TArray< FPlugin > UCircularDependenciesLib::GetEnabledPlugins ( )
static

◆ getExcludedAssetList() [1/2]

const TArray< FString > & UCircularDependenciesLib::getExcludedAssetList ( )
static
181{ return UCDD_ProjectConfig::Get()->excludedAssetList; }

◆ getExcludedAssetList() [2/2]

static const TArray< FString > & UCircularDependenciesLib::getExcludedAssetList ( )
static

◆ getMaxDetectionCount() [1/2]

int UCircularDependenciesLib::getMaxDetectionCount ( )
static
155{ return UCDD_EditorConfig::Get()->maxDetectionCount; }

◆ getMaxDetectionCount() [2/2]

static int UCircularDependenciesLib::getMaxDetectionCount ( )
static

◆ getPluginList() [1/2]

const TArray< FString > & UCircularDependenciesLib::getPluginList ( )
static
167{ return UCDD_ProjectConfig::Get()->pluginList; }

◆ getPluginList() [2/2]

static const TArray< FString > & UCircularDependenciesLib::getPluginList ( )
static

◆ IsInGameOrSlateThread() [1/2]

bool UCircularDependenciesLib::IsInGameOrSlateThread ( )
static
62{ return IsInGameThread() || IsInSlateThread(); }

◆ IsInGameOrSlateThread() [2/2]

static bool UCircularDependenciesLib::IsInGameOrSlateThread ( )
static

◆ RegexFind() [1/2]

bool UCircularDependenciesLib::RegexFind ( const FString & pattern,
const FString & input )
static
83{
84 return FRegexMatcher(FRegexPattern(pattern), input).FindNext();
85}

◆ RegexFind() [2/2]

static bool UCircularDependenciesLib::RegexFind ( const FString & pattern,
const FString & input )
static

◆ removeExcludedAsset() [1/2]

bool UCircularDependenciesLib::removeExcludedAsset ( const FString & excludedAsset)
static
195{
196 bool result = UCDD_ProjectConfig::Get()->excludedAssetList.Remove(excludedAsset) > 0;
197 UCDD_ProjectConfig::Get()->SaveConfig();
198 return result;
199}

◆ removeExcludedAsset() [2/2]

static bool UCircularDependenciesLib::removeExcludedAsset ( const FString & excludedAsset)
static

◆ removePlugin() [1/2]

void UCircularDependenciesLib::removePlugin ( const FString & plugin)
static
176{
177 UCDD_ProjectConfig::Get()->pluginList.Remove(plugin);
178 UCDD_ProjectConfig::Get()->SaveConfig();
179}

◆ removePlugin() [2/2]

static void UCircularDependenciesLib::removePlugin ( const FString & plugin)
static

◆ SearchInBlueprint() [1/2]

void UCircularDependenciesLib::SearchInBlueprint ( UObject * Asset,
bool bAllBlueprints,
FString NewSearchTerms )
static
22{
23 auto assetEditorInstance = GEditor->GetEditorSubsystem<UAssetEditorSubsystem>()->FindEditorForAsset(Asset, false);
24 if (Asset->IsA<UBehaviorTree>())
25 {
26 FNotificationInfo notifInfo(NSLOCTEXT("CircularDependenciesDetector", "CircularDependenciesDetector", ""));
27 FString message = FString("Search not available for Behaviour Tree");
28 notifInfo.Text = FText::FromString(message);
29 notifInfo.ExpireDuration = 3.0f;
30 notifInfo.Image = FCoreStyle::Get().GetBrush(TEXT("MessageLog.Warning"));
31 FSlateNotificationManager::Get().AddNotification(notifInfo);
32 UE_LOG(LogTemp, Warning, TEXT("%s, contact me if you know how to implement it"), *message);
33 }
34 else // if (Asset->IsA<UBlueprint>())
35 {
36 // UE_LOG(LogTemp, Warning, TEXT("Class name : %s"), *Asset->GetClass()->GetDisplayNameText().ToString());
37 if (IBlueprintEditor* blueprintEditor = StaticCast<IBlueprintEditor*>(assetEditorInstance))
38 blueprintEditor->SummonSearchUI(!bAllBlueprints, NewSearchTerms);
39 }
40}

◆ SearchInBlueprint() [2/2]

static void UCircularDependenciesLib::SearchInBlueprint ( UObject * Asset,
bool bAllBlueprints,
FString NewSearchTerms )
static

Member Data Documentation

◆ parseDelegate

static FParseDelegate UCircularDependenciesLib::parseDelegate
inlinestatic

The documentation for this class was generated from the following files: