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); + } } } }