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