Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
moc.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3
4#ifndef MOC_H
5#define MOC_H
6
7#include "parser.h"
8#include <qstringlist.h>
9#include <qmap.h>
10#include <qjsondocument.h>
11#include <qjsonarray.h>
12#include <qjsonobject.h>
13#include <qtyperevision.h>
14#include <stdio.h>
15
16#include <private/qtools_p.h>
17
19
20struct QMetaObject;
21
22struct Type
23{
25
27 inline explicit Type(const QByteArray &_name)
30 //When used as a return type, the type name may be modified to remove the references.
31 // rawName is the type as found in the function signature
37};
39
40struct ClassDef;
41struct EnumDef
42{
46 QList<QByteArray> values;
47 bool isEnumClass; // c++11 enum class
49 QJsonObject toJson(const ClassDef &cdef) const;
50 QByteArray qualifiedType(const ClassDef *cdef) const;
51};
53
55{
59 QByteArray typeNameForCast; // type name to be used in cast from void * in metacall
61
62 QJsonObject toJson() const;
63};
65
67{
69 QList<ArgumentDef> arguments;
74
77 int revision = 0;
78
79 bool isConst = false;
80 bool isVirtual = false;
81 bool isStatic = false;
82 bool inlineCode = false;
83 bool wasCloned = false;
84
86
87 bool isCompat = false;
88 bool isInvokable = false;
89 bool isScriptable = false;
90 bool isSlot = false;
91 bool isSignal = false;
92 bool isPrivateSignal = false;
93 bool isConstructor = false;
94 bool isDestructor = false;
95 bool isAbstract = false;
96 bool isRawSlot = false;
97
98 QJsonObject toJson() const;
99 static void accessToJson(QJsonObject *obj, Access acs);
100};
102
104{
105 bool stdCppSet() const {
106 if (name.isEmpty())
107 return false;
108 QByteArray s("set");
110 s += name.mid(1);
111 return (s == write);
112 }
113
115 int notifyId = -1; // -1 means no notifyId, >= 0 means signal defined in this class, < -1 means signal not defined in this class
118 int revision = 0;
119 bool constant = false;
120 bool final = false;
121 bool required = false;
122 int relativeIndex = -1; // property index in current metaobject
123
124 qsizetype location = -1; // token index, used for error reporting
125
126 QJsonObject toJson() const;
127};
129
139
146
147struct BaseDef {
150 QList<ClassInfoDef> classInfoList;
151 QMap<QByteArray, bool> enumDeclarations;
152 QList<EnumDef> enumList;
153 QMap<QByteArray, QByteArray> flagAliases;
156};
157
164
166 QList<SuperClass> superclassList;
167
169 {
170 Interface() { } // for QList, don't use
171 inline explicit Interface(const QByteArray &_className)
172 : className(_className) {}
175 };
176 QList<QList<Interface>> interfaceList;
177
184
185 QList<FunctionDef> constructorList;
187 QList<QByteArray> nonClassSignalList;
188 QList<PropertyDef> propertyList;
190
191 bool hasQObject = false;
192 bool hasQGadget = false;
193 bool hasQNamespace = false;
195
196 QJsonObject toJson() const;
197};
200
202 bool hasQNamespace = false;
203 bool doGenerate = false;
204};
206
207class Moc : public Parser
208{
209public:
211
215
217
222 QList<QByteArray> includeFiles;
223 QList<ClassDef> classList;
224 QMap<QByteArray, QByteArray> interface2IdMap;
225 QList<QByteArray> metaTypes;
226 // map from class name to fully qualified name
227 QHash<QByteArray, QByteArray> knownQObjectClasses;
228 QHash<QByteArray, QByteArray> knownGadgets;
229 QMap<QString, QJsonArray> metaArgs;
231
232 void parse();
233 void generate(FILE *out, FILE *jsonOutput);
234
235 bool parseClassHead(ClassDef *def);
236 inline bool inClass(const ClassDef *def) const {
237 return index > def->begin && index < def->end - 1;
238 }
239
240 inline bool inNamespace(const NamespaceDef *def) const {
241 return index > def->begin && index < def->end - 1;
242 }
243
244 const QByteArray &toFullyQualified(const QByteArray &name) const noexcept;
245
246 void prependNamespaces(BaseDef &def, const QList<NamespaceDef> &namespaceList) const;
247
248 Type parseType();
249
250 bool parseEnum(EnumDef *def);
251
252 bool parseFunction(FunctionDef *def, bool inMacro = false);
253 bool parseMaybeFunction(const ClassDef *cdef, FunctionDef *def);
254
256 void parseSignals(ClassDef *def);
258 void parsePluginData(ClassDef *def);
259
260 void createPropertyDef(PropertyDef &def, int propertyIndex, PropertyMode mode);
261
263 void parseEnumOrFlag(BaseDef *def, bool isFlag);
264 void parseFlag(BaseDef *def);
267 void parseClassInfo(ClassDef *def);
268 void parseInterfaces(ClassDef *def);
271 void parseMocInclude();
275
277
279 bool until(Token);
280
281 // test for Q_INVOCABLE, Q_SCRIPTABLE, etc. and set the flags
282 // in FunctionDef accordingly
287
288 bool skipCxxAttributes();
289
290 void checkSuperClasses(ClassDef *def);
291 void checkProperties(ClassDef* cdef);
293
294 void checkListSizes(const ClassDef &def);
295};
296
298{
299 if (type.endsWith('&')) {
300 if (type.endsWith("&&"))
301 return type.left(type.size()-2);
302 return type.left(type.size()-1);
303 }
304 return type;
305}
306
308
309#endif // MOC_H
Definition moc.h:208
void checkSuperClasses(ClassDef *def)
Definition moc.cpp:1868
Moc()
Definition moc.h:212
void parse()
Definition moc.cpp:662
bool parseEnum(EnumDef *def)
Definition moc.cpp:239
void parseProperty(ClassDef *def, PropertyMode mode)
Definition moc.cpp:1495
QByteArray lexemUntil(Token)
Definition moc.cpp:1768
EncounteredQmlMacro parseClassInfo(BaseDef *def)
Definition moc.cpp:1639
bool until(Token)
Definition moc.cpp:1788
QList< QByteArray > includeFiles
Definition moc.h:222
bool requireCompleteTypes
Definition moc.h:220
QHash< QByteArray, QByteArray > knownQObjectClasses
Definition moc.h:227
void createPropertyDef(PropertyDef &def, int propertyIndex, PropertyMode mode)
Definition moc.cpp:1320
bool parseClassHead(ClassDef *def)
Definition moc.cpp:38
void parsePrivateProperty(ClassDef *def, PropertyMode mode)
Definition moc.cpp:1587
QByteArray includePath
Definition moc.h:221
QByteArray filename
Definition moc.h:216
void parseFlag(BaseDef *def)
Definition moc.cpp:1615
void parseSignals(ClassDef *def)
Definition moc.cpp:1276
void parseDeclareMetatype()
Definition moc.cpp:1728
void parsePropertyAttributes(PropertyDef &propDef)
Definition moc.cpp:1358
void parseInterfaces(ClassDef *def)
Definition moc.cpp:1672
bool testFunctionRevision(FunctionDef *def)
Definition moc.cpp:407
bool testFunctionAttribute(FunctionDef *def)
Definition moc.cpp:335
void prependNamespaces(BaseDef &def, const QList< NamespaceDef > &namespaceList) const
Definition moc.cpp:616
QHash< QByteArray, QByteArray > knownGadgets
Definition moc.h:228
QList< QByteArray > metaTypes
Definition moc.h:225
bool parseFunction(FunctionDef *def, bool inMacro=false)
Definition moc.cpp:419
QByteArray parsePropertyAccessor()
Definition moc.cpp:1569
QMap< QString, QJsonArray > metaArgs
Definition moc.h:229
bool testForFunctionModifiers(FunctionDef *def)
Definition moc.cpp:521
const QByteArray & toFullyQualified(const QByteArray &name) const noexcept
Definition moc.cpp:29
void parseSlots(ClassDef *def, FunctionDef::Access access)
Definition moc.cpp:1234
void parseDeclareInterface()
Definition moc.cpp:1705
void checkListSizes(const ClassDef &def)
Definition moc.cpp:626
QTypeRevision parseRevision()
Definition moc.cpp:376
void parseMocInclude()
Definition moc.cpp:1737
QList< QString > parsedPluginMetadataFiles
Definition moc.h:230
bool skipCxxAttributes()
Definition moc.cpp:367
PropertyMode
Definition moc.h:210
@ Anonymous
Definition moc.h:210
@ Named
Definition moc.h:210
bool mustIncludeQPluginH
Definition moc.h:219
bool parseMaybeFunction(const ClassDef *cdef, FunctionDef *def)
Definition moc.cpp:529
void checkProperties(ClassDef *cdef)
Definition moc.cpp:1926
Type parseType()
Definition moc.cpp:124
void parseFunctionArguments(FunctionDef *def)
Definition moc.cpp:294
void parseSlotInPrivate(ClassDef *def, FunctionDef::Access access)
Definition moc.cpp:1747
bool inClass(const ClassDef *def) const
Definition moc.h:236
void parsePluginData(ClassDef *def)
Definition moc.cpp:1505
void generate(FILE *out, FILE *jsonOutput)
Definition moc.cpp:1135
QMap< QByteArray, QByteArray > interface2IdMap
Definition moc.h:224
bool noInclude
Definition moc.h:218
EncounteredQmlMacro
Definition moc.h:265
bool inNamespace(const NamespaceDef *def) const
Definition moc.h:240
QList< ClassDef > classList
Definition moc.h:223
void parseEnumOrFlag(BaseDef *def, bool isFlag)
Definition moc.cpp:1600
\inmodule QtCore
Definition qbytearray.h:57
QByteArray left(qsizetype n) const &
Definition qbytearray.h:169
\inmodule QtCore\reentrant
\inmodule QtCore\reentrant
Definition qjsonobject.h:20
\inmodule QtCore
QByteArray noRef(const QByteArray &type)
Definition moc.h:297
Combined button and popup list for selecting options.
constexpr char toAsciiUpper(char ch) noexcept
Definition qtools_p.h:92
GLint location
GLenum mode
GLuint index
[2]
GLuint GLuint end
GLenum type
GLenum access
GLuint name
GLhandleARB obj
[2]
GLdouble s
[6]
Definition qopenglext.h:235
@ Q_RELOCATABLE_TYPE
Definition qtypeinfo.h:158
#define Q_DECLARE_TYPEINFO(TYPE, FLAGS)
Definition qtypeinfo.h:180
ptrdiff_t qsizetype
Definition qtypes.h:165
unsigned int uint
Definition qtypes.h:34
QTextStream out(stdout)
[7]
QByteArray rightType
Definition moc.h:58
QByteArray normalizedType
Definition moc.h:58
QJsonObject toJson() const
Definition moc.cpp:2120
QByteArray name
Definition moc.h:58
QByteArray typeNameForCast
Definition moc.h:59
ArgumentDef()
Definition moc.h:56
bool isDefault
Definition moc.h:60
Type type
Definition moc.h:57
Definition moc.h:147
qsizetype end
Definition moc.h:155
qsizetype begin
Definition moc.h:154
QMap< QByteArray, QByteArray > flagAliases
Definition moc.h:153
QByteArray qualified
Definition moc.h:149
QByteArray classname
Definition moc.h:148
QMap< QByteArray, bool > enumDeclarations
Definition moc.h:151
QList< ClassInfoDef > classInfoList
Definition moc.h:150
QList< EnumDef > enumList
Definition moc.h:152
Interface(const QByteArray &_className)
Definition moc.h:171
QByteArray className
Definition moc.h:173
QByteArray interfaceId
Definition moc.h:174
QMap< QString, QJsonArray > metaArgs
Definition moc.h:181
QJsonDocument metaData
Definition moc.h:182
QByteArray uri
Definition moc.h:180
QByteArray iid
Definition moc.h:179
bool hasQObject
Definition moc.h:191
QList< QList< Interface > > interfaceList
Definition moc.h:176
QList< FunctionDef > publicList
Definition moc.h:186
QList< FunctionDef > methodList
Definition moc.h:186
QList< PropertyDef > propertyList
Definition moc.h:188
QList< FunctionDef > constructorList
Definition moc.h:185
bool hasQGadget
Definition moc.h:192
QList< SuperClass > superclassList
Definition moc.h:166
bool requireCompleteMethodTypes
Definition moc.h:194
bool hasQNamespace
Definition moc.h:193
QList< FunctionDef > slotList
Definition moc.h:186
QList< FunctionDef > signalList
Definition moc.h:186
int revisionedMethods
Definition moc.h:189
struct ClassDef::PluginData pluginData
QJsonObject toJson() const
Definition moc.cpp:2001
QList< QByteArray > nonClassSignalList
Definition moc.h:187
QByteArray name
Definition moc.h:142
QByteArray value
Definition moc.h:143
Definition moc.h:42
bool isEnumClass
Definition moc.h:47
QByteArray enumName
Definition moc.h:44
EnumDef()
Definition moc.h:48
QByteArray qualifiedType(const ClassDef *cdef) const
Definition moc.cpp:2194
QJsonObject toJson(const ClassDef &cdef) const
Definition moc.cpp:2174
QList< QByteArray > values
Definition moc.h:46
QByteArray name
Definition moc.h:43
QByteArray type
Definition moc.h:45
bool isVirtual
Definition moc.h:80
bool isScriptable
Definition moc.h:89
bool wasCloned
Definition moc.h:83
QByteArray normalizedType
Definition moc.h:70
bool isCompat
Definition moc.h:87
QJsonObject toJson() const
Definition moc.cpp:2085
bool inlineCode
Definition moc.h:82
Type type
Definition moc.h:68
bool isRawSlot
Definition moc.h:96
static void accessToJson(QJsonObject *obj, Access acs)
Definition moc.cpp:2111
bool isSignal
Definition moc.h:91
bool isSlot
Definition moc.h:90
bool isInvokable
Definition moc.h:88
QByteArray name
Definition moc.h:72
QByteArray inPrivateClass
Definition moc.h:73
bool isConst
Definition moc.h:79
QList< ArgumentDef > arguments
Definition moc.h:69
int revision
Definition moc.h:77
bool returnTypeIsVolatile
Definition moc.h:85
bool isAbstract
Definition moc.h:95
bool isPrivateSignal
Definition moc.h:92
bool isDestructor
Definition moc.h:94
@ Public
Definition moc.h:75
@ Protected
Definition moc.h:75
@ Private
Definition moc.h:75
bool isConstructor
Definition moc.h:93
bool isStatic
Definition moc.h:81
QByteArray tag
Definition moc.h:71
bool doGenerate
Definition moc.h:203
bool hasQNamespace
Definition moc.h:202
QByteArray name
Definition moc.h:133
QByteArray storage
Definition moc.h:136
QByteArray accessor
Definition moc.h:135
QByteArray setter
Definition moc.h:134
QByteArray scriptable
Definition moc.h:114
QByteArray member
Definition moc.h:114
QByteArray notify
Definition moc.h:114
QByteArray write
Definition moc.h:114
QByteArray inPrivateClass
Definition moc.h:114
int notifyId
Definition moc.h:115
QJsonObject toJson() const
Definition moc.cpp:2129
bool constant
Definition moc.h:119
Specification gspec
Definition moc.h:117
Specification
Definition moc.h:116
@ ReferenceSpec
Definition moc.h:116
@ ValueSpec
Definition moc.h:116
@ PointerSpec
Definition moc.h:116
bool stdCppSet() const
Definition moc.h:105
QByteArray user
Definition moc.h:114
QByteArray read
Definition moc.h:114
int revision
Definition moc.h:118
QByteArray bind
Definition moc.h:114
int relativeIndex
Definition moc.h:122
QByteArray designable
Definition moc.h:114
bool required
Definition moc.h:121
QByteArray stored
Definition moc.h:114
QByteArray name
Definition moc.h:114
QByteArray reset
Definition moc.h:114
QByteArray type
Definition moc.h:114
\inmodule QtCore
QByteArray qualified
Definition moc.h:160
FunctionDef::Access access
Definition moc.h:161
QByteArray classname
Definition moc.h:159
Definition moc.h:23
ReferenceType
Definition moc.h:24
@ Reference
Definition moc.h:24
@ Pointer
Definition moc.h:24
@ RValueReference
Definition moc.h:24
@ NoReference
Definition moc.h:24
Type(const QByteArray &_name)
Definition moc.h:27
Token firstToken
Definition moc.h:35
QByteArray rawName
Definition moc.h:32
Type()
Definition moc.h:26
uint isScoped
Definition moc.h:34
uint isVolatile
Definition moc.h:33
QByteArray name
Definition moc.h:29
ReferenceType referenceType
Definition moc.h:36