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 GENERATOR_H
5#define GENERATOR_H
6
7#include "moc.h"
8
9QT_BEGIN_NAMESPACE
10
11class Generator
12{
13 Moc *parser = nullptr;
14 FILE *out;
15 ClassDef *cdef;
16 QList<uint> meta_data;
17
18public:
19 Generator(Moc *moc, ClassDef *classDef, const QList<QByteArray> &metaTypes,
20 const QHash<QByteArray, QByteArray> &knownQObjectClasses,
21 const QHash<QByteArray, QByteArray> &knownGadgets, FILE *outfile = nullptr,
22 bool requireCompleteTypes = false);
23 void generateCode();
24 qsizetype registeredStringsCount() { return strings.size(); }
25
26private:
27 bool registerableMetaType(const QByteArray &propertyType);
28 void registerClassInfoStrings();
29 void registerFunctionStrings(const QList<FunctionDef> &list);
30 void registerByteArrayVector(const QList<QByteArray> &list);
31 void addStrings(const QByteArrayList &strings);
32 void addProperties();
33 void addEnums();
34 void addFunctions(const QList<FunctionDef> &list, const char *functype);
35 void addClassInfos();
36 void generateTypeInfo(const QByteArray &typeName, bool allowEmptyName = false);
37 void registerEnumStrings();
38 void registerPropertyStrings();
39 void generateMetacall();
40 void generateStaticMetacall();
41 void generateSignal(const FunctionDef *def, int index);
42 void generatePluginMetaData();
43 QByteArray disambiguatedTypeName(const QByteArray &name);
44 QByteArray disambiguatedTypeName(const QByteArray &name, TypeTags tag);
45 QByteArray disambiguatedTypeNameForCast(const QByteArray &name);
46 QMultiMap<QByteArray, int> automaticPropertyMetaTypesHelper();
47 QMap<int, QMultiMap<QByteArray, int>>
48 methodsWithAutomaticTypesHelper(const QList<FunctionDef> &methodList);
49
50 void strreg(const QByteArray &); // registers a string
51 int stridx(const QByteArray &); // returns a string's id
52 QList<QByteArray> strings;
53 QByteArray purestSuperClass;
54 QList<QByteArray> metaTypes;
55 QHash<QByteArray, QByteArray> knownQObjectClasses;
56 QHash<QByteArray, QByteArray> knownGadgets;
57 bool requireCompleteTypes;
58};
59
60QT_END_NAMESPACE
61
62#endif // GENERATOR_H
63

source code of qtbase/src/tools/moc/generator.h