// Copyright Epic Games, Inc. All Rights Reserved.
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using EpicGames.Core;
using EpicGames.UHT.Tables;
using EpicGames.UHT.Types;
using EpicGames.UHT.Utils;
namespace EpicGames.UHT.Parsers
{
///
/// Collection of property argument specifiers
///
[UnrealHeaderTool]
[SuppressMessage("CodeQuality", "IDE0051:Remove unused private members", Justification = "Attribute accessed method")]
public static class UhtPropertyArgumentSpecifiers
{
#region Argument Property Specifiers
[UhtSpecifier(Extends = UhtTableNames.PropertyArgument, ValueType = UhtSpecifierValueType.Legacy)]
private static void ConstSpecifier(UhtSpecifierContext specifierContext)
{
UhtPropertySpecifierContext context = (UhtPropertySpecifierContext)specifierContext;
context.PropertySettings.PropertyFlags |= EPropertyFlags.ConstParm;
}
[UhtSpecifier(Extends = UhtTableNames.PropertyArgument, ValueType = UhtSpecifierValueType.Legacy)]
private static void RefSpecifier(UhtSpecifierContext specifierContext)
{
UhtPropertySpecifierContext context = (UhtPropertySpecifierContext)specifierContext;
context.PropertySettings.PropertyFlags |= EPropertyFlags.OutParm | EPropertyFlags.ReferenceParm;
}
[UhtSpecifier(Extends = UhtTableNames.PropertyArgument, ValueType = UhtSpecifierValueType.Legacy)]
private static void NotReplicatedSpecifier(UhtSpecifierContext specifierContext)
{
UhtPropertySpecifierContext context = (UhtPropertySpecifierContext)specifierContext;
if (context.PropertySettings.PropertyCategory == UhtPropertyCategory.ReplicatedParameter)
{
context.PropertySettings.PropertyCategory = UhtPropertyCategory.RegularParameter;
context.PropertySettings.PropertyFlags |= EPropertyFlags.RepSkip;
}
else
{
context.MessageSite.LogError("Only parameters in service request functions can be marked NotReplicated");
}
}
[UhtSpecifier(Extends = UhtTableNames.PropertyArgument, ValueType = UhtSpecifierValueType.None)]
private static void RequiredSpecifier(UhtSpecifierContext specifierContext)
{
UhtPropertySpecifierContext context = (UhtPropertySpecifierContext)specifierContext;
context.PropertySettings.PropertyFlags |= EPropertyFlags.RequiredParm;
}
[UhtSpecifier(Extends = UhtTableNames.PropertyArgument, ValueType = UhtSpecifierValueType.OptionalEqualsKeyValuePairList)]
private static void VerseSpecifier(UhtSpecifierContext specifierContext, List> values)
{
UhtPropertySpecifierContext context = (UhtPropertySpecifierContext)specifierContext;
// Extract all the elements of the meta data
foreach (KeyValuePair kvp in values)
{
ReadOnlySpan key = kvp.Key.Span;
if (key.Equals("name", StringComparison.OrdinalIgnoreCase))
{
context.PropertySettings.VerseName = kvp.Value.ToString();
}
else if (key.Equals("named", StringComparison.OrdinalIgnoreCase))
{
context.PropertySettings.PropertyExportFlags |= UhtPropertyExportFlags.VerseNamed;
}
else if (key.Equals("hasdefault", StringComparison.OrdinalIgnoreCase))
{
context.PropertySettings.PropertyExportFlags |= UhtPropertyExportFlags.VerseDefaultValue;
}
}
}
#endregion
}
}