Files
UnrealEngine/Engine/Source/Editor/KismetCompiler/Public/KismetCompilerModule.h
2025-05-18 13:04:45 +08:00

109 lines
3.7 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Containers/Array.h"
#include "Containers/UnrealString.h"
#include "CoreMinimal.h"
#include "CoreTypes.h"
#include "Modules/ModuleInterface.h"
#include "Templates/SubclassOf.h"
class FBlueprintCompileReinstancer;
class FCompilerResultsLog;
class UBlueprint;
class UBlueprintGeneratedClass;
class UClass;
class UUserDefinedEnum;
class UUserDefinedStruct;
struct FKismetCompilerOptions;
#define KISMET_COMPILER_MODULENAME "KismetCompiler"
//////////////////////////////////////////////////////////////////////////
// IKismetCompilerInterface
class IBlueprintCompiler
{
public:
virtual void PreCompile(UBlueprint* Blueprint, const FKismetCompilerOptions& CompileOptions)
{
PreCompile(Blueprint);
}
virtual bool CanCompile(const UBlueprint* Blueprint) = 0;
virtual void Compile(UBlueprint* Blueprint, const FKismetCompilerOptions& CompileOptions, FCompilerResultsLog& Results) = 0;
virtual void PostCompile(UBlueprint* Blueprint, const FKismetCompilerOptions& CompileOptions)
{
PostCompile(Blueprint);
}
virtual bool GetBlueprintTypesForClass(UClass* ParentClass, UClass*& OutBlueprintClass, UClass*& OutBlueprintGeneratedClass) const
{
OutBlueprintClass = nullptr;
OutBlueprintGeneratedClass = nullptr;
return false;
}
protected:
virtual void PreCompile(UBlueprint* Blueprint) { }
virtual void PostCompile(UBlueprint* Blueprint) { }
};
class IKismetCompilerInterface : public IModuleInterface
{
public:
/**
* Synchronizes Blueprint's GeneratedClass's properties with the NewVariable declarations in the blueprint
* Used on load to ensure that all properties are present for instances.
*
* @param Blueprint The blueprint that may be missing variables
*/
virtual void RefreshVariables(UBlueprint* Blueprint)=0;
/**
* Compiles a user defined structure.
*
* @param Struct The structure to compile.
* @param Results The results log for warnings and errors.
*/
virtual void CompileStructure(class UUserDefinedStruct* Struct, FCompilerResultsLog& Results)=0;
/**
* Attempts to recover a corrupted blueprint package.
*
* @param Blueprint The blueprint to recover.
*/
virtual void RecoverCorruptedBlueprint(class UBlueprint* Blueprint)=0;
/**
* Clears the blueprint's generated classes, and consigns them to oblivion
*
* @param Blueprint The blueprint to clear the classes for
*/
virtual void RemoveBlueprintGeneratedClasses(class UBlueprint* Blueprint)=0;
/**
* Gets a list of all compilers for blueprints. You can register new compilers through this list.
*/
virtual TArray<IBlueprintCompiler*>& GetCompilers() = 0;
/** Facilities for establishing mappings between UClasses, UBlueprints, and UBlueprintGenerated Classes*/
virtual void OverrideBPTypeForClass(UClass* Class, TSubclassOf<UBlueprint> BlueprintType) = 0;
UE_DEPRECATED(5.4, "Conditional overrides in editor have been deprecated - make a new sentinel type if required to keep UBlueprint mappings unambiguous")
virtual void OverrideBPTypeForClassInEditor(UClass* Class, TSubclassOf<UBlueprint> BlueprintType) = 0;
virtual void OverrideBPGCTypeForBPType(TSubclassOf<UBlueprint> BlueprintType, TSubclassOf<UBlueprintGeneratedClass> BPGCType) = 0;
virtual void ValidateBPAndClassType(UBlueprint* BP, FCompilerResultsLog& OutResults) = 0;
/**
* Get the blueprint class and generated blueprint class for a particular class type. Not every
* blueprint is a normal UBlueprint, like UUserWidget blueprints should be UWidgetBlueprints.
*/
virtual void GetBlueprintTypesForClass(UClass* ParentClass, UClass*& OutBlueprintClass, UClass*& OutBlueprintGeneratedClass) const = 0;
virtual void GetSubclassesWithDifferingBlueprintTypes(UClass* Class, TSet<const UClass*>& OutMismatchedSubclasses) const = 0;
};