UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
Attributable.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2// uLang Compiler Public API
3
4#pragma once
5
9
10#define UE_API VERSECOMPILER_API
11
12namespace uLang
13{
14class CClass;
15class CExpressionBase;
16class CFunction;
17class CSemanticProgram;
18
20{
21 enum class EType
22 {
23 Attribute, // Attribute which is used with prefix @attr syntax
24 Specifier // Attribute which is used with suffix <spec> syntax
25 };
26
29
31};
32
33VERSECOMPILER_API bool IsAttributeHack(const SAttribute&, const CClass* AttributeClass, const CSemanticProgram&);
35
36template <typename TIterator, typename ClassOrFunction>
48
51{
52public:
54
55 bool HasAttributes() const { return _Attributes.Num() > 0; }
58
60
62
67
70
74
75 // @HACK: SOL-972, We need full proper support for compile-time evaluation of attribute types
78
79 // Specifies the attribute scope for expressions (e.g. should only respect class-scoped attributes, etc.)
98
101
104
105private:
106 enum class EFindAttributeMode { Exact, IncludeSubtypes };
107 template<EFindAttributeMode Mode>
108 bool IsAttributeClassImpl(const SAttribute& Attr, const CClass* AttributeClass, const CSemanticProgram& Program) const;
109 template<EFindAttributeMode Mode>
110 TOptional<int32_t> FindAttributeImpl(const CClass* AttributeClass, const CSemanticProgram& Program) const;
111 template<EFindAttributeMode Mode>
112 TArray<int32_t> FindAttributesImpl(const CClass* AttributeClass, const CSemanticProgram& Program) const;
113};
114}
115
116#undef UE_API
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define UE_API
Definition SColorGradingComponentViewer.h:12
Definition Array.h:64
Base class for everything that can have attributes attached to it (classes, expressions,...
Definition Attributable.h:51
UE_API TOptional< CUTF8String > GetAttributeTextValue(const CClass *AttributeClass, const CSemanticProgram &Program) const
Definition Attributable.cpp:316
UE_API bool HasAttributeClassHack(const CClass *AttributeClass, const CSemanticProgram &) const
Definition Attributable.cpp:321
UE_API const CExpressionBase * FindAttributeSubclassExpr(const CClass *AttributeClass, const CSemanticProgram &Program) const
Definition Attributable.cpp:236
UE_API TArray< const CExpressionBase * > GetAttributesWithAttribute(const CClass *AttributeClass, const CSemanticProgram &Program) const
Definition Attributable.cpp:115
CAttributable & operator=(const CAttributable &Other)=delete
EAttributableScope
Definition Attributable.h:81
UE_API bool HasAttributeClass(const CClass *AttributeClass, const CSemanticProgram &Program) const
Definition Attributable.cpp:89
bool HasAttributes() const
Definition Attributable.h:55
UE_API const CExpressionBase * FindAttributeExpr(const CClass *AttributeClass, const CSemanticProgram &Program) const
Definition Attributable.cpp:230
UE_API TArray< SAttribute > FindAttributes(const CClass *AttributeClass, const CSemanticProgram &Program) const
Definition Attributable.cpp:215
UE_API bool HasAttributeSubclass(const CClass *AttributeClass, const CSemanticProgram &Program) const
Definition Attributable.cpp:94
UE_API void RemoveAttributeClass(const CClass *AttributeClass, const CSemanticProgram &Program)
Definition Attributable.cpp:283
UE_API const TArray< CExpressionBase * > FindAttributeSubclassExprs(const CClass *AttributeClass, const CSemanticProgram &Program) const
Definition Attributable.cpp:257
UE_API bool HasAttributeFunctionHack(const CFunction *AttributeFunction, const CSemanticProgram &) const
Definition Attributable.cpp:327
UE_API void AddAttributeClass(const CClass *AttributeClass)
Definition Attributable.cpp:272
TArray< SAttribute > _Attributes
Definition Attributable.h:53
UE_API int32_t GetAttributeClassCount(const CClass *AttributeClass, const CSemanticProgram &Program) const
Definition Attributable.cpp:99
UE_API void AddAttribute(SAttribute Attribute)
Definition Attributable.cpp:278
CAttributable & operator=(CAttributable &&Other)=delete
UE_API TOptional< SAttribute > FindAttribute(const CClass *AttributeClass, const CSemanticProgram &Program) const
Definition Attributable.cpp:209
UE_API const TArray< CExpressionBase * > FindAttributeExprs(const CClass *AttributeClass, const CSemanticProgram &Program) const
Definition Attributable.cpp:242
Definition SemanticClass.h:33
Definition Expression.h:387
Definition SemanticFunction.h:75
Definition SemanticProgram.h:277
Definition Array.h:51
Definition SharedPointer.h:77
Definition VVMEngineEnvironment.h:23
TIterator FindAttributeHack(TIterator First, TIterator Last, const ClassOrFunction *AttributeClassOrFunction, const CSemanticProgram &Program)
Definition Attributable.h:37
bool IsAttributeHack(const SAttribute &Attribute, const CClass *AttributeClass, const CSemanticProgram &Program)
Definition Attributable.cpp:49
Definition Attributable.h:20
EType
Definition Attributable.h:22
VERSECOMPILER_API TOptional< CUTF8String > GetTextValue() const
Definition Attributable.cpp:63
TSRef< CExpressionBase > _Expression
Definition Attributable.h:27
EType _Type
Definition Attributable.h:28
Definition Optional.h:23