annotate generator/abstractmetabuilder.h @ 282:256ab6cb8e85

Signals look-up andNew syntax for connect. The old one will not work from now on. This will allow for the signals overload. Although changes are done for both D1 and D2 versions, D1 won't work because of compiler bugs. I am tired of waiting for fixes.
author eldar
date Fri, 16 Oct 2009 02:43:59 +0000
parents e78566595089
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
e78566595089 initial import
mandel
parents:
diff changeset
1 /****************************************************************************
e78566595089 initial import
mandel
parents:
diff changeset
2 **
e78566595089 initial import
mandel
parents:
diff changeset
3 ** Copyright (C) 1992-2008 Nokia. All rights reserved.
e78566595089 initial import
mandel
parents:
diff changeset
4 **
e78566595089 initial import
mandel
parents:
diff changeset
5 ** This file is part of Qt Jambi.
e78566595089 initial import
mandel
parents:
diff changeset
6 **
e78566595089 initial import
mandel
parents:
diff changeset
7 ** * Commercial Usage
e78566595089 initial import
mandel
parents:
diff changeset
8 * Licensees holding valid Qt Commercial licenses may use this file in
e78566595089 initial import
mandel
parents:
diff changeset
9 * accordance with the Qt Commercial License Agreement provided with the
e78566595089 initial import
mandel
parents:
diff changeset
10 * Software or, alternatively, in accordance with the terms contained in
e78566595089 initial import
mandel
parents:
diff changeset
11 * a written agreement between you and Nokia.
e78566595089 initial import
mandel
parents:
diff changeset
12 *
e78566595089 initial import
mandel
parents:
diff changeset
13 *
e78566595089 initial import
mandel
parents:
diff changeset
14 * GNU General Public License Usage
e78566595089 initial import
mandel
parents:
diff changeset
15 * Alternatively, this file may be used under the terms of the GNU
e78566595089 initial import
mandel
parents:
diff changeset
16 * General Public License versions 2.0 or 3.0 as published by the Free
e78566595089 initial import
mandel
parents:
diff changeset
17 * Software Foundation and appearing in the file LICENSE.GPL included in
e78566595089 initial import
mandel
parents:
diff changeset
18 * the packaging of this file. Please review the following information
e78566595089 initial import
mandel
parents:
diff changeset
19 * to ensure GNU General Public Licensing requirements will be met:
e78566595089 initial import
mandel
parents:
diff changeset
20 * http://www.fsf.org/licensing/licenses/info/GPLv2.html and
e78566595089 initial import
mandel
parents:
diff changeset
21 * http://www.gnu.org/copyleft/gpl.html. In addition, as a special
e78566595089 initial import
mandel
parents:
diff changeset
22 * exception, Nokia gives you certain additional rights. These rights
e78566595089 initial import
mandel
parents:
diff changeset
23 * are described in the Nokia Qt GPL Exception version 1.2, included in
e78566595089 initial import
mandel
parents:
diff changeset
24 * the file GPL_EXCEPTION.txt in this package.
e78566595089 initial import
mandel
parents:
diff changeset
25 *
e78566595089 initial import
mandel
parents:
diff changeset
26 * Qt for Windows(R) Licensees
e78566595089 initial import
mandel
parents:
diff changeset
27 * As a special exception, Nokia, as the sole copyright holder for Qt
e78566595089 initial import
mandel
parents:
diff changeset
28 * Designer, grants users of the Qt/Eclipse Integration plug-in the
e78566595089 initial import
mandel
parents:
diff changeset
29 * right for the Qt/Eclipse Integration to link to functionality
e78566595089 initial import
mandel
parents:
diff changeset
30 * provided by Qt Designer and its related libraries.
e78566595089 initial import
mandel
parents:
diff changeset
31 *
e78566595089 initial import
mandel
parents:
diff changeset
32 *
e78566595089 initial import
mandel
parents:
diff changeset
33 * If you are unsure which license is appropriate for your use, please
e78566595089 initial import
mandel
parents:
diff changeset
34 * contact the sales department at qt-sales@nokia.com.
e78566595089 initial import
mandel
parents:
diff changeset
35
e78566595089 initial import
mandel
parents:
diff changeset
36 **
e78566595089 initial import
mandel
parents:
diff changeset
37 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
e78566595089 initial import
mandel
parents:
diff changeset
38 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
e78566595089 initial import
mandel
parents:
diff changeset
39 **
e78566595089 initial import
mandel
parents:
diff changeset
40 ****************************************************************************/
e78566595089 initial import
mandel
parents:
diff changeset
41
e78566595089 initial import
mandel
parents:
diff changeset
42 #ifndef ABSTRACTMETABUILDER_H
e78566595089 initial import
mandel
parents:
diff changeset
43 #define ABSTRACTMETABUILDER_H
e78566595089 initial import
mandel
parents:
diff changeset
44
e78566595089 initial import
mandel
parents:
diff changeset
45 #include "codemodel.h"
e78566595089 initial import
mandel
parents:
diff changeset
46 #include "abstractmetalang.h"
e78566595089 initial import
mandel
parents:
diff changeset
47 #include "typesystem.h"
e78566595089 initial import
mandel
parents:
diff changeset
48 #include "typeparser.h"
e78566595089 initial import
mandel
parents:
diff changeset
49
e78566595089 initial import
mandel
parents:
diff changeset
50 #include <QtCore/QSet>
e78566595089 initial import
mandel
parents:
diff changeset
51
e78566595089 initial import
mandel
parents:
diff changeset
52 class AbstractMetaBuilder
e78566595089 initial import
mandel
parents:
diff changeset
53 {
e78566595089 initial import
mandel
parents:
diff changeset
54 public:
e78566595089 initial import
mandel
parents:
diff changeset
55 enum RejectReason {
e78566595089 initial import
mandel
parents:
diff changeset
56 NotInTypeSystem,
e78566595089 initial import
mandel
parents:
diff changeset
57 GenerationDisabled,
e78566595089 initial import
mandel
parents:
diff changeset
58 RedefinedToNotClass,
e78566595089 initial import
mandel
parents:
diff changeset
59 UnmatchedArgumentType,
e78566595089 initial import
mandel
parents:
diff changeset
60 UnmatchedReturnType,
e78566595089 initial import
mandel
parents:
diff changeset
61 NoReason
e78566595089 initial import
mandel
parents:
diff changeset
62 };
e78566595089 initial import
mandel
parents:
diff changeset
63
e78566595089 initial import
mandel
parents:
diff changeset
64 AbstractMetaBuilder();
e78566595089 initial import
mandel
parents:
diff changeset
65 virtual ~AbstractMetaBuilder() {};
e78566595089 initial import
mandel
parents:
diff changeset
66
e78566595089 initial import
mandel
parents:
diff changeset
67 AbstractMetaClassList classes() const { return m_meta_classes; }
e78566595089 initial import
mandel
parents:
diff changeset
68 AbstractMetaClassList classesTopologicalSorted() const;
e78566595089 initial import
mandel
parents:
diff changeset
69
e78566595089 initial import
mandel
parents:
diff changeset
70 FileModelItem model() const { return m_dom; }
e78566595089 initial import
mandel
parents:
diff changeset
71 void setModel(FileModelItem item) { m_dom = item; }
e78566595089 initial import
mandel
parents:
diff changeset
72
e78566595089 initial import
mandel
parents:
diff changeset
73
e78566595089 initial import
mandel
parents:
diff changeset
74 ScopeModelItem popScope() { return m_scopes.takeLast(); }
e78566595089 initial import
mandel
parents:
diff changeset
75 void pushScope(ScopeModelItem item) { m_scopes << item; }
e78566595089 initial import
mandel
parents:
diff changeset
76 ScopeModelItem currentScope() const { return m_scopes.last(); }
e78566595089 initial import
mandel
parents:
diff changeset
77
e78566595089 initial import
mandel
parents:
diff changeset
78 QString fileName() const { return m_file_name; }
e78566595089 initial import
mandel
parents:
diff changeset
79 void setFileName(const QString &fileName) { m_file_name = fileName; }
e78566595089 initial import
mandel
parents:
diff changeset
80
e78566595089 initial import
mandel
parents:
diff changeset
81 void dumpLog();
e78566595089 initial import
mandel
parents:
diff changeset
82
e78566595089 initial import
mandel
parents:
diff changeset
83 bool build();
e78566595089 initial import
mandel
parents:
diff changeset
84
e78566595089 initial import
mandel
parents:
diff changeset
85 void figureOutEnumValuesForClass(AbstractMetaClass *meta_class, QSet<AbstractMetaClass *> *classes);
e78566595089 initial import
mandel
parents:
diff changeset
86 int figureOutEnumValue(const QString &name, int value, AbstractMetaEnum *meta_enum, AbstractMetaFunction *meta_function = 0);
e78566595089 initial import
mandel
parents:
diff changeset
87 void figureOutEnumValues();
e78566595089 initial import
mandel
parents:
diff changeset
88 void figureOutDefaultEnumArguments();
e78566595089 initial import
mandel
parents:
diff changeset
89
e78566595089 initial import
mandel
parents:
diff changeset
90 void addAbstractMetaClass(AbstractMetaClass *cls);
e78566595089 initial import
mandel
parents:
diff changeset
91 AbstractMetaClass *traverseTypeAlias(TypeAliasModelItem item);
e78566595089 initial import
mandel
parents:
diff changeset
92 AbstractMetaClass *traverseClass(ClassModelItem item);
e78566595089 initial import
mandel
parents:
diff changeset
93 bool setupInheritance(AbstractMetaClass *meta_class);
e78566595089 initial import
mandel
parents:
diff changeset
94 AbstractMetaClass *traverseNamespace(NamespaceModelItem item);
e78566595089 initial import
mandel
parents:
diff changeset
95 AbstractMetaEnum *traverseEnum(EnumModelItem item, AbstractMetaClass *enclosing, const QSet<QString> &enumsDeclarations);
e78566595089 initial import
mandel
parents:
diff changeset
96 void traverseEnums(ScopeModelItem item, AbstractMetaClass *parent, const QStringList &enumsDeclarations);
e78566595089 initial import
mandel
parents:
diff changeset
97 void traverseFunctions(ScopeModelItem item, AbstractMetaClass *parent);
e78566595089 initial import
mandel
parents:
diff changeset
98 void traverseFields(ScopeModelItem item, AbstractMetaClass *parent);
e78566595089 initial import
mandel
parents:
diff changeset
99 void traverseStreamOperator(FunctionModelItem function_item);
e78566595089 initial import
mandel
parents:
diff changeset
100 void traverseCompareOperator(FunctionModelItem item);
e78566595089 initial import
mandel
parents:
diff changeset
101 AbstractMetaFunction *traverseFunction(FunctionModelItem function);
e78566595089 initial import
mandel
parents:
diff changeset
102 AbstractMetaField *traverseField(VariableModelItem field, const AbstractMetaClass *cls);
e78566595089 initial import
mandel
parents:
diff changeset
103 void checkFunctionModifications();
e78566595089 initial import
mandel
parents:
diff changeset
104 void registerHashFunction(FunctionModelItem function_item);
e78566595089 initial import
mandel
parents:
diff changeset
105 void registerToStringCapability(FunctionModelItem function_item);
e78566595089 initial import
mandel
parents:
diff changeset
106
e78566595089 initial import
mandel
parents:
diff changeset
107 void parseQ_Property(AbstractMetaClass *meta_class, const QStringList &declarations);
e78566595089 initial import
mandel
parents:
diff changeset
108 void setupEquals(AbstractMetaClass *meta_class);
e78566595089 initial import
mandel
parents:
diff changeset
109 void setupComparable(AbstractMetaClass *meta_class);
e78566595089 initial import
mandel
parents:
diff changeset
110 void setupClonable(AbstractMetaClass *cls);
e78566595089 initial import
mandel
parents:
diff changeset
111 void setupFunctionDefaults(AbstractMetaFunction *meta_function, AbstractMetaClass *meta_class);
e78566595089 initial import
mandel
parents:
diff changeset
112
e78566595089 initial import
mandel
parents:
diff changeset
113 QString translateDefaultValue(ArgumentModelItem item, AbstractMetaType *type,
e78566595089 initial import
mandel
parents:
diff changeset
114 AbstractMetaFunction *fnc, AbstractMetaClass *,
e78566595089 initial import
mandel
parents:
diff changeset
115 int argument_index);
e78566595089 initial import
mandel
parents:
diff changeset
116 AbstractMetaType *translateType(const TypeInfo &type, bool *ok, bool resolveType = true, bool resolveScope = true);
e78566595089 initial import
mandel
parents:
diff changeset
117
e78566595089 initial import
mandel
parents:
diff changeset
118 void decideUsagePattern(AbstractMetaType *type);
e78566595089 initial import
mandel
parents:
diff changeset
119
e78566595089 initial import
mandel
parents:
diff changeset
120 bool inheritTemplate(AbstractMetaClass *subclass,
e78566595089 initial import
mandel
parents:
diff changeset
121 const AbstractMetaClass *template_class,
e78566595089 initial import
mandel
parents:
diff changeset
122 const TypeParser::Info &info);
e78566595089 initial import
mandel
parents:
diff changeset
123 AbstractMetaType *inheritTemplateType(const QList<AbstractMetaType *> &template_types, AbstractMetaType *meta_type, bool *ok = 0);
e78566595089 initial import
mandel
parents:
diff changeset
124
e78566595089 initial import
mandel
parents:
diff changeset
125 bool isQObject(const QString &qualified_name);
e78566595089 initial import
mandel
parents:
diff changeset
126 bool isEnum(const QStringList &qualified_name);
e78566595089 initial import
mandel
parents:
diff changeset
127
e78566595089 initial import
mandel
parents:
diff changeset
128 void fixQObjectForScope (TypeDatabase *types,
e78566595089 initial import
mandel
parents:
diff changeset
129 NamespaceModelItem item);
e78566595089 initial import
mandel
parents:
diff changeset
130 protected:
e78566595089 initial import
mandel
parents:
diff changeset
131 AbstractMetaClass *argumentToClass(ArgumentModelItem);
e78566595089 initial import
mandel
parents:
diff changeset
132
e78566595089 initial import
mandel
parents:
diff changeset
133 virtual AbstractMetaClass *createMetaClass() = 0;
e78566595089 initial import
mandel
parents:
diff changeset
134 virtual AbstractMetaEnum *createMetaEnum() = 0;
e78566595089 initial import
mandel
parents:
diff changeset
135 virtual AbstractMetaEnumValue *createMetaEnumValue() = 0;
e78566595089 initial import
mandel
parents:
diff changeset
136 virtual AbstractMetaField *createMetaField() = 0;
e78566595089 initial import
mandel
parents:
diff changeset
137 virtual AbstractMetaFunction *createMetaFunction() = 0;
e78566595089 initial import
mandel
parents:
diff changeset
138 virtual AbstractMetaArgument *createMetaArgument() = 0;
e78566595089 initial import
mandel
parents:
diff changeset
139 virtual AbstractMetaType *createMetaType() = 0;
e78566595089 initial import
mandel
parents:
diff changeset
140
e78566595089 initial import
mandel
parents:
diff changeset
141 private:
e78566595089 initial import
mandel
parents:
diff changeset
142 void sortLists();
e78566595089 initial import
mandel
parents:
diff changeset
143
e78566595089 initial import
mandel
parents:
diff changeset
144 QString m_file_name;
e78566595089 initial import
mandel
parents:
diff changeset
145
e78566595089 initial import
mandel
parents:
diff changeset
146 AbstractMetaClassList m_meta_classes;
e78566595089 initial import
mandel
parents:
diff changeset
147 AbstractMetaClassList m_templates;
e78566595089 initial import
mandel
parents:
diff changeset
148 FileModelItem m_dom;
e78566595089 initial import
mandel
parents:
diff changeset
149
e78566595089 initial import
mandel
parents:
diff changeset
150 QSet<const TypeEntry *> m_used_types;
e78566595089 initial import
mandel
parents:
diff changeset
151
e78566595089 initial import
mandel
parents:
diff changeset
152 QMap<QString, RejectReason> m_rejected_classes;
e78566595089 initial import
mandel
parents:
diff changeset
153 QMap<QString, RejectReason> m_rejected_enums;
e78566595089 initial import
mandel
parents:
diff changeset
154 QMap<QString, RejectReason> m_rejected_functions;
e78566595089 initial import
mandel
parents:
diff changeset
155 QMap<QString, RejectReason> m_rejected_fields;
e78566595089 initial import
mandel
parents:
diff changeset
156
e78566595089 initial import
mandel
parents:
diff changeset
157 QList<AbstractMetaEnum *> m_enums;
e78566595089 initial import
mandel
parents:
diff changeset
158
e78566595089 initial import
mandel
parents:
diff changeset
159 QList<QPair<AbstractMetaArgument *, AbstractMetaFunction *> > m_enum_default_arguments;
e78566595089 initial import
mandel
parents:
diff changeset
160
e78566595089 initial import
mandel
parents:
diff changeset
161 QHash<QString, AbstractMetaEnumValue *> m_enum_values;
e78566595089 initial import
mandel
parents:
diff changeset
162
e78566595089 initial import
mandel
parents:
diff changeset
163 AbstractMetaClass *m_current_class;
e78566595089 initial import
mandel
parents:
diff changeset
164 QList<ScopeModelItem> m_scopes;
e78566595089 initial import
mandel
parents:
diff changeset
165 QString m_namespace_prefix;
e78566595089 initial import
mandel
parents:
diff changeset
166
e78566595089 initial import
mandel
parents:
diff changeset
167 QSet<AbstractMetaClass *> m_setup_inheritance_done;
e78566595089 initial import
mandel
parents:
diff changeset
168 };
e78566595089 initial import
mandel
parents:
diff changeset
169
e78566595089 initial import
mandel
parents:
diff changeset
170 #endif // ABSTRACTMETBUILDER_H