You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
#rb Zousar.Shaker #rnx #preflight 6245a64e637925b5d3c6c729 [CL 19571741 by Matt Peters in ue5-main branch]
103 lines
3.6 KiB
C++
103 lines
3.6 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#include "PackageDependencyData.h"
|
|
|
|
FName FPackageDependencyData::GetImportPackageName(const TArray<FObjectImport>& ImportMap, int32 ImportIndex)
|
|
{
|
|
for (int32 NumCycles = 0; NumCycles < ImportMap.Num(); ++NumCycles)
|
|
{
|
|
if (!ImportMap.IsValidIndex(ImportIndex))
|
|
{
|
|
return NAME_None;
|
|
}
|
|
const FObjectImport& Resource = ImportMap[ImportIndex];
|
|
// If the import has a package name set, then that's the import package name,
|
|
if (Resource.HasPackageName())
|
|
{
|
|
return Resource.GetPackageName();
|
|
}
|
|
// If our outer is null, then we have a package
|
|
else if (Resource.OuterIndex.IsNull())
|
|
{
|
|
return Resource.ObjectName;
|
|
}
|
|
if (!Resource.OuterIndex.IsImport())
|
|
{
|
|
return NAME_None;
|
|
}
|
|
ImportIndex = Resource.OuterIndex.ToImport();
|
|
}
|
|
return NAME_None;
|
|
}
|
|
|
|
void FPackageDependencyData::LoadDependenciesFromPackageHeader(FName SourcePackageName, TArray<FObjectImport>& ImportMap,
|
|
TArray<FName>& SoftPackageReferenceList, TMap<FPackageIndex, TArray<FName>>& SearchableNames,
|
|
TBitArray<>& ImportUsedInGame, TBitArray<>& SoftPackageUsedInGame)
|
|
{
|
|
using namespace UE::AssetRegistry;
|
|
|
|
PackageDependencies.Reset(ImportMap.Num() + SoftPackageReferenceList.Num());
|
|
check(ImportMap.Num() == ImportUsedInGame.Num());
|
|
for (int32 ImportIdx = 0; ImportIdx < ImportMap.Num(); ++ImportIdx)
|
|
{
|
|
FName DependencyPackageName = GetImportPackageName(ImportMap, ImportIdx);
|
|
EDependencyProperty DependencyProperty = EDependencyProperty::Build | EDependencyProperty::Hard;
|
|
DependencyProperty |= ImportUsedInGame[ImportIdx] ? EDependencyProperty::Game : EDependencyProperty::None;
|
|
PackageDependencies.Add({ DependencyPackageName, DependencyProperty });
|
|
}
|
|
|
|
check(SoftPackageReferenceList.Num() == SoftPackageUsedInGame.Num());
|
|
for (int32 SoftPackageIdx = 0; SoftPackageIdx < SoftPackageReferenceList.Num(); ++SoftPackageIdx)
|
|
{
|
|
FName DependencyPackageName = SoftPackageReferenceList[SoftPackageIdx];
|
|
FAssetIdentifier AssetId(DependencyPackageName);
|
|
EDependencyProperty DependencyProperty = UE::AssetRegistry::EDependencyProperty::Build; // !EDependencyProperty::Hard
|
|
DependencyProperty |= (SoftPackageUsedInGame[SoftPackageIdx] ? EDependencyProperty::Game : EDependencyProperty::None);
|
|
PackageDependencies.Add({ DependencyPackageName, DependencyProperty });
|
|
}
|
|
|
|
SearchableNameDependencies.Reset(SearchableNames.Num());
|
|
for (const TPair<FPackageIndex, TArray<FName>>& SearchableNameList : SearchableNames)
|
|
{
|
|
FName ObjectName;
|
|
FName DependencyPackageName;
|
|
|
|
// Find object and package name from linker
|
|
FPackageIndex LinkerIndex = SearchableNameList.Key;
|
|
if (LinkerIndex.IsExport())
|
|
{
|
|
// Package name has to be this package, take a guess at object name
|
|
DependencyPackageName = SourcePackageName;
|
|
ObjectName = FName(*FPackageName::GetLongPackageAssetName(DependencyPackageName.ToString()));
|
|
}
|
|
else if (LinkerIndex.IsImport())
|
|
{
|
|
int32 ImportIndex = LinkerIndex.ToImport();
|
|
if (!ImportMap.IsValidIndex(ImportIndex))
|
|
{
|
|
continue;
|
|
}
|
|
FObjectImport& Resource = ImportMap[ImportIndex];
|
|
FPackageIndex OuterLinkerIndex = Resource.OuterIndex;
|
|
if (!OuterLinkerIndex.IsNull())
|
|
{
|
|
ObjectName = Resource.ObjectName;
|
|
}
|
|
DependencyPackageName = GetImportPackageName(ImportMap, ImportIndex);
|
|
if (DependencyPackageName.IsNone())
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
continue;
|
|
}
|
|
|
|
FSearchableNamesDependency& Dependency = SearchableNameDependencies.Emplace_GetRef();
|
|
Dependency.PackageName = DependencyPackageName;
|
|
Dependency.ObjectName = ObjectName;
|
|
Dependency.ValueNames = SearchableNameList.Value;
|
|
}
|
|
}
|