Files
UnrealEngineUWP/Engine/Source/Programs/Shared/EpicGames.UHT/Specifiers/UhtScriptStructSpecifiers.cs
Tim Smith 1f11b428c6 1) Fixed issue where UPARAM wasn't getting parsed as part of a template argument property type
2) Refactored how property specifiers are parsed due to above issue
3) Fixed issue where UClass derived types were not outputting correctly in event parameter lists
4) Added more diagnostic output to package files.

#rb self
#rnx
#robomerge emt
#preflight 62b5b9c548183a59a576eaf8

[CL 20808450 by Tim Smith in ue5-main branch]
2022-06-24 09:27:13 -04:00

86 lines
3.7 KiB
C#

// Copyright Epic Games, Inc. All Rights Reserved.
using System.Diagnostics.CodeAnalysis;
using EpicGames.Core;
using EpicGames.UHT.Tables;
using EpicGames.UHT.Types;
using EpicGames.UHT.Utils;
namespace EpicGames.UHT.Parsers
{
/// <summary>
/// Collection of USCRIPT specifiers
/// </summary>
[UnrealHeaderTool]
[SuppressMessage("CodeQuality", "IDE0051:Remove unused private members", Justification = "Attribute accessed method")]
public static class UhtScriptStructSpecifiers
{
[UhtSpecifier(Extends = UhtTableNames.ScriptStruct, ValueType = UhtSpecifierValueType.Legacy)]
private static void NoExportSpecifier(UhtSpecifierContext specifierContext)
{
UhtScriptStruct scriptStruct = (UhtScriptStruct)specifierContext.Type;
scriptStruct.ScriptStructFlags |= EStructFlags.NoExport;
scriptStruct.ScriptStructFlags &= ~EStructFlags.Native;
}
[UhtSpecifier(Extends = UhtTableNames.ScriptStruct, ValueType = UhtSpecifierValueType.Legacy)]
private static void AtomicSpecifier(UhtSpecifierContext specifierContext)
{
UhtScriptStruct scriptStruct = (UhtScriptStruct)specifierContext.Type;
scriptStruct.ScriptStructFlags |= EStructFlags.Atomic;
}
[UhtSpecifier(Extends = UhtTableNames.ScriptStruct, ValueType = UhtSpecifierValueType.Legacy)]
[SuppressMessage("CodeQuality", "IDE0051:Remove unused private members", Justification = "Attribute accessed method")]
private static void ImmutableSpecifier(UhtSpecifierContext specifierContext)
{
UhtScriptStruct scriptStruct = (UhtScriptStruct)specifierContext.Type;
scriptStruct.ScriptStructFlags |= EStructFlags.Atomic | EStructFlags.Immutable;
}
[UhtSpecifier(Extends = UhtTableNames.ScriptStruct, ValueType = UhtSpecifierValueType.Legacy)]
private static void HasDefaultsSpecifier(UhtSpecifierContext specifierContext)
{
if (!specifierContext.Type.HeaderFile.IsNoExportTypes)
{
specifierContext.MessageSite.LogError("The 'HasDefaults' struct specifier is only valid in the NoExportTypes.h file");
}
UhtScriptStruct scriptStruct = (UhtScriptStruct)specifierContext.Type;
scriptStruct.ScriptStructExportFlags |= UhtScriptStructExportFlags.HasDefaults;
}
[UhtSpecifier(Extends = UhtTableNames.ScriptStruct, ValueType = UhtSpecifierValueType.Legacy)]
private static void HasNoOpConstructorSpecifier(UhtSpecifierContext specifierContext)
{
if (!specifierContext.Type.HeaderFile.IsNoExportTypes)
{
specifierContext.MessageSite.LogError("The 'HasNoOpConstructor' struct specifier is only valid in the NoExportTypes.h file");
}
UhtScriptStruct scriptStruct = (UhtScriptStruct)specifierContext.Type;
scriptStruct.ScriptStructExportFlags |= UhtScriptStructExportFlags.HasNoOpConstructor;
}
[UhtSpecifier(Extends = UhtTableNames.ScriptStruct, ValueType = UhtSpecifierValueType.Legacy)]
private static void IsAlwaysAccessibleSpecifier(UhtSpecifierContext specifierContext)
{
if (!specifierContext.Type.HeaderFile.IsNoExportTypes)
{
specifierContext.MessageSite.LogError("The 'IsAlwaysAccessible' struct specifier is only valid in the NoExportTypes.h file");
}
UhtScriptStruct scriptStruct = (UhtScriptStruct)specifierContext.Type;
scriptStruct.ScriptStructExportFlags |= UhtScriptStructExportFlags.IsAlwaysAccessible;
}
[UhtSpecifier(Extends = UhtTableNames.ScriptStruct, ValueType = UhtSpecifierValueType.Legacy)]
private static void IsCoreTypeSpecifier(UhtSpecifierContext specifierContext)
{
if (!specifierContext.Type.HeaderFile.IsNoExportTypes)
{
specifierContext.MessageSite.LogError("The 'IsCoreType' struct specifier is only valid in the NoExportTypes.h file");
}
UhtScriptStruct scriptStruct = (UhtScriptStruct)specifierContext.Type;
scriptStruct.ScriptStructExportFlags |= UhtScriptStructExportFlags.IsCoreType;
}
}
}