Files
UnrealEngineUWP/Engine/Source/Runtime/CoreUObject/Tests/ObjectPtrTestClass.cpp

89 lines
3.0 KiB
C++
Raw Normal View History

// Copyright Epic Games, Inc. All Rights Reserved.
#if WITH_LOW_LEVEL_TESTS
#include "ObjectPtrTestClass.h"
#include "UObject/Class.h"
#include "UObject/Package.h"
#include "UObject/MetaData.h"
#include "UObject/UnrealType.h"
//can not put the #if inside as the expansion of IMPLEMENT_CORE_INTRINSIC_CLASS fails
#if WITH_EDITORONLY_DATA
IMPLEMENT_CORE_INTRINSIC_CLASS(UObjectPtrTestClass, UObject,
{
auto MetaData = Class->GetOutermost()->GetMetaData();
if (MetaData)
{
MetaData->SetValue(Class, TEXT("LoadBehavior"), TEXT("LazyOnDemand"));
}
}
);
#else
IMPLEMENT_CORE_INTRINSIC_CLASS(UObjectPtrTestClass, UObject,
{
});
#endif
#if WITH_EDITORONLY_DATA
IMPLEMENT_CORE_INTRINSIC_CLASS(UObjectPtrTestClassWithRef, UObject,
{
//add reflection info for the two properties
auto Property1 = new FObjectPtrProperty(Class, TEXT("ObjectPtr"), EObjectFlags::RF_NoFlags);
Property1->PropertyClass = UObjectPtrTestClass::StaticClass();
Class->AddCppProperty(Property1);
auto Property2 = new FObjectPtrProperty(Class, TEXT("ObjectPtrNonNullable"), EObjectFlags::RF_NoFlags);
Property2->PropertyClass = UObjectPtrTestClass::StaticClass();
Property2->SetPropertyFlags(EPropertyFlags::CPF_NonNullable); //make non nullable
Class->AddCppProperty(Property2);
auto MetaData = Class->GetOutermost()->GetMetaData();
if (MetaData)
{
MetaData->SetValue(Class, TEXT("LoadBehavior"), TEXT("LazyOnDemand"));
}
}
);
#else
IMPLEMENT_CORE_INTRINSIC_CLASS(UObjectPtrTestClassWithRef, UObject,
{
//add reflection info for the two properties
auto Property1 = new FObjectPtrProperty(Class, TEXT("ObjectPtr"), EObjectFlags::RF_NoFlags);
Property1->PropertyClass = UObjectPtrTestClass::StaticClass();
Class->AddCppProperty(Property1);
auto Property2 = new FObjectPtrProperty(Class, TEXT("ObjectPtrNonNullable"), EObjectFlags::RF_NoFlags);
Property2->PropertyClass = UObjectPtrTestClass::StaticClass();
Property2->SetPropertyFlags(EPropertyFlags::CPF_NonNullable); //make non nullable
Class->AddCppProperty(Property2);
});
#endif
IMPLEMENT_CORE_INTRINSIC_CLASS(UObjectWithClassProperty, UObject,
{
auto Property1 = new FClassPtrProperty(Class, TEXT("ClassPtr"), EObjectFlags::RF_NoFlags);
Property1->PropertyClass = UClass::StaticClass();
Class->AddCppProperty(Property1);
}
);
IMPLEMENT_CORE_INTRINSIC_CLASS(UObjectWithRawProperty, UObject,
{
auto Property1 = new FObjectProperty(Class, TEXT("ObjectPtr"), EObjectFlags::RF_NoFlags);
Property1->PropertyClass = UClass::StaticClass();
Class->AddCppProperty(Property1);
auto Property2 = new FObjectPtrProperty(Class, TEXT("ObjectPtrNonNullable"), EObjectFlags::RF_NoFlags);
Property2->PropertyClass = UObjectPtrTestClass::StaticClass();
Property2->SetPropertyFlags(EPropertyFlags::CPF_NonNullable); //make non nullable
Class->AddCppProperty(Property2);
}
);
IMPLEMENT_CORE_INTRINSIC_CLASS(UObjectPtrDerrivedTestClass, UObjectPtrTestClass, {});
IMPLEMENT_CORE_INTRINSIC_CLASS(UObjectPtrNotLazyTestClass, UObject, {});
#endif