@ -0,0 +1,59 @@
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user