59 lines
1.8 KiB
C#
59 lines
1.8 KiB
C#
|
|
using EpicGames.Core;
|
|||
|
|
using EpicGames.UHT.Types;
|
|||
|
|
using UnrealSharpScriptGenerator.Utilities;
|
|||
|
|
|
|||
|
|
namespace UnrealSharpScriptGenerator.PropertyTranslators;
|
|||
|
|
|
|||
|
|
public class ObjectPropertyTranslator : SimpleTypePropertyTranslator
|
|||
|
|
{
|
|||
|
|
public ObjectPropertyTranslator() : base(typeof(UhtObjectProperty))
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public override bool CanExport(UhtProperty property)
|
|||
|
|
{
|
|||
|
|
UhtObjectPropertyBase objectProperty = (UhtObjectPropertyBase) property;
|
|||
|
|
UhtClass? metaClass = objectProperty.Class;
|
|||
|
|
|
|||
|
|
if (metaClass.HasAnyFlags(EClassFlags.Interface) ||
|
|||
|
|
metaClass.EngineType == UhtEngineType.Interface ||
|
|||
|
|
metaClass.EngineType == UhtEngineType.NativeInterface)
|
|||
|
|
{
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return base.CanExport(property);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public override string GetNullValue(UhtProperty property)
|
|||
|
|
{
|
|||
|
|
return "null";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public override string GetManagedType(UhtProperty property)
|
|||
|
|
{
|
|||
|
|
return GetManagedType(property, property.HasMetadata("Nullable"));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private static string GetManagedType(UhtProperty property, bool isNullable)
|
|||
|
|
{
|
|||
|
|
string nullableAnnotation = isNullable ? "?" : "";
|
|||
|
|
if (property.IsGenericType()) return $"DOT{nullableAnnotation}";
|
|||
|
|
|
|||
|
|
UhtObjectProperty objectProperty = (UhtObjectProperty)property;
|
|||
|
|
return $"{objectProperty.Class.GetFullManagedName()}{nullableAnnotation}";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public override string GetMarshaller(UhtProperty property)
|
|||
|
|
{
|
|||
|
|
if (property.Outer is UhtProperty outerProperty && outerProperty.IsGenericType())
|
|||
|
|
{
|
|||
|
|
return "ObjectMarshaller<DOT>";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $"ObjectMarshaller<{GetManagedType(property, false)}>";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public override bool CanSupportGenericType(UhtProperty property) => true;
|
|||
|
|
}
|