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
qmetatypesjsonprocessor_p.h
Go to the documentation of this file.
1// Copyright (C) 2020 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 METATYPESJSONPROCESSOR_P_H
5#define METATYPESJSONPROCESSOR_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <QtCore/qcbormap.h>
19#include <QtCore/qstring.h>
20#include <QtCore/qtyperevision.h>
21#include <QtCore/qvarlengtharray.h>
22#include <QtCore/qvector.h>
23
25
26// With all the QAnyStringViews in this file we rely on the Cbor data to stay
27// in place if you don't change the Cbor contents. We assume that Cbor data
28// is implicitly shared so that merely copying const Cbor objects does not copy
29// the contents.
30
31enum class Access { Public, Protected, Private };
32
34{
35 using Container = QVarLengthArray<BaseType, 1>;
36
37 BaseType() = default;
38 BaseType(const QCborMap &cbor);
39
42};
43
45{
46 using Container = std::vector<ClassInfo>;
47
48 ClassInfo() = default;
49 ClassInfo(const QCborMap &cbor);
50
53};
54
56{
57 using Container = QVarLengthArray<Interface, 1>;
58
59 Interface() = default;
60 Interface(const QCborValue &cbor);
61
63};
64
92
94{
95 using Container = std::vector<Argument>;
96
97 Argument() = default;
98 Argument(const QCborMap &cbor);
99
102};
103
104struct Method
105{
106 using Container = std::vector<Method>;
107
108 Method() = default;
109 Method(const QCborMap &cbor, bool isConstructor);
110
112
115
117
119
120 bool isCloned = false;
122 bool isConstructor = false;
123};
124
125struct Enum
126{
127 using Container = std::vector<Enum>;
128
129 Enum() = default;
130 Enum(const QCborMap &cbor);
131
135
136 QList<QAnyStringView> values;
137
138 bool isFlag = false;
139 bool isClass = false;
140};
141
170
172{
173public:
175
176 MetaType() = default;
177 MetaType(const QCborMap &cbor, const QString &inputFile);
178
179 bool isEmpty() const { return d == &s_empty; }
180
181 QString inputFile() const { return d->inputFile; }
182 QAnyStringView className() const { return d->className; }
184 const BaseType::Container &superClasses() const { return d->superClasses; }
185 const ClassInfo::Container &classInfos() const { return d->classInfos; }
186 const Interface::Container &ifaces() const { return d->ifaces; }
187
188 const Property::Container &properties() const { return d->properties; }
189 const Method::Container &methods() const { return d->methods; }
190 const Method::Container &sigs() const { return d->sigs; }
191 const Method::Container &constructors() const { return d->constructors; }
192
193 const Enum::Container &enums() const { return d->enums; }
194
195 Kind kind() const { return d->kind; }
196
197private:
198 friend bool operator==(const MetaType &a, const MetaType &b) noexcept
199 {
200 return a.d == b.d;
201 }
202
203 friend bool operator!=(const MetaType &a, const MetaType &b) noexcept
204 {
205 return !(a == b);
206 }
207
208 static const MetaTypePrivate s_empty;
209 const MetaTypePrivate *d = &s_empty;
210};
211
213{
214public:
215 static QList<QAnyStringView> namespaces(const MetaType &classDef);
216
217 MetaTypesJsonProcessor(bool privateIncludes) : m_privateIncludes(privateIncludes) {}
218
219 bool processTypes(const QStringList &files);
220
221 bool processForeignTypes(const QString &foreignTypesFile);
222 bool processForeignTypes(const QStringList &foreignTypesFiles);
223
224 void postProcessTypes();
226
227 QVector<MetaType> types() const { return m_types; }
228 QVector<MetaType> foreignTypes() const { return m_foreignTypes; }
229 QList<QAnyStringView> referencedTypes() const { return m_referencedTypes; }
230 QList<QString> includes() const { return m_includes; }
231
233
234private:
235 enum RegistrationMode {
236 NoRegistration,
237 ObjectRegistration,
238 GadgetRegistration,
239 NamespaceRegistration
240 };
241
242 struct PreProcessResult {
243 QList<QAnyStringView> primitiveAliases;
244 QAnyStringView foreignPrimitive;
245 RegistrationMode mode;
246 };
247
248 struct PotentialPrimitiveType {
250 QString file;
251 };
252
253 enum class PopulateMode { No, Yes };
254 static PreProcessResult preProcess(const MetaType &classDef, PopulateMode populateMode);
255 void addRelatedTypes();
256
257 void sortTypes(QVector<MetaType> &types);
258 QString resolvedInclude(QAnyStringView include);
259 void processTypes(const QCborMap &types);
261
262 bool isPrimitive(QAnyStringView type) const
263 {
264 return std::binary_search(m_primitiveTypes.begin(), m_primitiveTypes.end(), type);
265 }
266
267 QList<QString> m_includes;
268 QList<QAnyStringView> m_referencedTypes;
269 QList<QAnyStringView> m_primitiveTypes;
270 QVector<MetaType> m_types;
271 QVector<MetaType> m_foreignTypes;
272 bool m_privateIncludes = false;
273};
274
276
277#endif // METATYPESJSONPROCESSOR_P_H
const Method::Container & constructors() const
const Enum::Container & enums() const
QAnyStringView qualifiedClassName() const
const Method::Container & sigs() const
const Method::Container & methods() const
const ClassInfo::Container & classInfos() const
friend bool operator!=(const MetaType &a, const MetaType &b) noexcept
const BaseType::Container & superClasses() const
MetaType()=default
QAnyStringView className() const
QString inputFile() const
const Interface::Container & ifaces() const
const Property::Container & properties() const
friend bool operator==(const MetaType &a, const MetaType &b) noexcept
bool processForeignTypes(const QString &foreignTypesFile)
static QList< QAnyStringView > namespaces(const MetaType &classDef)
QList< QString > includes() const
bool processTypes(const QStringList &files)
QVector< MetaType > foreignTypes() const
QList< QAnyStringView > referencedTypes() const
QVector< MetaType > types() const
MetaTypesJsonProcessor(bool privateIncludes)
\inmodule QtCore
\inmodule QtCore\reentrant
Definition qcbormap.h:21
\inmodule QtCore\reentrant
Definition qcborvalue.h:47
iterator end()
Definition qlist.h:626
iterator begin()
Definition qlist.h:625
\inmodule QtCore
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
\inmodule QtCore
Combined button and popup list for selecting options.
GLboolean GLboolean GLboolean b
GLenum mode
GLboolean GLboolean GLboolean GLboolean a
[7]
GLuint index
[2]
GLsizei GLenum GLenum * types
GLenum type
GLenum access
GLuint name
unsigned char quint8
Definition qtypes.h:46
QStringList files
[8]
std::vector< Argument > Container
QAnyStringView name
Argument()=default
QAnyStringView type
BaseType()=default
QAnyStringView name
ClassInfo()=default
std::vector< ClassInfo > Container
QAnyStringView value
QAnyStringView name
QAnyStringView alias
QAnyStringView name
QList< QAnyStringView > values
Enum()=default
std::vector< Enum > Container
QAnyStringView type
QAnyStringView className
Interface()=default
MetaTypePrivate()=default
ClassInfo::Container classInfos
BaseType::Container superClasses
Property::Container properties
Interface::Container ifaces
QAnyStringView qualifiedClassName
Method::Container constructors
QAnyStringView name
std::vector< Method > Container
Method()=default
QAnyStringView returnType
Argument::Container arguments
QTypeRevision revision
QAnyStringView write
QAnyStringView notify
QAnyStringView read
QAnyStringView privateClass
std::vector< Property > Container
QAnyStringView name
QAnyStringView member
QAnyStringView type
Property()=default
QAnyStringView reset
QAnyStringView bindable
QTypeRevision revision