UEditorValidatorBase::ValidateLoadedAsset() is not using the K2_ValidateLoadedAsset() output, effectively ignoring the Blueprint validation.
The K2Result is not used later in the function, and this reflects on the verification being ignored, as exemplified by the repro steps provided.
The behavior changed. It previously worked up to version 5.3, but after 5.4 up to 5.6 (CL42031367) it stopped working, so I've marked it as a Regression.
Create an Empty blank project
Open editor & right click in content browser click "Editor Utilities-> Editor Utility Blueprint" & set parent class to EditorValidatorBase.cpp, and save (name it, for instance, EUB_Repro)
Override CanValidate and CanValidadeAsset functions making both return true
Override the ValidateLoadedAsset function and return Invalid
Create any asset (for instance, an actor BP named BP_TestAsset), and save
Close and reopen the project to register the Validator
Edit the created Asset (BP_TestAsset) and save
Expected result: we should get a Message Log warning us that the validation returned Invalid (this is the behavior on 5.0, 5.1, 5.2, 5.3)
Actual result: there is no warning, the Asset is saved and the Invalid return is ignored. Notice that the BP is run, but the invalid result is not logged, as it can be verified in the logs (names from my repro project):
LogContentValidation: Display: Starting to validate 1 assets
LogContentValidation: Enabled validators:
LogContentValidation: /Script/DataValidation.EditorValidator_Material
LogContentValidation: /Script/DataValidation.DirtyFilesChangelistValidator
LogContentValidation: /Script/DataValidation.EditorValidator_Localization
LogContentValidation: /Script/DataValidation.PackageFileValidator
LogContentValidation: /Script/DataValidation.WorldPartitionChangelistValidator
LogContentValidation: /Script/InputBlueprintNodes.EnhancedInputUserWidgetValidator
LogContentValidation: /Game/BPs/EUB_Repro.EUB_Repro_C
AssetCheck: /Game/BPs/BP_TestAsset Validating asset
> UnrealEditor-DataValidation.dll!UEditorValidatorBase::ValidateLoadedAsset(const FAssetData & AssetData, UObject * Asset, FDataValidationContext & Context) Line 34 C++
UnrealEditor-DataValidation.dll!UEditorValidatorSubsystem::ValidateObjectInternal::__l5::<lambda_5>::operator()(UEditorValidatorBase * Validator) Line 359 C++
[Inline Frame] UnrealEditor-DataValidation.dll!UE::Core::Private::Function::TFunctionRefBase<UE::Core::Private::Function::FFunctionRefStoragePolicy,bool __cdecl(UEditorValidatorBase *)>::operator()(UEditorValidatorBase * <Params_0>) Line 470 C++
UnrealEditor-DataValidation.dll!UEditorValidatorSubsystem::ForEachEnabledValidator(TFunctionRef<bool __cdecl(UEditorValidatorBase *)> Callback) Line 254 C++
UnrealEditor-DataValidation.dll!UEditorValidatorSubsystem::ValidateObjectInternal(const FAssetData & InAssetData, UObject * InObject, FDataValidationContext & InContext) Line 364 C++
UnrealEditor-DataValidation.dll!UEditorValidatorSubsystem::IsObjectValidWithContext(UObject * InObject, FDataValidationContext & InContext) Line 313 C++
UnrealEditor-DataValidation.dll!UEditorValidatorSubsystem::ValidateAssetsInternal(FMessageLog & DataValidationLog, TSet<FAssetData,DefaultKeyFuncs<FAssetData,0>,FDefaultSetAllocator> AssetDataList, const FValidateAssetsSettings & InSettings, FValidateAssetsResults & OutResults) Line 541 C++
UnrealEditor-DataValidation.dll!UEditorValidatorSubsystem::ValidateAssetsWithSettings(const TArray<FAssetData,TSizedDefaultAllocator<32>> & AssetDataList, const FValidateAssetsSettings & InSettings, FValidateAssetsResults & OutResults) Line 374 C++
UnrealEditor-DataValidation.dll!UEditorValidatorSubsystem::ValidateOnSave(TArray<FAssetData,TSizedDefaultAllocator<32>> AssetDataList, bool bProceduralSave) Line 714 C++
UnrealEditor-DataValidation.dll!UEditorValidatorSubsystem::ValidateAllSavedPackages() Line 784 C++
[Inline Frame] UnrealEditor-DataValidation.dll!Invoke(void(UEditorValidatorSubsystem::*)()) Line 66 C++
[Inline Frame] UnrealEditor-DataValidation.dll!UE::Core::Private::Tuple::TTupleBase<TIntegerSequence<unsigned int>>::ApplyAfter(void(UEditorValidatorSubsystem::*)() &) Line 317 C++
UnrealEditor-DataValidation.dll!TBaseUObjectMethodDelegateInstance<0,UEditorValidatorSubsystem,void __cdecl(void),FNotThreadSafeNotCheckedDelegateUserPolicy>::Execute() Line 651 C++
[Inline Frame] UnrealEditor-Engine.dll!TDelegate<void __cdecl(void),FNotThreadSafeNotCheckedDelegateUserPolicy>::Execute() Line 613 C++
UnrealEditor-Engine.dll!FTimerUnifiedDelegate::Execute() Line 348 C++
UnrealEditor-Engine.dll!FTimerManager::Tick(float DeltaTime) Line 1065 C++
UnrealEditor-UnrealEd.dll!UEditorEngine::Tick(float DeltaSeconds, bool bIdleMode) Line 1749 C++
UnrealEditor-UnrealEd.dll!UUnrealEdEngine::Tick(float DeltaSeconds, bool bIdleMode) Line 550 C++
UnrealEditor.exe!FEngineLoop::Tick() Line 5877 C++
[Inline Frame] UnrealEditor.exe!EngineTick() Line 69 C++
UnrealEditor.exe!GuardedMain(const wchar_t * CmdLine) Line 188 C++
UnrealEditor.exe!LaunchWindowsStartup(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * __formal, int nCmdShow, const wchar_t * CmdLine) Line 266 C++
UnrealEditor.exe!WinMain(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * pCmdLine, int nCmdShow) Line 317 C++
[External Code]
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-275288 in the post.
0 |
Component | UE - Editor |
---|---|
Affects Versions | 5.4, 5.5, 5.6 |
Created | May 1, 2025 |
---|---|
Updated | May 2, 2025 |