118 lines
3.2 KiB
C++
118 lines
3.2 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#pragma once
|
|
|
|
#include "Containers/Array.h"
|
|
#include "Containers/UnrealString.h"
|
|
#include "CoreGlobals.h"
|
|
#include "DataValidationModule.h"
|
|
#include "EditorValidatorBase.h"
|
|
#include "HAL/Platform.h"
|
|
#include "Logging/LogVerbosity.h"
|
|
#include "Misc/OutputDevice.h"
|
|
#include "Misc/OutputDeviceRedirector.h"
|
|
#include "UObject/NameTypes.h"
|
|
#include "UObject/UObjectGlobals.h"
|
|
|
|
#include "EditorValidator.generated.h"
|
|
|
|
class UObject;
|
|
|
|
class FLyraValidationMessageGatherer : public FOutputDevice
|
|
{
|
|
public:
|
|
FLyraValidationMessageGatherer()
|
|
: FOutputDevice()
|
|
{
|
|
GLog->AddOutputDevice(this);
|
|
}
|
|
|
|
virtual ~FLyraValidationMessageGatherer()
|
|
{
|
|
GLog->RemoveOutputDevice(this);
|
|
}
|
|
|
|
virtual void Serialize(const TCHAR* V, ELogVerbosity::Type Verbosity, const class FName& Category) override
|
|
{
|
|
if (Verbosity <= ELogVerbosity::Warning)
|
|
{
|
|
FString MessageString(V);
|
|
bool bIgnored = false;
|
|
for (const FString& IgnorePattern : IgnorePatterns)
|
|
{
|
|
if (MessageString.Contains(IgnorePattern))
|
|
{
|
|
bIgnored = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (!bIgnored)
|
|
{
|
|
AllWarningsAndErrors.Add(MessageString);
|
|
if (Verbosity == ELogVerbosity::Warning)
|
|
{
|
|
AllWarnings.Add(MessageString);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
const TArray<FString>& GetAllWarningsAndErrors() const
|
|
{
|
|
return AllWarningsAndErrors;
|
|
}
|
|
|
|
const TArray<FString>& GetAllWarnings() const
|
|
{
|
|
return AllWarnings;
|
|
}
|
|
|
|
static void AddIgnorePatterns(const TArray<FString>& NewPatterns)
|
|
{
|
|
IgnorePatterns.Append(NewPatterns);
|
|
}
|
|
|
|
static void RemoveIgnorePatterns(const TArray<FString>& PatternsToRemove)
|
|
{
|
|
for (const FString& PatternToRemove : PatternsToRemove)
|
|
{
|
|
IgnorePatterns.RemoveSingleSwap(PatternToRemove);
|
|
}
|
|
}
|
|
|
|
private:
|
|
TArray<FString> AllWarningsAndErrors;
|
|
TArray<FString> AllWarnings;
|
|
static TArray<FString> IgnorePatterns;
|
|
};
|
|
|
|
UCLASS(Abstract)
|
|
class UEditorValidator : public UEditorValidatorBase
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
UEditorValidator();
|
|
|
|
static void ValidateCheckedOutContent(bool bInteractive, const EDataValidationUsecase InValidationUsecase);
|
|
static bool ValidatePackages(const TArray<FString>& ExistingPackageNames, const TArray<FString>& DeletedPackageNames, int32 MaxPackagesToLoad, TArray<FString>& OutAllWarningsAndErrors, const EDataValidationUsecase InValidationUsecase);
|
|
static bool ValidateProjectSettings();
|
|
|
|
static bool IsInUncookedFolder(const FString& PackageName, FString* OutUncookedFolderName = nullptr);
|
|
static bool ShouldAllowFullValidation();
|
|
|
|
static void GetChangedAssetsForCode(class IAssetRegistry& AssetRegistry, const FString& ChangedHeaderLocalFilename, TArray<FString>& OutChangedPackageNames);
|
|
|
|
protected:
|
|
virtual bool CanValidateAsset_Implementation(UObject* InAsset) const override;
|
|
|
|
static TArray<FString> TestMapsFolders;
|
|
|
|
private:
|
|
/**
|
|
* Used by some validators to determine if it is okay to load referencing assets or other slow tasks.
|
|
* This is not okay for fast operations like saving, but is fine for slower "check everything thoroughly" tests
|
|
*/
|
|
static bool bAllowFullValidationInEditor;
|
|
}; |