@ -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