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