368 lines
16 KiB
C#
368 lines
16 KiB
C#
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
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
|
|
{
|
|
/// <summary>
|
|
/// Collection of UCLASS specifiers
|
|
/// </summary>
|
|
[UnrealHeaderTool]
|
|
[SuppressMessage("CodeQuality", "IDE0051:Remove unused private members", Justification = "Attribute accessed method")]
|
|
public static class UhtClassSpecifiers
|
|
{
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.Legacy)]
|
|
private static void NoExportSpecifier(UhtSpecifierContext specifierContext)
|
|
{
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.ClassExportFlags |= UhtClassExportFlags.NoExport;
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.Legacy)]
|
|
private static void IntrinsicSpecifier(UhtSpecifierContext specifierContext)
|
|
{
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.AddClassFlags(EClassFlags.Intrinsic);
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.Legacy)]
|
|
private static void ComponentWrapperClassSpecifier(UhtSpecifierContext specifierContext)
|
|
{
|
|
specifierContext.MetaData.Add(UhtNames.IgnoreCategoryKeywordsInSubclasses, true);
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.SingleString)]
|
|
private static void WithinSpecifier(UhtSpecifierContext specifierContext, StringView value)
|
|
{
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.ClassWithinIdentifier = value.ToString();
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.Legacy)]
|
|
private static void EditInlineNewSpecifier(UhtSpecifierContext specifierContext)
|
|
{
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.AddClassFlags(EClassFlags.EditInlineNew);
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.Legacy)]
|
|
private static void NotEditInlineNewSpecifier(UhtSpecifierContext specifierContext)
|
|
{
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.RemoveClassFlags(EClassFlags.EditInlineNew);
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.Legacy)]
|
|
private static void PlaceableSpecifier(UhtSpecifierContext specifierContext)
|
|
{
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.RemoveClassFlags(EClassFlags.NotPlaceable);
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.Legacy)]
|
|
private static void MigratingAssetSpecifier(UhtSpecifierContext specifierContext)
|
|
{
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.AddClassFlags(EClassFlags.MigratingAsset);
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.Legacy)]
|
|
private static void NotPlaceableSpecifier(UhtSpecifierContext specifierContext)
|
|
{
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.AddClassFlags(EClassFlags.NotPlaceable);
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.Legacy)]
|
|
private static void DefaultToInstancedSpecifier(UhtSpecifierContext specifierContext)
|
|
{
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.AddClassFlags(EClassFlags.DefaultToInstanced);
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.Legacy)]
|
|
private static void HideDropdownSpecifier(UhtSpecifierContext specifierContext)
|
|
{
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.AddClassFlags(EClassFlags.HideDropDown);
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.Legacy)]
|
|
private static void HiddenSpecifier(UhtSpecifierContext specifierContext)
|
|
{
|
|
// Prevents class from appearing in the editor class browser and edit inline menus.
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.AddClassFlags(EClassFlags.Hidden);
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.Legacy)]
|
|
private static void DependsOnSpecifier(UhtSpecifierContext specifierContext)
|
|
{
|
|
specifierContext.MessageSite.LogError("The dependsOn specifier is deprecated. Please use #include \"ClassHeaderFilename.h\" instead.");
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.Legacy)]
|
|
private static void MinimalAPISpecifier(UhtSpecifierContext specifierContext)
|
|
{
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.AddClassFlags(EClassFlags.MinimalAPI);
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.Legacy)]
|
|
private static void ConstSpecifier(UhtSpecifierContext specifierContext)
|
|
{
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.AddClassFlags(EClassFlags.Const);
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.Legacy)]
|
|
private static void PerObjectConfigSpecifier(UhtSpecifierContext specifierContext)
|
|
{
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.AddClassFlags(EClassFlags.PerObjectConfig);
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.Legacy)]
|
|
private static void PerPlatformConfigSpecifier(UhtSpecifierContext specifierContext)
|
|
{
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.AddClassFlags(EClassFlags.PerPlatformConfig);
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.Legacy)]
|
|
private static void ConfigDoNotCheckDefaultsSpecifier(UhtSpecifierContext specifierContext)
|
|
{
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.AddClassFlags(EClassFlags.ConfigDoNotCheckDefaults);
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.Legacy)]
|
|
private static void AbstractSpecifier(UhtSpecifierContext specifierContext)
|
|
{
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.AddClassFlags(EClassFlags.Abstract);
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.Legacy)]
|
|
private static void DeprecatedSpecifier(UhtSpecifierContext specifierContext)
|
|
{
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.AddClassFlags(EClassFlags.Deprecated | EClassFlags.NotPlaceable);
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.Legacy)]
|
|
private static void TransientSpecifier(UhtSpecifierContext specifierContext)
|
|
{
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.AddClassFlags(EClassFlags.Transient);
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.Legacy)]
|
|
private static void NonTransientSpecifier(UhtSpecifierContext specifierContext)
|
|
{
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.RemoveClassFlags(EClassFlags.Transient);
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.Legacy)]
|
|
private static void OptionalSpecifier(UhtSpecifierContext specifierContext)
|
|
{
|
|
// Optional class
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.AddClassFlags(EClassFlags.Optional);
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.Legacy)]
|
|
private static void CustomConstructorSpecifier(UhtSpecifierContext specifierContext)
|
|
{
|
|
// we will not export a constructor for this class, assuming it is in the CPP block
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.ClassExportFlags |= UhtClassExportFlags.HasCustomConstructor;
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.SingleString)]
|
|
private static void ConfigSpecifier(UhtSpecifierContext specifierContext, StringView value)
|
|
{
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.Config = value.ToString();
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.Legacy)]
|
|
private static void DefaultConfigSpecifier(UhtSpecifierContext specifierContext)
|
|
{
|
|
// Save object config only to Default INIs, never to local INIs.
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.AddClassFlags(EClassFlags.DefaultConfig);
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.Legacy)]
|
|
private static void GlobalUserConfigSpecifier(UhtSpecifierContext specifierContext)
|
|
{
|
|
// Save object config only to global user overrides, never to local INIs
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.AddClassFlags(EClassFlags.GlobalUserConfig);
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.Legacy)]
|
|
private static void ProjectUserConfigSpecifier(UhtSpecifierContext specifierContext)
|
|
{
|
|
// Save object config only to project user overrides, never to INIs that are checked in
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.AddClassFlags(EClassFlags.ProjectUserConfig);
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.SingleString)]
|
|
private static void EditorConfigSpecifier(UhtSpecifierContext specifierContext, StringView value)
|
|
{
|
|
specifierContext.MetaData.Add(UhtNames.EditorConfig, value.ToString());
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.NonEmptyStringList)]
|
|
private static void ShowCategoriesSpecifier(UhtSpecifierContext specifierContext, List<StringView> value)
|
|
{
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.ShowCategories.AddUniqueRange(value);
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.NonEmptyStringList)]
|
|
private static void HideCategoriesSpecifier(UhtSpecifierContext specifierContext, List<StringView> value)
|
|
{
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.HideCategories.AddUniqueRange(value);
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.NonEmptyStringList)]
|
|
private static void ShowFunctionsSpecifier(UhtSpecifierContext specifierContext, List<StringView> value)
|
|
{
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.ShowFunctions.AddUniqueRange(value);
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.NonEmptyStringList)]
|
|
private static void HideFunctionsSpecifier(UhtSpecifierContext specifierContext, List<StringView> value)
|
|
{
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.HideFunctions.AddUniqueRange(value);
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.SingleString)]
|
|
private static void SparseClassDataTypesSpecifier(UhtSpecifierContext specifierContext, StringView value)
|
|
{
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.SparseClassDataTypes.AddUnique(value.ToString());
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.NonEmptyStringList)]
|
|
private static void ClassGroupSpecifier(UhtSpecifierContext specifierContext, List<StringView> value)
|
|
{
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
foreach (StringView element in value)
|
|
{
|
|
classObj.ClassGroupNames.Add(element.ToString());
|
|
}
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.NonEmptyStringList)]
|
|
private static void AutoExpandCategoriesSpecifier(UhtSpecifierContext specifierContext, List<StringView> value)
|
|
{
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.AutoExpandCategories.AddUniqueRange(value);
|
|
classObj.AutoCollapseCategories.RemoveSwapRange(value);
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.NonEmptyStringList)]
|
|
private static void AutoCollapseCategoriesSpecifier(UhtSpecifierContext specifierContext, List<StringView> value)
|
|
{
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.AutoCollapseCategories.AddUniqueRange(value);
|
|
classObj.AutoExpandCategories.RemoveSwapRange(value);
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.NonEmptyStringList)]
|
|
private static void PrioritizeCategoriesSpecifier(UhtSpecifierContext specifierContext, List<StringView> value)
|
|
{
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.PrioritizeCategories.AddUniqueRange(value);
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.NonEmptyStringList)]
|
|
private static void DontAutoCollapseCategoriesSpecifier(UhtSpecifierContext specifierContext, List<StringView> value)
|
|
{
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.AutoCollapseCategories.RemoveSwapRange(value);
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.Legacy)]
|
|
private static void CollapseCategoriesSpecifier(UhtSpecifierContext specifierContext)
|
|
{
|
|
// Class' properties should not be shown categorized in the editor.
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.AddClassFlags(EClassFlags.CollapseCategories);
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.Legacy)]
|
|
private static void DontCollapseCategoriesSpecifier(UhtSpecifierContext specifierContext)
|
|
{
|
|
// Class' properties should be shown categorized in the editor.
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.RemoveClassFlags(EClassFlags.CollapseCategories);
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.Legacy)]
|
|
private static void AdvancedClassDisplaySpecifier(UhtSpecifierContext specifierContext)
|
|
{
|
|
// By default the class properties are shown in advanced sections in UI
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.MetaData.Add(UhtNames.AdvancedClassDisplay, "true");
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.Legacy)]
|
|
private static void ConversionRootSpecifier(UhtSpecifierContext specifierContext)
|
|
{
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.MetaData.Add(UhtNames.IsConversionRoot, "true");
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.Legacy)]
|
|
private static void NeedsDeferredDependencyLoadingSpecifier(UhtSpecifierContext specifierContext)
|
|
{
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.AddClassFlags(EClassFlags.NeedsDeferredDependencyLoading);
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.Legacy)]
|
|
private static void MatchedSerializersSpecifier(UhtSpecifierContext specifierContext)
|
|
{
|
|
if (!specifierContext.Type.HeaderFile.IsNoExportTypes)
|
|
{
|
|
specifierContext.MessageSite.LogError("The 'MatchedSerializers' class specifier is only valid in the NoExportTypes.h file");
|
|
}
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.AddClassFlags(EClassFlags.MatchedSerializers);
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.Legacy)]
|
|
private static void InterfaceSpecifier(UhtSpecifierContext specifierContext)
|
|
{
|
|
if (!specifierContext.Type.HeaderFile.IsNoExportTypes)
|
|
{
|
|
specifierContext.MessageSite.LogError("The 'Interface' class specifier is only valid in the NoExportTypes.h file");
|
|
}
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.AddClassFlags(EClassFlags.Interface);
|
|
}
|
|
|
|
[UhtSpecifier(Extends = UhtTableNames.Class, ValueType = UhtSpecifierValueType.None)]
|
|
private static void CustomFieldNotifySpecifier(UhtSpecifierContext specifierContext)
|
|
{
|
|
UhtClass classObj = (UhtClass)specifierContext.Type;
|
|
classObj.ClassExportFlags |= UhtClassExportFlags.HasCustomFieldNotify;
|
|
}
|
|
}
|
|
}
|