You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
Produced a common inheritance parser. Added error return for when verification fails #rb jonathan.adamczewski #rnx #preflight 60a4ef3cb7ccb00001771494 [CL 16383144 by Tim Smith in ue5-main branch]
180 lines
4.4 KiB
C++
180 lines
4.4 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
|
|
#include "ParserHelper.h"
|
|
#include "UnrealHeaderTool.h"
|
|
#include "Algo/Find.h"
|
|
#include "Misc/DefaultValueHelper.h"
|
|
#include "UnrealTypeDefinitionInfo.h"
|
|
#include "ClassMaps.h"
|
|
|
|
/////////////////////////////////////////////////////
|
|
// FStructMetaData
|
|
|
|
void FStructMetaData::AddProperty(FUnrealPropertyDefinitionInfo& PropertyDef)
|
|
{
|
|
// update the optimization flags
|
|
if (!bContainsDelegates)
|
|
{
|
|
FProperty* Prop = PropertyDef.GetProperty();
|
|
if (Prop->IsA(FDelegateProperty::StaticClass()) || Prop->IsA(FMulticastDelegateProperty::StaticClass()))
|
|
{
|
|
bContainsDelegates = true;
|
|
}
|
|
else
|
|
{
|
|
FArrayProperty* ArrayProp = CastField<FArrayProperty>(Prop);
|
|
if (ArrayProp != NULL)
|
|
{
|
|
if (ArrayProp->Inner->IsA(FDelegateProperty::StaticClass()) || ArrayProp->Inner->IsA(FMulticastDelegateProperty::StaticClass()))
|
|
{
|
|
bContainsDelegates = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////
|
|
// FPropertyBase
|
|
|
|
const TCHAR* FPropertyBase::GetPropertyTypeText( EPropertyType Type )
|
|
{
|
|
switch ( Type )
|
|
{
|
|
CASE_TEXT(CPT_None);
|
|
CASE_TEXT(CPT_Byte);
|
|
CASE_TEXT(CPT_Int8);
|
|
CASE_TEXT(CPT_Int16);
|
|
CASE_TEXT(CPT_Int);
|
|
CASE_TEXT(CPT_Int64);
|
|
CASE_TEXT(CPT_UInt16);
|
|
CASE_TEXT(CPT_UInt32);
|
|
CASE_TEXT(CPT_UInt64);
|
|
CASE_TEXT(CPT_Bool);
|
|
CASE_TEXT(CPT_Bool8);
|
|
CASE_TEXT(CPT_Bool16);
|
|
CASE_TEXT(CPT_Bool32);
|
|
CASE_TEXT(CPT_Bool64);
|
|
CASE_TEXT(CPT_Float);
|
|
CASE_TEXT(CPT_Double);
|
|
CASE_TEXT(CPT_ObjectReference);
|
|
CASE_TEXT(CPT_Interface);
|
|
CASE_TEXT(CPT_Name);
|
|
CASE_TEXT(CPT_Delegate);
|
|
CASE_TEXT(CPT_Struct);
|
|
CASE_TEXT(CPT_String);
|
|
CASE_TEXT(CPT_Text);
|
|
CASE_TEXT(CPT_MulticastDelegate);
|
|
CASE_TEXT(CPT_SoftObjectReference);
|
|
CASE_TEXT(CPT_WeakObjectReference);
|
|
CASE_TEXT(CPT_LazyObjectReference);
|
|
CASE_TEXT(CPT_ObjectPtrReference);
|
|
CASE_TEXT(CPT_Map);
|
|
CASE_TEXT(CPT_Set);
|
|
CASE_TEXT(CPT_FieldPath);
|
|
CASE_TEXT(CPT_MAX);
|
|
}
|
|
|
|
return TEXT("");
|
|
}
|
|
|
|
/////////////////////////////////////////////////////
|
|
// FToken
|
|
|
|
/**
|
|
* Copies the properties from this token into another.
|
|
*
|
|
* @param Other the token to copy this token's properties to.
|
|
*/
|
|
FToken& FToken::operator=(const FToken& Other)
|
|
{
|
|
FPropertyBase::operator=((FPropertyBase&)Other);
|
|
|
|
TokenType = Other.TokenType;
|
|
TokenName = Other.TokenName;
|
|
bTokenNameInitialized = Other.bTokenNameInitialized;
|
|
StartPos = Other.StartPos;
|
|
StartLine = Other.StartLine;
|
|
TokenProperty = Other.TokenProperty;
|
|
|
|
FCString::Strncpy(Identifier, Other.Identifier, NAME_SIZE);
|
|
FMemory::Memcpy(String, Other.String, sizeof(String));
|
|
|
|
return *this;
|
|
}
|
|
|
|
FToken& FToken::operator=(FToken&& Other)
|
|
{
|
|
FPropertyBase::operator=(MoveTemp(Other));
|
|
|
|
TokenType = Other.TokenType;
|
|
TokenName = Other.TokenName;
|
|
bTokenNameInitialized = Other.bTokenNameInitialized;
|
|
StartPos = Other.StartPos;
|
|
StartLine = Other.StartLine;
|
|
TokenProperty = Other.TokenProperty;
|
|
|
|
FCString::Strncpy(Identifier, Other.Identifier, NAME_SIZE);
|
|
FMemory::Memcpy(String, Other.String, sizeof(String));
|
|
|
|
return *this;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////
|
|
// FAdvancedDisplayParameterHandler
|
|
static const FName NAME_AdvancedDisplay(TEXT("AdvancedDisplay"));
|
|
|
|
FAdvancedDisplayParameterHandler::FAdvancedDisplayParameterHandler(const TMap<FName, FString>* MetaData)
|
|
: NumberLeaveUnmarked(-1), AlreadyLeft(0), bUseNumber(false)
|
|
{
|
|
if(MetaData)
|
|
{
|
|
const FString* FoundString = MetaData->Find(NAME_AdvancedDisplay);
|
|
if(FoundString)
|
|
{
|
|
FoundString->ParseIntoArray(ParametersNames, TEXT(","), true);
|
|
for(int32 NameIndex = 0; NameIndex < ParametersNames.Num();)
|
|
{
|
|
FString& ParameterName = ParametersNames[NameIndex];
|
|
ParameterName.TrimStartAndEndInline();
|
|
if(ParameterName.IsEmpty())
|
|
{
|
|
ParametersNames.RemoveAtSwap(NameIndex);
|
|
}
|
|
else
|
|
{
|
|
++NameIndex;
|
|
}
|
|
}
|
|
if(1 == ParametersNames.Num())
|
|
{
|
|
bUseNumber = FDefaultValueHelper::ParseInt(ParametersNames[0], NumberLeaveUnmarked);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
bool FAdvancedDisplayParameterHandler::ShouldMarkParameter(const FString& ParameterName)
|
|
{
|
|
if(bUseNumber)
|
|
{
|
|
if(NumberLeaveUnmarked < 0)
|
|
{
|
|
return false;
|
|
}
|
|
if(AlreadyLeft < NumberLeaveUnmarked)
|
|
{
|
|
AlreadyLeft++;
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
return ParametersNames.Contains(ParameterName);
|
|
}
|
|
|
|
bool FAdvancedDisplayParameterHandler::CanMarkMore() const
|
|
{
|
|
return bUseNumber ? (NumberLeaveUnmarked > 0) : (0 != ParametersNames.Num());
|
|
}
|