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;
 | |
| } |