void FRiderSourceCodeAccessModule::GenerateUprojectAccessors()

in Source/RiderSourceCodeAccess/Private/RiderSourceCodeAccessorModule.cpp [62:91]


void FRiderSourceCodeAccessModule::GenerateUprojectAccessors(const TArray<FInstallInfo>& InstallInfos)
{
	TArray<TArray<FInstallInfo>::ElementType> UprojectInfos = InstallInfos.FilterByPredicate([](const FInstallInfo& Item) -> bool
	{
		return Item.SupportUprojectState != FInstallInfo::ESupportUproject::None;
	});

	if(UprojectInfos.Num() == 0) return;

	if(UprojectInfos.Num() > 1)
	{
		for (const FInstallInfo& UprojectInfo : UprojectInfos)
		{
			TSharedRef<FRiderSourceCodeAccessor> RiderSourceCodeAccessor = MakeShareable(new FRiderSourceCodeAccessor());
			RiderSourceCodeAccessor->Init(UprojectInfo, FRiderSourceCodeAccessor::EProjectModel::Uproject);
			IModularFeatures::Get().RegisterModularFeature(FRiderSourceCodeAccessor::FeatureType(), &RiderSourceCodeAccessor.Get());
			RiderSourceCodeAccessors.Add(RiderSourceCodeAccessor->GetFName(), RiderSourceCodeAccessor);
		}
	}

	const TSharedRef<FRiderSourceCodeAccessor> RiderSourceCodeAccessor = MakeShareable(new FRiderSourceCodeAccessor());
	RiderSourceCodeAccessor->Init(InstallInfos.Last(), FRiderSourceCodeAccessor::EProjectModel::Uproject,
                                  FRiderSourceCodeAccessor::EAccessType::Aggregate);
	IModularFeatures::Get().RegisterModularFeature(FRiderSourceCodeAccessor::FeatureType(), &RiderSourceCodeAccessor.Get());
	FString AccessorName = TEXT("Rider uproject");
	if(InstallInfos.Last().SupportUprojectState == FInstallInfo::ESupportUproject::Beta)
		AccessorName += TEXT(" (experimental)");
	
	RiderSourceCodeAccessors.Add(*AccessorName, RiderSourceCodeAccessor);
}