From fccf550d06faad677ef086b024c2b16545bca171 Mon Sep 17 00:00:00 2001 From: rex hill Date: Tue, 6 Aug 2019 11:32:54 -0400 Subject: [PATCH] In use by any level content browser filter now checks more than one layer deep. #rb none #jira UE-78065 #ROBOMERGE-OWNER: ben.marsh #ROBOMERGE-AUTHOR: rex.hill #ROBOMERGE-SOURCE: CL 7660692 via CL 7665277 via CL 7665519 #ROBOMERGE-BOT: BUILD (Main -> Dev-Build) (v388-7785529) [CL 7795650 by rex hill in Dev-Build branch] --- .../Private/FrontendFilters.cpp | 30 ++++++++++++++----- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/Engine/Source/Editor/ContentBrowser/Private/FrontendFilters.cpp b/Engine/Source/Editor/ContentBrowser/Private/FrontendFilters.cpp index e15db26daaa3..d961833e651a 100644 --- a/Engine/Source/Editor/ContentBrowser/Private/FrontendFilters.cpp +++ b/Engine/Source/Editor/ContentBrowser/Private/FrontendFilters.cpp @@ -33,17 +33,31 @@ namespace FrontendFilterHelper */ void GetDependencies(const FARFilter& InAssetRegistryFilter, const IAssetRegistry& AssetRegistry, TSet& OutDependencySet) { - TArray FoundAssets; - AssetRegistry.GetAssets(InAssetRegistryFilter, FoundAssets); - - for (const FAssetData& AssetData : FoundAssets) + TArray PackageNamesToProcess; { - // Store all the dependencies of all the levels - TArray AssetDependencies; - AssetRegistry.GetDependencies(FAssetIdentifier(AssetData.PackageName), AssetDependencies); + TArray FoundAssets; + AssetRegistry.GetAssets(InAssetRegistryFilter, FoundAssets); + for (const FAssetData& AssetData : FoundAssets) + { + PackageNamesToProcess.Add(AssetData.PackageName); + OutDependencySet.Add(AssetData.PackageName); + } + } + + TArray AssetDependencies; + while (PackageNamesToProcess.Num() > 0) + { + const FName PackageName = PackageNamesToProcess.Pop(false); + AssetDependencies.Reset(); + AssetRegistry.GetDependencies(FAssetIdentifier(PackageName), AssetDependencies); for (const FAssetIdentifier& Dependency : AssetDependencies) { - OutDependencySet.Add(Dependency.PackageName); + bool bIsAlreadyInSet = false; + OutDependencySet.Add(Dependency.PackageName, &bIsAlreadyInSet); + if (bIsAlreadyInSet == false) + { + PackageNamesToProcess.Add(Dependency.PackageName); + } } } }