1 /****************************************************************************
2 **
3 ** Copyright (C) 2016 The Qt Company Ltd.
4 ** Contact: https://www.qt.io/licensing/
5 **
6 ** This file is part of the tools applications of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:GPL-EXCEPT$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see https://www.qt.io/terms-conditions. For further
15 ** information use the contact form at https://www.qt.io/contact-us.
16 **
17 ** GNU General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU
19 ** General Public License version 3 as published by the Free Software
20 ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
21 ** included in the packaging of this file. Please review the following
22 ** information to ensure the GNU General Public License requirements will
23 ** be met: https://www.gnu.org/licenses/gpl-3.0.html.
24 **
25 ** $QT_END_LICENSE$
26 **
27 ****************************************************************************/
28 
29 #ifndef GENERATOR_H
30 #define GENERATOR_H
31 
32 #include "moc.h"
33 
34 QT_BEGIN_NAMESPACE
35 
36 class Generator
37 {
38     FILE *out;
39     ClassDef *cdef;
40     QVector<uint> meta_data;
41 public:
42     Generator(ClassDef *classDef, const QVector<QByteArray> &metaTypes, const QHash<QByteArray, QByteArray> &knownQObjectClasses, const QHash<QByteArray, QByteArray> &knownGadgets, FILE *outfile = nullptr);
43     void generateCode();
44 private:
45     bool registerableMetaType(const QByteArray &propertyType);
46     void registerClassInfoStrings();
47     void generateClassInfos();
48     void registerFunctionStrings(const QVector<FunctionDef> &list);
49     void registerByteArrayVector(const QVector<QByteArray> &list);
50     void generateFunctions(const QVector<FunctionDef> &list, const char *functype, int type, int &paramsIndex);
51     void generateFunctionRevisions(const QVector<FunctionDef> &list, const char *functype);
52     void generateFunctionParameters(const QVector<FunctionDef> &list, const char *functype);
53     void generateTypeInfo(const QByteArray &typeName, bool allowEmptyName = false);
54     void registerEnumStrings();
55     void generateEnums(int index);
56     void registerPropertyStrings();
57     void generateProperties();
58     void generateMetacall();
59     void generateStaticMetacall();
60     void generateSignal(FunctionDef *def, int index);
61     void generatePluginMetaData();
62     QMultiMap<QByteArray, int> automaticPropertyMetaTypesHelper();
63     QMap<int, QMultiMap<QByteArray, int> > methodsWithAutomaticTypesHelper(const QVector<FunctionDef> &methodList);
64 
65     void strreg(const QByteArray &); // registers a string
66     int stridx(const QByteArray &); // returns a string's id
67     QVector<QByteArray> strings;
68     QByteArray purestSuperClass;
69     QVector<QByteArray> metaTypes;
70     QHash<QByteArray, QByteArray> knownQObjectClasses;
71     QHash<QByteArray, QByteArray> knownGadgets;
72 };
73 
74 QT_END_NAMESPACE
75 
76 #endif // GENERATOR_H
77