74 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using EpicGames.Core;
 | 
						|
using EpicGames.UHT.Types;
 | 
						|
using UnrealSharpScriptGenerator.PropertyTranslators;
 | 
						|
using UnrealSharpScriptGenerator.Utilities;
 | 
						|
 | 
						|
namespace UnrealSharpScriptGenerator.Exporters;
 | 
						|
 | 
						|
public enum GetterSetterMode
 | 
						|
{
 | 
						|
    Get,
 | 
						|
    Set
 | 
						|
}
 | 
						|
 | 
						|
public class GetterSetterFunctionExporter : FunctionExporter
 | 
						|
{
 | 
						|
    private readonly UhtProperty _propertyGetterSetter;
 | 
						|
    private readonly GetterSetterMode _getterSetterMode;
 | 
						|
    private string _outParameterName;
 | 
						|
    
 | 
						|
    public static GetterSetterFunctionExporter Create(UhtFunction function, 
 | 
						|
        UhtProperty propertyGetterSetter, 
 | 
						|
        GetterSetterMode getterSetterMode, 
 | 
						|
        EFunctionProtectionMode protectionMode)
 | 
						|
    {
 | 
						|
        GetterSetterFunctionExporter exporter = new GetterSetterFunctionExporter(function, propertyGetterSetter, getterSetterMode);
 | 
						|
        exporter.Initialize(OverloadMode.SuppressOverloads, protectionMode, EBlueprintVisibility.GetterSetter);
 | 
						|
        return exporter;
 | 
						|
    }
 | 
						|
    
 | 
						|
    private GetterSetterFunctionExporter(UhtFunction function, UhtProperty propertyGetterSetter, GetterSetterMode getterSetterMode) : base(function)
 | 
						|
    {
 | 
						|
        _outParameterName = string.Empty;
 | 
						|
        _propertyGetterSetter = propertyGetterSetter;
 | 
						|
        _getterSetterMode = getterSetterMode;
 | 
						|
        
 | 
						|
        Initialize(OverloadMode.SuppressOverloads, EFunctionProtectionMode.OverrideWithInternal, EBlueprintVisibility.GetterSetter);
 | 
						|
    }
 | 
						|
 | 
						|
    protected override string GetParameterName(UhtProperty parameter)
 | 
						|
    {
 | 
						|
        return _getterSetterMode == GetterSetterMode.Get ? _propertyGetterSetter.GetParameterName() : "value";
 | 
						|
    }
 | 
						|
 | 
						|
    protected override string MakeOutMarshalDestination(UhtProperty parameter, PropertyTranslator propertyTranslator, GeneratorStringBuilder builder)
 | 
						|
    {
 | 
						|
        _outParameterName = GetParameterName(parameter) + "_Out";
 | 
						|
        builder.AppendLine($"{propertyTranslator.GetManagedType(parameter)} {_outParameterName};");
 | 
						|
        return _outParameterName;
 | 
						|
    }
 | 
						|
 | 
						|
    protected override void ExportReturnStatement(GeneratorStringBuilder builder)
 | 
						|
    {
 | 
						|
        if (Function.ReturnProperty != null && Function.ReturnProperty.IsSameType(_propertyGetterSetter))
 | 
						|
        {
 | 
						|
            string castOperation = _propertyGetterSetter.HasAllFlags(EPropertyFlags.BlueprintReadOnly) 
 | 
						|
                ? $"({ReturnValueTranslator!.GetManagedType(_propertyGetterSetter)})" : string.Empty;
 | 
						|
            builder.AppendLine($"return {castOperation}returnValue;");
 | 
						|
        }
 | 
						|
        else if (Function.ReturnProperty != null)
 | 
						|
        {
 | 
						|
            // Types differ (e.g., getter returns FText, property bound as string). Still return and rely on
 | 
						|
            // available implicit/user-defined conversions on the managed types (FText -> string, etc.).
 | 
						|
            builder.AppendLine("return returnValue;");
 | 
						|
        }
 | 
						|
        
 | 
						|
        if (string.IsNullOrEmpty(_outParameterName))
 | 
						|
        {
 | 
						|
            return;
 | 
						|
        }
 | 
						|
        
 | 
						|
        builder.AppendLine($"return {_outParameterName};");
 | 
						|
    }
 | 
						|
}
 |