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