annotate generator/typesystem.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 ae34188ddd84
children 17b5e13364b7 adae77fdc1ea
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 TYPESYSTEM_H
e78566595089 initial import
mandel
parents:
diff changeset
43 #define TYPESYSTEM_H
e78566595089 initial import
mandel
parents:
diff changeset
44
e78566595089 initial import
mandel
parents:
diff changeset
45 #include <QtCore/QHash>
e78566595089 initial import
mandel
parents:
diff changeset
46 #include <QtCore/QString>
e78566595089 initial import
mandel
parents:
diff changeset
47 #include <QtCore/QStringList>
e78566595089 initial import
mandel
parents:
diff changeset
48 #include <QtCore/QMap>
e78566595089 initial import
mandel
parents:
diff changeset
49 #include <QDebug>
e78566595089 initial import
mandel
parents:
diff changeset
50
e78566595089 initial import
mandel
parents:
diff changeset
51 class Indentor;
e78566595089 initial import
mandel
parents:
diff changeset
52
e78566595089 initial import
mandel
parents:
diff changeset
53 class AbstractMetaType;
e78566595089 initial import
mandel
parents:
diff changeset
54 class QTextStream;
e78566595089 initial import
mandel
parents:
diff changeset
55
e78566595089 initial import
mandel
parents:
diff changeset
56 class EnumTypeEntry;
e78566595089 initial import
mandel
parents:
diff changeset
57 class FlagsTypeEntry;
e78566595089 initial import
mandel
parents:
diff changeset
58
e78566595089 initial import
mandel
parents:
diff changeset
59 extern QString strings_Object;
e78566595089 initial import
mandel
parents:
diff changeset
60 extern QString strings_String;
e78566595089 initial import
mandel
parents:
diff changeset
61 extern QString strings_Thread;
e78566595089 initial import
mandel
parents:
diff changeset
62 extern QString strings_char;
e78566595089 initial import
mandel
parents:
diff changeset
63 extern QString strings_java_lang;
e78566595089 initial import
mandel
parents:
diff changeset
64 extern QString strings_jchar;
e78566595089 initial import
mandel
parents:
diff changeset
65 extern QString strings_jobject;
e78566595089 initial import
mandel
parents:
diff changeset
66
e78566595089 initial import
mandel
parents:
diff changeset
67 struct Include
e78566595089 initial import
mandel
parents:
diff changeset
68 {
e78566595089 initial import
mandel
parents:
diff changeset
69 enum IncludeType {
e78566595089 initial import
mandel
parents:
diff changeset
70 IncludePath,
e78566595089 initial import
mandel
parents:
diff changeset
71 LocalPath,
e78566595089 initial import
mandel
parents:
diff changeset
72 TargetLangImport
e78566595089 initial import
mandel
parents:
diff changeset
73 };
e78566595089 initial import
mandel
parents:
diff changeset
74
e78566595089 initial import
mandel
parents:
diff changeset
75 Include() : type(IncludePath) { }
e78566595089 initial import
mandel
parents:
diff changeset
76 Include(IncludeType t, const QString &nam) : type(t), name(nam) { };
e78566595089 initial import
mandel
parents:
diff changeset
77
e78566595089 initial import
mandel
parents:
diff changeset
78 bool isValid() { return !name.isEmpty(); }
e78566595089 initial import
mandel
parents:
diff changeset
79
e78566595089 initial import
mandel
parents:
diff changeset
80 IncludeType type;
e78566595089 initial import
mandel
parents:
diff changeset
81 QString name;
e78566595089 initial import
mandel
parents:
diff changeset
82
e78566595089 initial import
mandel
parents:
diff changeset
83 QString toString() const;
e78566595089 initial import
mandel
parents:
diff changeset
84
e78566595089 initial import
mandel
parents:
diff changeset
85 bool operator<(const Include &other) const { return name < other.name; }
e78566595089 initial import
mandel
parents:
diff changeset
86 };
e78566595089 initial import
mandel
parents:
diff changeset
87 typedef QList<Include> IncludeList;
e78566595089 initial import
mandel
parents:
diff changeset
88
e78566595089 initial import
mandel
parents:
diff changeset
89 typedef QMap<int, QString> ArgumentMap;
e78566595089 initial import
mandel
parents:
diff changeset
90
e78566595089 initial import
mandel
parents:
diff changeset
91 class TemplateInstance;
e78566595089 initial import
mandel
parents:
diff changeset
92
e78566595089 initial import
mandel
parents:
diff changeset
93 namespace TypeSystem {
e78566595089 initial import
mandel
parents:
diff changeset
94 enum Language {
e78566595089 initial import
mandel
parents:
diff changeset
95 NoLanguage = 0x0000,
e78566595089 initial import
mandel
parents:
diff changeset
96 TargetLangCode = 0x0001,
e78566595089 initial import
mandel
parents:
diff changeset
97 NativeCode = 0x0002,
14
5015aede8edd insert() for QPolygons
eldar
parents: 4
diff changeset
98 TargetLangFreeCode = 0x0003,
1
e78566595089 initial import
mandel
parents:
diff changeset
99 ShellCode = 0x0004,
e78566595089 initial import
mandel
parents:
diff changeset
100 ShellDeclaration = 0x0008,
e78566595089 initial import
mandel
parents:
diff changeset
101 PackageInitializer = 0x0010,
e78566595089 initial import
mandel
parents:
diff changeset
102 DestructorFunction = 0x0020,
e78566595089 initial import
mandel
parents:
diff changeset
103 Constructors = 0x0040,
e78566595089 initial import
mandel
parents:
diff changeset
104 Interface = 0x0080,
e78566595089 initial import
mandel
parents:
diff changeset
105
e78566595089 initial import
mandel
parents:
diff changeset
106 // masks
e78566595089 initial import
mandel
parents:
diff changeset
107 All = TargetLangCode
e78566595089 initial import
mandel
parents:
diff changeset
108 | NativeCode
e78566595089 initial import
mandel
parents:
diff changeset
109 | ShellCode
e78566595089 initial import
mandel
parents:
diff changeset
110 | ShellDeclaration
e78566595089 initial import
mandel
parents:
diff changeset
111 | PackageInitializer
e78566595089 initial import
mandel
parents:
diff changeset
112 | Constructors
e78566595089 initial import
mandel
parents:
diff changeset
113 | Interface
e78566595089 initial import
mandel
parents:
diff changeset
114 | DestructorFunction,
e78566595089 initial import
mandel
parents:
diff changeset
115
e78566595089 initial import
mandel
parents:
diff changeset
116 JavaAndNativeCode = TargetLangCode | NativeCode,
e78566595089 initial import
mandel
parents:
diff changeset
117 TargetLangAndNativeCode = TargetLangCode | NativeCode
e78566595089 initial import
mandel
parents:
diff changeset
118 };
e78566595089 initial import
mandel
parents:
diff changeset
119
e78566595089 initial import
mandel
parents:
diff changeset
120 enum Ownership {
e78566595089 initial import
mandel
parents:
diff changeset
121 InvalidOwnership,
e78566595089 initial import
mandel
parents:
diff changeset
122 DefaultOwnership,
e78566595089 initial import
mandel
parents:
diff changeset
123 TargetLangOwnership,
e78566595089 initial import
mandel
parents:
diff changeset
124 CppOwnership
e78566595089 initial import
mandel
parents:
diff changeset
125 };
e78566595089 initial import
mandel
parents:
diff changeset
126 };
e78566595089 initial import
mandel
parents:
diff changeset
127
e78566595089 initial import
mandel
parents:
diff changeset
128 struct ReferenceCount
e78566595089 initial import
mandel
parents:
diff changeset
129 {
e78566595089 initial import
mandel
parents:
diff changeset
130 ReferenceCount() : threadSafe(false), access(Public) { }
e78566595089 initial import
mandel
parents:
diff changeset
131 enum Action { // 0x01 - 0xff
e78566595089 initial import
mandel
parents:
diff changeset
132 Invalid = 0x00,
e78566595089 initial import
mandel
parents:
diff changeset
133 Add = 0x01,
e78566595089 initial import
mandel
parents:
diff changeset
134 AddAll = 0x02,
e78566595089 initial import
mandel
parents:
diff changeset
135 Remove = 0x04,
e78566595089 initial import
mandel
parents:
diff changeset
136 Set = 0x08,
e78566595089 initial import
mandel
parents:
diff changeset
137 Ignore = 0x10,
e78566595089 initial import
mandel
parents:
diff changeset
138
e78566595089 initial import
mandel
parents:
diff changeset
139 ActionsMask = 0xff,
e78566595089 initial import
mandel
parents:
diff changeset
140
e78566595089 initial import
mandel
parents:
diff changeset
141 Padding = 0xffffffff
e78566595089 initial import
mandel
parents:
diff changeset
142 };
e78566595089 initial import
mandel
parents:
diff changeset
143
e78566595089 initial import
mandel
parents:
diff changeset
144 enum Flag { // 0x100 - 0xf00
e78566595089 initial import
mandel
parents:
diff changeset
145 ThreadSafe = 0x100,
e78566595089 initial import
mandel
parents:
diff changeset
146 Static = 0x200,
e78566595089 initial import
mandel
parents:
diff changeset
147 DeclareVariable = 0x400,
e78566595089 initial import
mandel
parents:
diff changeset
148
e78566595089 initial import
mandel
parents:
diff changeset
149 FlagsMask = 0xf00
e78566595089 initial import
mandel
parents:
diff changeset
150 };
e78566595089 initial import
mandel
parents:
diff changeset
151
e78566595089 initial import
mandel
parents:
diff changeset
152 enum Access { // 0x1000 - 0xf000
e78566595089 initial import
mandel
parents:
diff changeset
153 Private = 0x1000,
e78566595089 initial import
mandel
parents:
diff changeset
154 Protected = 0x2000,
e78566595089 initial import
mandel
parents:
diff changeset
155 Friendly = 0x3000,
e78566595089 initial import
mandel
parents:
diff changeset
156 Public = 0x4000,
e78566595089 initial import
mandel
parents:
diff changeset
157
e78566595089 initial import
mandel
parents:
diff changeset
158 AccessMask = 0xf000
e78566595089 initial import
mandel
parents:
diff changeset
159 };
e78566595089 initial import
mandel
parents:
diff changeset
160
e78566595089 initial import
mandel
parents:
diff changeset
161 Action action;
e78566595089 initial import
mandel
parents:
diff changeset
162 QString variableName;
e78566595089 initial import
mandel
parents:
diff changeset
163 QString conditional;
e78566595089 initial import
mandel
parents:
diff changeset
164 QString declareVariable;
e78566595089 initial import
mandel
parents:
diff changeset
165
e78566595089 initial import
mandel
parents:
diff changeset
166 uint threadSafe : 1;
e78566595089 initial import
mandel
parents:
diff changeset
167
e78566595089 initial import
mandel
parents:
diff changeset
168 uint access;
e78566595089 initial import
mandel
parents:
diff changeset
169 };
e78566595089 initial import
mandel
parents:
diff changeset
170
e78566595089 initial import
mandel
parents:
diff changeset
171 class CodeSnipFragment{
e78566595089 initial import
mandel
parents:
diff changeset
172 private:
e78566595089 initial import
mandel
parents:
diff changeset
173 const QString m_code;
e78566595089 initial import
mandel
parents:
diff changeset
174 TemplateInstance *m_instance;
e78566595089 initial import
mandel
parents:
diff changeset
175
e78566595089 initial import
mandel
parents:
diff changeset
176 public:
e78566595089 initial import
mandel
parents:
diff changeset
177 CodeSnipFragment(const QString &code)
e78566595089 initial import
mandel
parents:
diff changeset
178 : m_code(code),
e78566595089 initial import
mandel
parents:
diff changeset
179 m_instance(0)
e78566595089 initial import
mandel
parents:
diff changeset
180 {}
e78566595089 initial import
mandel
parents:
diff changeset
181
e78566595089 initial import
mandel
parents:
diff changeset
182 CodeSnipFragment(TemplateInstance *instance)
e78566595089 initial import
mandel
parents:
diff changeset
183 : m_instance(instance)
e78566595089 initial import
mandel
parents:
diff changeset
184 {}
e78566595089 initial import
mandel
parents:
diff changeset
185
e78566595089 initial import
mandel
parents:
diff changeset
186 QString code() const;
e78566595089 initial import
mandel
parents:
diff changeset
187 };
e78566595089 initial import
mandel
parents:
diff changeset
188
e78566595089 initial import
mandel
parents:
diff changeset
189 class CodeSnipAbstract{
e78566595089 initial import
mandel
parents:
diff changeset
190 public:
e78566595089 initial import
mandel
parents:
diff changeset
191 QString code() const;
e78566595089 initial import
mandel
parents:
diff changeset
192
e78566595089 initial import
mandel
parents:
diff changeset
193 void addCode(const QString &code){
e78566595089 initial import
mandel
parents:
diff changeset
194 codeList.append(new CodeSnipFragment(code));
e78566595089 initial import
mandel
parents:
diff changeset
195 }
e78566595089 initial import
mandel
parents:
diff changeset
196
e78566595089 initial import
mandel
parents:
diff changeset
197 void addTemplateInstance(TemplateInstance *ti){
e78566595089 initial import
mandel
parents:
diff changeset
198 codeList.append(new CodeSnipFragment(ti));
e78566595089 initial import
mandel
parents:
diff changeset
199 }
e78566595089 initial import
mandel
parents:
diff changeset
200
e78566595089 initial import
mandel
parents:
diff changeset
201 QList<CodeSnipFragment*> codeList;
e78566595089 initial import
mandel
parents:
diff changeset
202 };
e78566595089 initial import
mandel
parents:
diff changeset
203
e78566595089 initial import
mandel
parents:
diff changeset
204 class CustomFunction : public CodeSnipAbstract
e78566595089 initial import
mandel
parents:
diff changeset
205 {
e78566595089 initial import
mandel
parents:
diff changeset
206 public:
e78566595089 initial import
mandel
parents:
diff changeset
207 CustomFunction(const QString &n = QString()) : name(n) { }
e78566595089 initial import
mandel
parents:
diff changeset
208
e78566595089 initial import
mandel
parents:
diff changeset
209 QString name;
e78566595089 initial import
mandel
parents:
diff changeset
210 QString param_name;
e78566595089 initial import
mandel
parents:
diff changeset
211 };
e78566595089 initial import
mandel
parents:
diff changeset
212
e78566595089 initial import
mandel
parents:
diff changeset
213 class TemplateEntry : public CodeSnipAbstract
e78566595089 initial import
mandel
parents:
diff changeset
214 {
e78566595089 initial import
mandel
parents:
diff changeset
215 public:
e78566595089 initial import
mandel
parents:
diff changeset
216 TemplateEntry(const QString &name)
e78566595089 initial import
mandel
parents:
diff changeset
217 : m_name(name)
e78566595089 initial import
mandel
parents:
diff changeset
218 {
e78566595089 initial import
mandel
parents:
diff changeset
219 };
e78566595089 initial import
mandel
parents:
diff changeset
220
e78566595089 initial import
mandel
parents:
diff changeset
221 QString name() const {
e78566595089 initial import
mandel
parents:
diff changeset
222 return m_name;
e78566595089 initial import
mandel
parents:
diff changeset
223 };
e78566595089 initial import
mandel
parents:
diff changeset
224
e78566595089 initial import
mandel
parents:
diff changeset
225 private:
e78566595089 initial import
mandel
parents:
diff changeset
226 QString m_name;
e78566595089 initial import
mandel
parents:
diff changeset
227 };
e78566595089 initial import
mandel
parents:
diff changeset
228
e78566595089 initial import
mandel
parents:
diff changeset
229 typedef QHash<QString, TemplateEntry *> TemplateEntryHash;
e78566595089 initial import
mandel
parents:
diff changeset
230
e78566595089 initial import
mandel
parents:
diff changeset
231 class TemplateInstance
e78566595089 initial import
mandel
parents:
diff changeset
232 {
e78566595089 initial import
mandel
parents:
diff changeset
233 public:
e78566595089 initial import
mandel
parents:
diff changeset
234 TemplateInstance(const QString &name)
e78566595089 initial import
mandel
parents:
diff changeset
235 : m_name(name)
e78566595089 initial import
mandel
parents:
diff changeset
236 {}
e78566595089 initial import
mandel
parents:
diff changeset
237
e78566595089 initial import
mandel
parents:
diff changeset
238 void addReplaceRule(const QString &name, const QString &value){
e78566595089 initial import
mandel
parents:
diff changeset
239 replaceRules[name]=value;
e78566595089 initial import
mandel
parents:
diff changeset
240 }
e78566595089 initial import
mandel
parents:
diff changeset
241
e78566595089 initial import
mandel
parents:
diff changeset
242 QString expandCode() const;
e78566595089 initial import
mandel
parents:
diff changeset
243
e78566595089 initial import
mandel
parents:
diff changeset
244 QString name() const {
e78566595089 initial import
mandel
parents:
diff changeset
245 return m_name;
e78566595089 initial import
mandel
parents:
diff changeset
246 }
e78566595089 initial import
mandel
parents:
diff changeset
247
e78566595089 initial import
mandel
parents:
diff changeset
248 private:
e78566595089 initial import
mandel
parents:
diff changeset
249 const QString m_name;
e78566595089 initial import
mandel
parents:
diff changeset
250 QHash<QString, QString> replaceRules;
e78566595089 initial import
mandel
parents:
diff changeset
251 };
e78566595089 initial import
mandel
parents:
diff changeset
252
e78566595089 initial import
mandel
parents:
diff changeset
253
e78566595089 initial import
mandel
parents:
diff changeset
254 class CodeSnip : public CodeSnipAbstract
e78566595089 initial import
mandel
parents:
diff changeset
255 {
e78566595089 initial import
mandel
parents:
diff changeset
256 public:
e78566595089 initial import
mandel
parents:
diff changeset
257 enum Position {
e78566595089 initial import
mandel
parents:
diff changeset
258 Beginning,
e78566595089 initial import
mandel
parents:
diff changeset
259 End,
e78566595089 initial import
mandel
parents:
diff changeset
260 AfterThis
e78566595089 initial import
mandel
parents:
diff changeset
261 };
e78566595089 initial import
mandel
parents:
diff changeset
262
e78566595089 initial import
mandel
parents:
diff changeset
263 CodeSnip() : language(TypeSystem::TargetLangCode) { }
e78566595089 initial import
mandel
parents:
diff changeset
264 CodeSnip(TypeSystem::Language lang) : language(lang) { }
e78566595089 initial import
mandel
parents:
diff changeset
265
e78566595089 initial import
mandel
parents:
diff changeset
266 // Very simple, easy to make code ugly if you try
e78566595089 initial import
mandel
parents:
diff changeset
267 QTextStream &formattedCode(QTextStream &s, Indentor &indentor) const;
e78566595089 initial import
mandel
parents:
diff changeset
268
e78566595089 initial import
mandel
parents:
diff changeset
269 TypeSystem::Language language;
e78566595089 initial import
mandel
parents:
diff changeset
270 Position position;
e78566595089 initial import
mandel
parents:
diff changeset
271 ArgumentMap argumentMap;
e78566595089 initial import
mandel
parents:
diff changeset
272 };
e78566595089 initial import
mandel
parents:
diff changeset
273 typedef QList<CodeSnip> CodeSnipList;
e78566595089 initial import
mandel
parents:
diff changeset
274
e78566595089 initial import
mandel
parents:
diff changeset
275 struct ArgumentModification
e78566595089 initial import
mandel
parents:
diff changeset
276 {
e78566595089 initial import
mandel
parents:
diff changeset
277 ArgumentModification(int idx) : removed_default_expression(false), removed(false), no_null_pointers(false), index(idx)
e78566595089 initial import
mandel
parents:
diff changeset
278 {}
e78566595089 initial import
mandel
parents:
diff changeset
279
e78566595089 initial import
mandel
parents:
diff changeset
280 // Should the default expression be removed?
e78566595089 initial import
mandel
parents:
diff changeset
281 uint removed_default_expression : 1;
e78566595089 initial import
mandel
parents:
diff changeset
282 uint removed : 1;
e78566595089 initial import
mandel
parents:
diff changeset
283 uint no_null_pointers : 1;
e78566595089 initial import
mandel
parents:
diff changeset
284 uint reset_after_use : 1;
e78566595089 initial import
mandel
parents:
diff changeset
285
e78566595089 initial import
mandel
parents:
diff changeset
286 // The index of this argument
e78566595089 initial import
mandel
parents:
diff changeset
287 int index;
e78566595089 initial import
mandel
parents:
diff changeset
288
e78566595089 initial import
mandel
parents:
diff changeset
289 // Reference count flags for this argument
e78566595089 initial import
mandel
parents:
diff changeset
290 QList<ReferenceCount> referenceCounts;
e78566595089 initial import
mandel
parents:
diff changeset
291
e78566595089 initial import
mandel
parents:
diff changeset
292 // The text given for the new type of the argument
e78566595089 initial import
mandel
parents:
diff changeset
293 QString modified_type;
e78566595089 initial import
mandel
parents:
diff changeset
294
e78566595089 initial import
mandel
parents:
diff changeset
295 QString replace_value;
e78566595089 initial import
mandel
parents:
diff changeset
296
e78566595089 initial import
mandel
parents:
diff changeset
297 // The code to be used to construct a return value when no_null_pointers is true and
e78566595089 initial import
mandel
parents:
diff changeset
298 // the returned value is null. If no_null_pointers is true and this string is
e78566595089 initial import
mandel
parents:
diff changeset
299 // empty, then the base class implementation will be used (or a default construction
e78566595089 initial import
mandel
parents:
diff changeset
300 // if there is no implementation)
e78566595089 initial import
mandel
parents:
diff changeset
301 QString null_pointer_default_value;
e78566595089 initial import
mandel
parents:
diff changeset
302
e78566595089 initial import
mandel
parents:
diff changeset
303 // The text of the new default expression of the argument
e78566595089 initial import
mandel
parents:
diff changeset
304 QString replaced_default_expression;
e78566595089 initial import
mandel
parents:
diff changeset
305
e78566595089 initial import
mandel
parents:
diff changeset
306 // The new definition of ownership for a specific argument
e78566595089 initial import
mandel
parents:
diff changeset
307 QHash<TypeSystem::Language, TypeSystem::Ownership> ownerships;
e78566595089 initial import
mandel
parents:
diff changeset
308
e78566595089 initial import
mandel
parents:
diff changeset
309 // Different conversion rules
e78566595089 initial import
mandel
parents:
diff changeset
310 CodeSnipList conversion_rules;
e78566595089 initial import
mandel
parents:
diff changeset
311 };
e78566595089 initial import
mandel
parents:
diff changeset
312
e78566595089 initial import
mandel
parents:
diff changeset
313 struct Modification {
e78566595089 initial import
mandel
parents:
diff changeset
314 enum Modifiers {
e78566595089 initial import
mandel
parents:
diff changeset
315 Private = 0x0001,
e78566595089 initial import
mandel
parents:
diff changeset
316 Protected = 0x0002,
e78566595089 initial import
mandel
parents:
diff changeset
317 Public = 0x0003,
e78566595089 initial import
mandel
parents:
diff changeset
318 Friendly = 0x0004,
e78566595089 initial import
mandel
parents:
diff changeset
319 AccessModifierMask = 0x000f,
e78566595089 initial import
mandel
parents:
diff changeset
320
e78566595089 initial import
mandel
parents:
diff changeset
321 Final = 0x0010,
e78566595089 initial import
mandel
parents:
diff changeset
322 NonFinal = 0x0020,
e78566595089 initial import
mandel
parents:
diff changeset
323 FinalMask = Final | NonFinal,
e78566595089 initial import
mandel
parents:
diff changeset
324
e78566595089 initial import
mandel
parents:
diff changeset
325 Readable = 0x0100,
e78566595089 initial import
mandel
parents:
diff changeset
326 Writable = 0x0200,
e78566595089 initial import
mandel
parents:
diff changeset
327
e78566595089 initial import
mandel
parents:
diff changeset
328 CodeInjection = 0x1000,
e78566595089 initial import
mandel
parents:
diff changeset
329 Rename = 0x2000,
e78566595089 initial import
mandel
parents:
diff changeset
330 Deprecated = 0x4000,
e78566595089 initial import
mandel
parents:
diff changeset
331 ReplaceExpression = 0x8000,
148
ae34188ddd84 private signals of QAbstractItemModel are now accessible
eldar
parents: 42
diff changeset
332 VirtualSlot = 0x10000 | NonFinal,
ae34188ddd84 private signals of QAbstractItemModel are now accessible
eldar
parents: 42
diff changeset
333 AllowAsSlot = 0x00020000,
ae34188ddd84 private signals of QAbstractItemModel are now accessible
eldar
parents: 42
diff changeset
334 PrivateSignal = 0x00040000
ae34188ddd84 private signals of QAbstractItemModel are now accessible
eldar
parents: 42
diff changeset
335
1
e78566595089 initial import
mandel
parents:
diff changeset
336 };
e78566595089 initial import
mandel
parents:
diff changeset
337
e78566595089 initial import
mandel
parents:
diff changeset
338 Modification() : modifiers(0) { }
e78566595089 initial import
mandel
parents:
diff changeset
339
e78566595089 initial import
mandel
parents:
diff changeset
340 bool isAccessModifier() const { return modifiers & AccessModifierMask; }
e78566595089 initial import
mandel
parents:
diff changeset
341 Modifiers accessModifier() const { return Modifiers(modifiers & AccessModifierMask); }
e78566595089 initial import
mandel
parents:
diff changeset
342 bool isPrivate() const { return accessModifier() == Private; }
e78566595089 initial import
mandel
parents:
diff changeset
343 bool isProtected() const { return accessModifier() == Protected; }
e78566595089 initial import
mandel
parents:
diff changeset
344 bool isPublic() const { return accessModifier() == Public; }
e78566595089 initial import
mandel
parents:
diff changeset
345 bool isFriendly() const { return accessModifier() == Friendly; }
e78566595089 initial import
mandel
parents:
diff changeset
346 bool isFinal() const { return modifiers & Final; }
e78566595089 initial import
mandel
parents:
diff changeset
347 bool isNonFinal() const { return modifiers & NonFinal; }
e78566595089 initial import
mandel
parents:
diff changeset
348 bool isVirtualSlot() const { return (modifiers & VirtualSlot) == VirtualSlot; }
148
ae34188ddd84 private signals of QAbstractItemModel are now accessible
eldar
parents: 42
diff changeset
349 bool isAllowedAsSlot() const { return (modifiers & AllowAsSlot) == AllowAsSlot; }
ae34188ddd84 private signals of QAbstractItemModel are now accessible
eldar
parents: 42
diff changeset
350 bool isPrivateSignal() const { return (modifiers & PrivateSignal) == PrivateSignal; }
1
e78566595089 initial import
mandel
parents:
diff changeset
351 QString accessModifierString() const;
e78566595089 initial import
mandel
parents:
diff changeset
352
e78566595089 initial import
mandel
parents:
diff changeset
353 bool isDeprecated() const { return modifiers & Deprecated; }
e78566595089 initial import
mandel
parents:
diff changeset
354
e78566595089 initial import
mandel
parents:
diff changeset
355 void setRenamedTo(const QString &name) { renamedToName = name; }
e78566595089 initial import
mandel
parents:
diff changeset
356 QString renamedTo() const { return renamedToName; }
e78566595089 initial import
mandel
parents:
diff changeset
357 bool isRenameModifier() const { return modifiers & Rename; }
e78566595089 initial import
mandel
parents:
diff changeset
358
e78566595089 initial import
mandel
parents:
diff changeset
359 uint modifiers;
e78566595089 initial import
mandel
parents:
diff changeset
360 QString renamedToName;
e78566595089 initial import
mandel
parents:
diff changeset
361 };
e78566595089 initial import
mandel
parents:
diff changeset
362
e78566595089 initial import
mandel
parents:
diff changeset
363 struct FunctionModification: public Modification
e78566595089 initial import
mandel
parents:
diff changeset
364 {
e78566595089 initial import
mandel
parents:
diff changeset
365 FunctionModification() : removal(TypeSystem::NoLanguage), store_result(false) { }
e78566595089 initial import
mandel
parents:
diff changeset
366
e78566595089 initial import
mandel
parents:
diff changeset
367 bool isCodeInjection() const { return modifiers & CodeInjection; }
e78566595089 initial import
mandel
parents:
diff changeset
368 bool isRemoveModifier() const { return removal != TypeSystem::NoLanguage; }
e78566595089 initial import
mandel
parents:
diff changeset
369
e78566595089 initial import
mandel
parents:
diff changeset
370 QString toString() const;
e78566595089 initial import
mandel
parents:
diff changeset
371
e78566595089 initial import
mandel
parents:
diff changeset
372 QString signature;
e78566595089 initial import
mandel
parents:
diff changeset
373 QString association;
e78566595089 initial import
mandel
parents:
diff changeset
374 CodeSnipList snips;
e78566595089 initial import
mandel
parents:
diff changeset
375 TypeSystem::Language removal;
e78566595089 initial import
mandel
parents:
diff changeset
376 bool store_result;
e78566595089 initial import
mandel
parents:
diff changeset
377
e78566595089 initial import
mandel
parents:
diff changeset
378 QList<ArgumentModification> argument_mods;
e78566595089 initial import
mandel
parents:
diff changeset
379 };
e78566595089 initial import
mandel
parents:
diff changeset
380 typedef QList<FunctionModification> FunctionModificationList;
e78566595089 initial import
mandel
parents:
diff changeset
381
e78566595089 initial import
mandel
parents:
diff changeset
382 struct FieldModification: public Modification
e78566595089 initial import
mandel
parents:
diff changeset
383 {
e78566595089 initial import
mandel
parents:
diff changeset
384 bool isReadable() const { return modifiers & Readable; }
e78566595089 initial import
mandel
parents:
diff changeset
385 bool isWritable() const { return modifiers & Writable; }
e78566595089 initial import
mandel
parents:
diff changeset
386
e78566595089 initial import
mandel
parents:
diff changeset
387 QString name;
e78566595089 initial import
mandel
parents:
diff changeset
388 };
e78566595089 initial import
mandel
parents:
diff changeset
389 typedef QList<FieldModification> FieldModificationList;
e78566595089 initial import
mandel
parents:
diff changeset
390
e78566595089 initial import
mandel
parents:
diff changeset
391 struct ExpensePolicy {
e78566595089 initial import
mandel
parents:
diff changeset
392 ExpensePolicy() : limit(-1) { }
e78566595089 initial import
mandel
parents:
diff changeset
393 int limit;
e78566595089 initial import
mandel
parents:
diff changeset
394 QString cost;
e78566595089 initial import
mandel
parents:
diff changeset
395 bool isValid() const { return limit >= 0; }
e78566595089 initial import
mandel
parents:
diff changeset
396 };
e78566595089 initial import
mandel
parents:
diff changeset
397
e78566595089 initial import
mandel
parents:
diff changeset
398 class InterfaceTypeEntry;
e78566595089 initial import
mandel
parents:
diff changeset
399 class ObjectTypeEntry;
e78566595089 initial import
mandel
parents:
diff changeset
400
e78566595089 initial import
mandel
parents:
diff changeset
401 class TypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
402 {
e78566595089 initial import
mandel
parents:
diff changeset
403 public:
e78566595089 initial import
mandel
parents:
diff changeset
404 enum Type {
e78566595089 initial import
mandel
parents:
diff changeset
405 PrimitiveType,
e78566595089 initial import
mandel
parents:
diff changeset
406 VoidType,
e78566595089 initial import
mandel
parents:
diff changeset
407 FlagsType,
e78566595089 initial import
mandel
parents:
diff changeset
408 EnumType,
e78566595089 initial import
mandel
parents:
diff changeset
409 TemplateArgumentType,
e78566595089 initial import
mandel
parents:
diff changeset
410 ThreadType,
e78566595089 initial import
mandel
parents:
diff changeset
411 BasicValueType,
e78566595089 initial import
mandel
parents:
diff changeset
412 StringType,
e78566595089 initial import
mandel
parents:
diff changeset
413 ContainerType,
e78566595089 initial import
mandel
parents:
diff changeset
414 InterfaceType,
e78566595089 initial import
mandel
parents:
diff changeset
415 ObjectType,
e78566595089 initial import
mandel
parents:
diff changeset
416 NamespaceType,
e78566595089 initial import
mandel
parents:
diff changeset
417 VariantType,
e78566595089 initial import
mandel
parents:
diff changeset
418 JObjectWrapperType,
e78566595089 initial import
mandel
parents:
diff changeset
419 CharType,
e78566595089 initial import
mandel
parents:
diff changeset
420 ArrayType,
e78566595089 initial import
mandel
parents:
diff changeset
421 TypeSystemType,
e78566595089 initial import
mandel
parents:
diff changeset
422 CustomType,
e78566595089 initial import
mandel
parents:
diff changeset
423 };
e78566595089 initial import
mandel
parents:
diff changeset
424
e78566595089 initial import
mandel
parents:
diff changeset
425 enum CodeGeneration {
e78566595089 initial import
mandel
parents:
diff changeset
426 GenerateTargetLang = 0x0001,
e78566595089 initial import
mandel
parents:
diff changeset
427 GenerateCpp = 0x0002,
e78566595089 initial import
mandel
parents:
diff changeset
428 GenerateForSubclass = 0x0004,
e78566595089 initial import
mandel
parents:
diff changeset
429
e78566595089 initial import
mandel
parents:
diff changeset
430 GenerateNothing = 0,
e78566595089 initial import
mandel
parents:
diff changeset
431 GenerateAll = 0xffff,
e78566595089 initial import
mandel
parents:
diff changeset
432 GenerateCode = GenerateTargetLang | GenerateCpp
e78566595089 initial import
mandel
parents:
diff changeset
433 };
e78566595089 initial import
mandel
parents:
diff changeset
434
e78566595089 initial import
mandel
parents:
diff changeset
435 TypeEntry(const QString &name, Type t)
e78566595089 initial import
mandel
parents:
diff changeset
436 : m_name(name),
e78566595089 initial import
mandel
parents:
diff changeset
437 m_type(t),
e78566595089 initial import
mandel
parents:
diff changeset
438 m_code_generation(GenerateAll),
e78566595089 initial import
mandel
parents:
diff changeset
439 m_preferred_conversion(true)
e78566595089 initial import
mandel
parents:
diff changeset
440 {
e78566595089 initial import
mandel
parents:
diff changeset
441 };
e78566595089 initial import
mandel
parents:
diff changeset
442
e78566595089 initial import
mandel
parents:
diff changeset
443 virtual ~TypeEntry() { }
e78566595089 initial import
mandel
parents:
diff changeset
444
e78566595089 initial import
mandel
parents:
diff changeset
445 Type type() const { return m_type; }
e78566595089 initial import
mandel
parents:
diff changeset
446 bool isPrimitive() const { return m_type == PrimitiveType; }
e78566595089 initial import
mandel
parents:
diff changeset
447 bool isEnum() const { return m_type == EnumType; }
e78566595089 initial import
mandel
parents:
diff changeset
448 bool isFlags() const { return m_type == FlagsType; }
e78566595089 initial import
mandel
parents:
diff changeset
449 bool isInterface() const { return m_type == InterfaceType; }
e78566595089 initial import
mandel
parents:
diff changeset
450 bool isObject() const { return m_type == ObjectType; }
e78566595089 initial import
mandel
parents:
diff changeset
451 bool isString() const { return m_type == StringType; }
e78566595089 initial import
mandel
parents:
diff changeset
452 bool isChar() const { return m_type == CharType; }
e78566595089 initial import
mandel
parents:
diff changeset
453 bool isNamespace() const { return m_type == NamespaceType; }
e78566595089 initial import
mandel
parents:
diff changeset
454 bool isContainer() const { return m_type == ContainerType; }
e78566595089 initial import
mandel
parents:
diff changeset
455 bool isVariant() const { return m_type == VariantType; }
e78566595089 initial import
mandel
parents:
diff changeset
456 bool isJObjectWrapper() const { return m_type == JObjectWrapperType; }
e78566595089 initial import
mandel
parents:
diff changeset
457 bool isArray() const { return m_type == ArrayType; }
e78566595089 initial import
mandel
parents:
diff changeset
458 bool isTemplateArgument() const { return m_type == TemplateArgumentType; }
e78566595089 initial import
mandel
parents:
diff changeset
459 bool isVoid() const { return m_type == VoidType; }
e78566595089 initial import
mandel
parents:
diff changeset
460 bool isThread() const { return m_type == ThreadType; }
e78566595089 initial import
mandel
parents:
diff changeset
461 bool isCustom() const { return m_type == CustomType; }
e78566595089 initial import
mandel
parents:
diff changeset
462 bool isBasicValue() const { return m_type == BasicValueType; }
e78566595089 initial import
mandel
parents:
diff changeset
463 bool isTypeSystem() const { return m_type == TypeSystemType; }
e78566595089 initial import
mandel
parents:
diff changeset
464
e78566595089 initial import
mandel
parents:
diff changeset
465 virtual bool preferredConversion() const { return m_preferred_conversion; }
e78566595089 initial import
mandel
parents:
diff changeset
466 virtual void setPreferredConversion(bool b) { m_preferred_conversion = b; }
e78566595089 initial import
mandel
parents:
diff changeset
467
e78566595089 initial import
mandel
parents:
diff changeset
468 virtual QString javaQualifier() const { return QString(); }
e78566595089 initial import
mandel
parents:
diff changeset
469
e78566595089 initial import
mandel
parents:
diff changeset
470 // The type's name in C++, fully qualified
e78566595089 initial import
mandel
parents:
diff changeset
471 QString name() const { return m_name; }
e78566595089 initial import
mandel
parents:
diff changeset
472
e78566595089 initial import
mandel
parents:
diff changeset
473 uint codeGeneration() const { return m_code_generation; }
e78566595089 initial import
mandel
parents:
diff changeset
474 void setCodeGeneration(uint cg) { m_code_generation = cg; }
e78566595089 initial import
mandel
parents:
diff changeset
475
e78566595089 initial import
mandel
parents:
diff changeset
476 virtual QString qualifiedCppName() const { return m_name; }
e78566595089 initial import
mandel
parents:
diff changeset
477
e78566595089 initial import
mandel
parents:
diff changeset
478 // Its type's name in JNI
e78566595089 initial import
mandel
parents:
diff changeset
479 virtual QString jniName() const { return m_name; }
e78566595089 initial import
mandel
parents:
diff changeset
480
e78566595089 initial import
mandel
parents:
diff changeset
481 // The type's name in TargetLang
e78566595089 initial import
mandel
parents:
diff changeset
482 virtual QString targetLangName() const { return m_name; }
e78566595089 initial import
mandel
parents:
diff changeset
483
e78566595089 initial import
mandel
parents:
diff changeset
484 // The type to lookup when converting to TargetLang
e78566595089 initial import
mandel
parents:
diff changeset
485 virtual QString lookupName() const { return targetLangName(); }
e78566595089 initial import
mandel
parents:
diff changeset
486
e78566595089 initial import
mandel
parents:
diff changeset
487 // The package
e78566595089 initial import
mandel
parents:
diff changeset
488 virtual QString javaPackage() const { return QString(); }
e78566595089 initial import
mandel
parents:
diff changeset
489
e78566595089 initial import
mandel
parents:
diff changeset
490 virtual QString qualifiedTargetLangName() const {
e78566595089 initial import
mandel
parents:
diff changeset
491 // QString pkg = javaPackage();
e78566595089 initial import
mandel
parents:
diff changeset
492 /* if (pkg.isEmpty())*/ return targetLangName();
e78566595089 initial import
mandel
parents:
diff changeset
493 // return pkg + '.' + targetLangName();
e78566595089 initial import
mandel
parents:
diff changeset
494 }
e78566595089 initial import
mandel
parents:
diff changeset
495
e78566595089 initial import
mandel
parents:
diff changeset
496 virtual InterfaceTypeEntry *designatedInterface() const { return 0; }
e78566595089 initial import
mandel
parents:
diff changeset
497
e78566595089 initial import
mandel
parents:
diff changeset
498 void setCustomConstructor(const CustomFunction &func) { m_customConstructor = func; }
e78566595089 initial import
mandel
parents:
diff changeset
499 CustomFunction customConstructor() const { return m_customConstructor; }
e78566595089 initial import
mandel
parents:
diff changeset
500
e78566595089 initial import
mandel
parents:
diff changeset
501 void setCustomDestructor(const CustomFunction &func) { m_customDestructor = func; }
e78566595089 initial import
mandel
parents:
diff changeset
502 CustomFunction customDestructor() const { return m_customDestructor; }
e78566595089 initial import
mandel
parents:
diff changeset
503
e78566595089 initial import
mandel
parents:
diff changeset
504 virtual bool isValue() const { return false; }
e78566595089 initial import
mandel
parents:
diff changeset
505 virtual bool isComplex() const { return false; }
e78566595089 initial import
mandel
parents:
diff changeset
506
e78566595089 initial import
mandel
parents:
diff changeset
507 virtual bool isNativeIdBased() const { return false; }
e78566595089 initial import
mandel
parents:
diff changeset
508
e78566595089 initial import
mandel
parents:
diff changeset
509 // qtd
e78566595089 initial import
mandel
parents:
diff changeset
510 virtual bool isStructInD() const { return false; }
e78566595089 initial import
mandel
parents:
diff changeset
511
e78566595089 initial import
mandel
parents:
diff changeset
512 private:
e78566595089 initial import
mandel
parents:
diff changeset
513 QString m_name;
e78566595089 initial import
mandel
parents:
diff changeset
514 Type m_type;
e78566595089 initial import
mandel
parents:
diff changeset
515 uint m_code_generation;
e78566595089 initial import
mandel
parents:
diff changeset
516 CustomFunction m_customConstructor;
e78566595089 initial import
mandel
parents:
diff changeset
517 CustomFunction m_customDestructor;
e78566595089 initial import
mandel
parents:
diff changeset
518 bool m_preferred_conversion;
e78566595089 initial import
mandel
parents:
diff changeset
519 };
e78566595089 initial import
mandel
parents:
diff changeset
520 typedef QHash<QString, QList<TypeEntry *> > TypeEntryHash;
e78566595089 initial import
mandel
parents:
diff changeset
521 typedef QHash<QString, TypeEntry *> SingleTypeEntryHash;
e78566595089 initial import
mandel
parents:
diff changeset
522
e78566595089 initial import
mandel
parents:
diff changeset
523
e78566595089 initial import
mandel
parents:
diff changeset
524 class TypeSystemTypeEntry : public TypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
525 {
e78566595089 initial import
mandel
parents:
diff changeset
526 public:
e78566595089 initial import
mandel
parents:
diff changeset
527 TypeSystemTypeEntry(const QString &name)
e78566595089 initial import
mandel
parents:
diff changeset
528 : TypeEntry(name, TypeSystemType)
e78566595089 initial import
mandel
parents:
diff changeset
529 {
e78566595089 initial import
mandel
parents:
diff changeset
530 };
e78566595089 initial import
mandel
parents:
diff changeset
531
e78566595089 initial import
mandel
parents:
diff changeset
532 QList<CodeSnip> snips;
e78566595089 initial import
mandel
parents:
diff changeset
533 };
e78566595089 initial import
mandel
parents:
diff changeset
534
e78566595089 initial import
mandel
parents:
diff changeset
535
e78566595089 initial import
mandel
parents:
diff changeset
536 class ThreadTypeEntry : public TypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
537 {
e78566595089 initial import
mandel
parents:
diff changeset
538 public:
e78566595089 initial import
mandel
parents:
diff changeset
539 ThreadTypeEntry() : TypeEntry("QThread", ThreadType) { setCodeGeneration(GenerateNothing); }
e78566595089 initial import
mandel
parents:
diff changeset
540
e78566595089 initial import
mandel
parents:
diff changeset
541 QString jniName() const { return strings_jobject; }
e78566595089 initial import
mandel
parents:
diff changeset
542 QString targetLangName() const { return strings_Thread; }
e78566595089 initial import
mandel
parents:
diff changeset
543 QString javaPackage() const { return strings_java_lang; }
e78566595089 initial import
mandel
parents:
diff changeset
544 };
e78566595089 initial import
mandel
parents:
diff changeset
545
e78566595089 initial import
mandel
parents:
diff changeset
546 class VoidTypeEntry : public TypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
547 {
e78566595089 initial import
mandel
parents:
diff changeset
548 public:
e78566595089 initial import
mandel
parents:
diff changeset
549 VoidTypeEntry() : TypeEntry("void", VoidType) { }
e78566595089 initial import
mandel
parents:
diff changeset
550 };
e78566595089 initial import
mandel
parents:
diff changeset
551
e78566595089 initial import
mandel
parents:
diff changeset
552 class TemplateArgumentEntry : public TypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
553 {
e78566595089 initial import
mandel
parents:
diff changeset
554 public:
e78566595089 initial import
mandel
parents:
diff changeset
555 TemplateArgumentEntry(const QString &name)
e78566595089 initial import
mandel
parents:
diff changeset
556 : TypeEntry(name, TemplateArgumentType), m_ordinal(0)
e78566595089 initial import
mandel
parents:
diff changeset
557 {
e78566595089 initial import
mandel
parents:
diff changeset
558 }
e78566595089 initial import
mandel
parents:
diff changeset
559
e78566595089 initial import
mandel
parents:
diff changeset
560 int ordinal() const { return m_ordinal; }
e78566595089 initial import
mandel
parents:
diff changeset
561 void setOrdinal(int o) { m_ordinal = o; }
e78566595089 initial import
mandel
parents:
diff changeset
562
e78566595089 initial import
mandel
parents:
diff changeset
563 private:
e78566595089 initial import
mandel
parents:
diff changeset
564 int m_ordinal;
e78566595089 initial import
mandel
parents:
diff changeset
565 };
e78566595089 initial import
mandel
parents:
diff changeset
566
e78566595089 initial import
mandel
parents:
diff changeset
567 class ArrayTypeEntry : public TypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
568 {
e78566595089 initial import
mandel
parents:
diff changeset
569 public:
e78566595089 initial import
mandel
parents:
diff changeset
570 ArrayTypeEntry(const TypeEntry *nested_type) : TypeEntry("Array", ArrayType), m_nested_type(nested_type)
e78566595089 initial import
mandel
parents:
diff changeset
571 {
e78566595089 initial import
mandel
parents:
diff changeset
572 Q_ASSERT(m_nested_type);
e78566595089 initial import
mandel
parents:
diff changeset
573 }
e78566595089 initial import
mandel
parents:
diff changeset
574
e78566595089 initial import
mandel
parents:
diff changeset
575 void setNestedTypeEntry(TypeEntry *nested) { m_nested_type = nested; }
e78566595089 initial import
mandel
parents:
diff changeset
576 const TypeEntry *nestedTypeEntry() const { return m_nested_type; }
e78566595089 initial import
mandel
parents:
diff changeset
577
e78566595089 initial import
mandel
parents:
diff changeset
578 QString targetLangName() const { return m_nested_type->targetLangName() + "[]"; }
e78566595089 initial import
mandel
parents:
diff changeset
579 QString jniName() const
e78566595089 initial import
mandel
parents:
diff changeset
580 {
e78566595089 initial import
mandel
parents:
diff changeset
581 if (m_nested_type->isPrimitive())
e78566595089 initial import
mandel
parents:
diff changeset
582 return m_nested_type->jniName() + "Array";
e78566595089 initial import
mandel
parents:
diff changeset
583 else
e78566595089 initial import
mandel
parents:
diff changeset
584 return "jobjectArray";
e78566595089 initial import
mandel
parents:
diff changeset
585 }
e78566595089 initial import
mandel
parents:
diff changeset
586
e78566595089 initial import
mandel
parents:
diff changeset
587 private:
e78566595089 initial import
mandel
parents:
diff changeset
588 const TypeEntry *m_nested_type;
e78566595089 initial import
mandel
parents:
diff changeset
589 };
e78566595089 initial import
mandel
parents:
diff changeset
590
e78566595089 initial import
mandel
parents:
diff changeset
591
e78566595089 initial import
mandel
parents:
diff changeset
592 class PrimitiveTypeEntry : public TypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
593 {
e78566595089 initial import
mandel
parents:
diff changeset
594 public:
e78566595089 initial import
mandel
parents:
diff changeset
595 PrimitiveTypeEntry(const QString &name)
e78566595089 initial import
mandel
parents:
diff changeset
596 : TypeEntry(name, PrimitiveType), m_preferred_conversion(true), m_preferred_java_type(true)
e78566595089 initial import
mandel
parents:
diff changeset
597 {
e78566595089 initial import
mandel
parents:
diff changeset
598 }
e78566595089 initial import
mandel
parents:
diff changeset
599
e78566595089 initial import
mandel
parents:
diff changeset
600 QString targetLangName() const { return m_java_name; }
e78566595089 initial import
mandel
parents:
diff changeset
601 void setTargetLangName(const QString &targetLangName) { m_java_name = targetLangName; }
e78566595089 initial import
mandel
parents:
diff changeset
602
e78566595089 initial import
mandel
parents:
diff changeset
603 QString jniName() const { return m_jni_name; }
e78566595089 initial import
mandel
parents:
diff changeset
604 void setJniName(const QString &jniName) { m_jni_name = jniName; }
e78566595089 initial import
mandel
parents:
diff changeset
605
e78566595089 initial import
mandel
parents:
diff changeset
606 QString javaObjectFullName() const { return javaObjectPackage() + "." + javaObjectName(); }
e78566595089 initial import
mandel
parents:
diff changeset
607 QString javaObjectName() const;
e78566595089 initial import
mandel
parents:
diff changeset
608 QString javaObjectPackage() const { return strings_java_lang; }
e78566595089 initial import
mandel
parents:
diff changeset
609
e78566595089 initial import
mandel
parents:
diff changeset
610 virtual bool preferredConversion() const { return m_preferred_conversion; }
e78566595089 initial import
mandel
parents:
diff changeset
611 virtual void setPreferredConversion(bool b) { m_preferred_conversion = b; }
e78566595089 initial import
mandel
parents:
diff changeset
612
e78566595089 initial import
mandel
parents:
diff changeset
613 virtual bool preferredTargetLangType() const { return m_preferred_java_type; }
e78566595089 initial import
mandel
parents:
diff changeset
614 virtual void setPreferredTargetLangType(bool b) { m_preferred_java_type = b; }
e78566595089 initial import
mandel
parents:
diff changeset
615
e78566595089 initial import
mandel
parents:
diff changeset
616 private:
e78566595089 initial import
mandel
parents:
diff changeset
617 QString m_java_name;
e78566595089 initial import
mandel
parents:
diff changeset
618 QString m_jni_name;
e78566595089 initial import
mandel
parents:
diff changeset
619 uint m_preferred_conversion : 1;
e78566595089 initial import
mandel
parents:
diff changeset
620 uint m_preferred_java_type : 1;
e78566595089 initial import
mandel
parents:
diff changeset
621 };
e78566595089 initial import
mandel
parents:
diff changeset
622
e78566595089 initial import
mandel
parents:
diff changeset
623
e78566595089 initial import
mandel
parents:
diff changeset
624
e78566595089 initial import
mandel
parents:
diff changeset
625
e78566595089 initial import
mandel
parents:
diff changeset
626 struct EnumValueRedirection
e78566595089 initial import
mandel
parents:
diff changeset
627 {
e78566595089 initial import
mandel
parents:
diff changeset
628 EnumValueRedirection(const QString &rej, const QString &us)
e78566595089 initial import
mandel
parents:
diff changeset
629 : rejected(rej),
e78566595089 initial import
mandel
parents:
diff changeset
630 used(us)
e78566595089 initial import
mandel
parents:
diff changeset
631 {
e78566595089 initial import
mandel
parents:
diff changeset
632 }
e78566595089 initial import
mandel
parents:
diff changeset
633 QString rejected;
e78566595089 initial import
mandel
parents:
diff changeset
634 QString used;
e78566595089 initial import
mandel
parents:
diff changeset
635 };
e78566595089 initial import
mandel
parents:
diff changeset
636
e78566595089 initial import
mandel
parents:
diff changeset
637 class EnumTypeEntry : public TypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
638 {
e78566595089 initial import
mandel
parents:
diff changeset
639 public:
e78566595089 initial import
mandel
parents:
diff changeset
640 EnumTypeEntry(const QString &nspace, const QString &enumName)
e78566595089 initial import
mandel
parents:
diff changeset
641 : TypeEntry(nspace.isEmpty() ? enumName : nspace + QLatin1String("::") + enumName,
e78566595089 initial import
mandel
parents:
diff changeset
642 EnumType),
e78566595089 initial import
mandel
parents:
diff changeset
643 m_flags(0),
e78566595089 initial import
mandel
parents:
diff changeset
644 m_extensible(false)
e78566595089 initial import
mandel
parents:
diff changeset
645 {
e78566595089 initial import
mandel
parents:
diff changeset
646 m_qualifier = nspace;
e78566595089 initial import
mandel
parents:
diff changeset
647 m_java_name = enumName;
e78566595089 initial import
mandel
parents:
diff changeset
648 }
e78566595089 initial import
mandel
parents:
diff changeset
649
e78566595089 initial import
mandel
parents:
diff changeset
650 QString javaPackage() const { return m_package_name; }
e78566595089 initial import
mandel
parents:
diff changeset
651 void setTargetLangPackage(const QString &package) { m_package_name = package; }
e78566595089 initial import
mandel
parents:
diff changeset
652
e78566595089 initial import
mandel
parents:
diff changeset
653 QString targetLangName() const { return m_java_name; }
e78566595089 initial import
mandel
parents:
diff changeset
654 QString javaQualifier() const;
e78566595089 initial import
mandel
parents:
diff changeset
655 QString qualifiedTargetLangName() const {
e78566595089 initial import
mandel
parents:
diff changeset
656 return javaQualifier() + '_' + targetLangName();
e78566595089 initial import
mandel
parents:
diff changeset
657 // return targetLangName();
e78566595089 initial import
mandel
parents:
diff changeset
658 }
e78566595089 initial import
mandel
parents:
diff changeset
659
e78566595089 initial import
mandel
parents:
diff changeset
660 QString jniName() const;
e78566595089 initial import
mandel
parents:
diff changeset
661
e78566595089 initial import
mandel
parents:
diff changeset
662 QString qualifier() const { return m_qualifier; }
e78566595089 initial import
mandel
parents:
diff changeset
663 void setQualifier(const QString &q) { m_qualifier = q; }
e78566595089 initial import
mandel
parents:
diff changeset
664
e78566595089 initial import
mandel
parents:
diff changeset
665 virtual bool preferredConversion() const { return false; }
e78566595089 initial import
mandel
parents:
diff changeset
666
e78566595089 initial import
mandel
parents:
diff changeset
667 bool isBoundsChecked() const { return m_lower_bound.isEmpty() && m_upper_bound.isEmpty(); }
e78566595089 initial import
mandel
parents:
diff changeset
668
e78566595089 initial import
mandel
parents:
diff changeset
669 QString upperBound() const { return m_upper_bound; }
e78566595089 initial import
mandel
parents:
diff changeset
670 void setUpperBound(const QString &bound) { m_upper_bound = bound; }
e78566595089 initial import
mandel
parents:
diff changeset
671
e78566595089 initial import
mandel
parents:
diff changeset
672 QString lowerBound() const { return m_lower_bound; }
e78566595089 initial import
mandel
parents:
diff changeset
673 void setLowerBound(const QString &bound) { m_lower_bound = bound; }
e78566595089 initial import
mandel
parents:
diff changeset
674
e78566595089 initial import
mandel
parents:
diff changeset
675 void setFlags(FlagsTypeEntry *flags) { m_flags = flags; }
e78566595089 initial import
mandel
parents:
diff changeset
676 FlagsTypeEntry *flags() const { return m_flags; }
e78566595089 initial import
mandel
parents:
diff changeset
677
e78566595089 initial import
mandel
parents:
diff changeset
678 bool isExtensible() const { return m_extensible; }
e78566595089 initial import
mandel
parents:
diff changeset
679 void setExtensible(bool is) { m_extensible = is; }
e78566595089 initial import
mandel
parents:
diff changeset
680
e78566595089 initial import
mandel
parents:
diff changeset
681 bool isEnumValueRejected(const QString &name) { return m_rejected_enums.contains(name); }
e78566595089 initial import
mandel
parents:
diff changeset
682 void addEnumValueRejection(const QString &name) { m_rejected_enums << name; }
e78566595089 initial import
mandel
parents:
diff changeset
683 QStringList enumValueRejections() const { return m_rejected_enums; }
e78566595089 initial import
mandel
parents:
diff changeset
684
e78566595089 initial import
mandel
parents:
diff changeset
685 void addEnumValueRedirection(const QString &rejected, const QString &usedValue);
e78566595089 initial import
mandel
parents:
diff changeset
686 QString enumValueRedirection(const QString &value) const;
e78566595089 initial import
mandel
parents:
diff changeset
687
e78566595089 initial import
mandel
parents:
diff changeset
688 bool forceInteger() const { return m_force_integer; }
e78566595089 initial import
mandel
parents:
diff changeset
689 void setForceInteger(bool force) { m_force_integer = force; }
e78566595089 initial import
mandel
parents:
diff changeset
690
e78566595089 initial import
mandel
parents:
diff changeset
691 private:
e78566595089 initial import
mandel
parents:
diff changeset
692 QString m_package_name;
e78566595089 initial import
mandel
parents:
diff changeset
693 QString m_qualifier;
e78566595089 initial import
mandel
parents:
diff changeset
694 QString m_java_name;
e78566595089 initial import
mandel
parents:
diff changeset
695
e78566595089 initial import
mandel
parents:
diff changeset
696 QString m_lower_bound;
e78566595089 initial import
mandel
parents:
diff changeset
697 QString m_upper_bound;
e78566595089 initial import
mandel
parents:
diff changeset
698
e78566595089 initial import
mandel
parents:
diff changeset
699 QStringList m_rejected_enums;
e78566595089 initial import
mandel
parents:
diff changeset
700 QList<EnumValueRedirection> m_enum_redirections;
e78566595089 initial import
mandel
parents:
diff changeset
701
e78566595089 initial import
mandel
parents:
diff changeset
702 FlagsTypeEntry *m_flags;
e78566595089 initial import
mandel
parents:
diff changeset
703
e78566595089 initial import
mandel
parents:
diff changeset
704 bool m_extensible;
e78566595089 initial import
mandel
parents:
diff changeset
705 bool m_force_integer;
e78566595089 initial import
mandel
parents:
diff changeset
706 };
e78566595089 initial import
mandel
parents:
diff changeset
707
e78566595089 initial import
mandel
parents:
diff changeset
708 class FlagsTypeEntry : public TypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
709 {
e78566595089 initial import
mandel
parents:
diff changeset
710 public:
e78566595089 initial import
mandel
parents:
diff changeset
711 FlagsTypeEntry(const QString &name) : TypeEntry(name, FlagsType), m_enum(0)
e78566595089 initial import
mandel
parents:
diff changeset
712 {
e78566595089 initial import
mandel
parents:
diff changeset
713 }
e78566595089 initial import
mandel
parents:
diff changeset
714
e78566595089 initial import
mandel
parents:
diff changeset
715 QString qualifiedTargetLangName() const;
e78566595089 initial import
mandel
parents:
diff changeset
716 QString targetLangName() const { return m_java_name; }
e78566595089 initial import
mandel
parents:
diff changeset
717 QString jniName() const;
e78566595089 initial import
mandel
parents:
diff changeset
718 virtual bool preferredConversion() const { return false; }
e78566595089 initial import
mandel
parents:
diff changeset
719
e78566595089 initial import
mandel
parents:
diff changeset
720 QString originalName() const { return m_original_name; }
e78566595089 initial import
mandel
parents:
diff changeset
721 void setOriginalName(const QString &s) { m_original_name = s; }
e78566595089 initial import
mandel
parents:
diff changeset
722
e78566595089 initial import
mandel
parents:
diff changeset
723 QString flagsName() const { return m_java_name; }
e78566595089 initial import
mandel
parents:
diff changeset
724 void setFlagsName(const QString &name) { m_java_name = name; }
e78566595089 initial import
mandel
parents:
diff changeset
725
e78566595089 initial import
mandel
parents:
diff changeset
726 bool forceInteger() const { return m_enum->forceInteger(); }
e78566595089 initial import
mandel
parents:
diff changeset
727
e78566595089 initial import
mandel
parents:
diff changeset
728 EnumTypeEntry *originator() const { return m_enum; }
e78566595089 initial import
mandel
parents:
diff changeset
729 void setOriginator(EnumTypeEntry *e) { m_enum = e; }
e78566595089 initial import
mandel
parents:
diff changeset
730
e78566595089 initial import
mandel
parents:
diff changeset
731 QString javaPackage() const { return m_enum->javaPackage(); }
e78566595089 initial import
mandel
parents:
diff changeset
732 QString javaQualifier() const { return m_enum->javaQualifier(); }
e78566595089 initial import
mandel
parents:
diff changeset
733 QString qualifier() const { return m_enum->qualifier(); }
e78566595089 initial import
mandel
parents:
diff changeset
734
e78566595089 initial import
mandel
parents:
diff changeset
735 private:
e78566595089 initial import
mandel
parents:
diff changeset
736 QString m_original_name;
e78566595089 initial import
mandel
parents:
diff changeset
737 QString m_java_name;
e78566595089 initial import
mandel
parents:
diff changeset
738 EnumTypeEntry *m_enum;
e78566595089 initial import
mandel
parents:
diff changeset
739 };
e78566595089 initial import
mandel
parents:
diff changeset
740
e78566595089 initial import
mandel
parents:
diff changeset
741
e78566595089 initial import
mandel
parents:
diff changeset
742 class ComplexTypeEntry : public TypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
743 {
e78566595089 initial import
mandel
parents:
diff changeset
744 public:
e78566595089 initial import
mandel
parents:
diff changeset
745 enum TypeFlag {
e78566595089 initial import
mandel
parents:
diff changeset
746 ForceAbstract = 0x1,
e78566595089 initial import
mandel
parents:
diff changeset
747 DeleteInMainThread = 0x2,
e78566595089 initial import
mandel
parents:
diff changeset
748 Deprecated = 0x4
e78566595089 initial import
mandel
parents:
diff changeset
749 };
e78566595089 initial import
mandel
parents:
diff changeset
750 typedef QFlags<TypeFlag> TypeFlags;
e78566595089 initial import
mandel
parents:
diff changeset
751
e78566595089 initial import
mandel
parents:
diff changeset
752 ComplexTypeEntry(const QString &name, Type t)
e78566595089 initial import
mandel
parents:
diff changeset
753 : TypeEntry(QString(name).replace("::", "_"), t),
e78566595089 initial import
mandel
parents:
diff changeset
754 m_qualified_cpp_name(name),
e78566595089 initial import
mandel
parents:
diff changeset
755 m_qobject(false),
e78566595089 initial import
mandel
parents:
diff changeset
756 m_polymorphic_base(false),
e78566595089 initial import
mandel
parents:
diff changeset
757 m_generic_class(false),
e78566595089 initial import
mandel
parents:
diff changeset
758 m_type_flags(0),
e78566595089 initial import
mandel
parents:
diff changeset
759 m_isStructInD(false),
e78566595089 initial import
mandel
parents:
diff changeset
760 m_isAbstract(false)
e78566595089 initial import
mandel
parents:
diff changeset
761 {
e78566595089 initial import
mandel
parents:
diff changeset
762 Include inc;
e78566595089 initial import
mandel
parents:
diff changeset
763 inc.name = "QVariant";
e78566595089 initial import
mandel
parents:
diff changeset
764 inc.type = Include::IncludePath;
e78566595089 initial import
mandel
parents:
diff changeset
765
e78566595089 initial import
mandel
parents:
diff changeset
766 addExtraInclude(inc);
e78566595089 initial import
mandel
parents:
diff changeset
767 }
e78566595089 initial import
mandel
parents:
diff changeset
768
e78566595089 initial import
mandel
parents:
diff changeset
769 bool isComplex() const { return true; }
e78566595089 initial import
mandel
parents:
diff changeset
770
e78566595089 initial import
mandel
parents:
diff changeset
771 IncludeList extraIncludes() const { return m_extra_includes; }
e78566595089 initial import
mandel
parents:
diff changeset
772 void setExtraIncludes(const IncludeList &includes) { m_extra_includes = includes; }
e78566595089 initial import
mandel
parents:
diff changeset
773 void addExtraInclude(const Include &include)
e78566595089 initial import
mandel
parents:
diff changeset
774 {
e78566595089 initial import
mandel
parents:
diff changeset
775 if (!m_includes_used.value(include.name, false)) {
e78566595089 initial import
mandel
parents:
diff changeset
776 m_extra_includes << include;
e78566595089 initial import
mandel
parents:
diff changeset
777 m_includes_used[include.name] = true;
e78566595089 initial import
mandel
parents:
diff changeset
778 }
e78566595089 initial import
mandel
parents:
diff changeset
779 }
e78566595089 initial import
mandel
parents:
diff changeset
780
e78566595089 initial import
mandel
parents:
diff changeset
781 ComplexTypeEntry *copy() const
e78566595089 initial import
mandel
parents:
diff changeset
782 {
e78566595089 initial import
mandel
parents:
diff changeset
783 ComplexTypeEntry *centry = new ComplexTypeEntry(name(), type());
e78566595089 initial import
mandel
parents:
diff changeset
784 centry->setInclude(include());
e78566595089 initial import
mandel
parents:
diff changeset
785 centry->setExtraIncludes(extraIncludes());
e78566595089 initial import
mandel
parents:
diff changeset
786 centry->setFunctionModifications(functionModifications());
e78566595089 initial import
mandel
parents:
diff changeset
787 centry->setFieldModifications(fieldModifications());
e78566595089 initial import
mandel
parents:
diff changeset
788 centry->setQObject(isQObject());
e78566595089 initial import
mandel
parents:
diff changeset
789 centry->setDefaultSuperclass(defaultSuperclass());
e78566595089 initial import
mandel
parents:
diff changeset
790 centry->setCodeSnips(codeSnips());
e78566595089 initial import
mandel
parents:
diff changeset
791 centry->setTargetLangPackage(javaPackage());
e78566595089 initial import
mandel
parents:
diff changeset
792
e78566595089 initial import
mandel
parents:
diff changeset
793 return centry;
e78566595089 initial import
mandel
parents:
diff changeset
794 }
e78566595089 initial import
mandel
parents:
diff changeset
795
e78566595089 initial import
mandel
parents:
diff changeset
796 void setLookupName(const QString &name)
e78566595089 initial import
mandel
parents:
diff changeset
797 {
e78566595089 initial import
mandel
parents:
diff changeset
798 m_lookup_name = name;
e78566595089 initial import
mandel
parents:
diff changeset
799 }
e78566595089 initial import
mandel
parents:
diff changeset
800
e78566595089 initial import
mandel
parents:
diff changeset
801 virtual QString lookupName() const
e78566595089 initial import
mandel
parents:
diff changeset
802 {
e78566595089 initial import
mandel
parents:
diff changeset
803 return m_lookup_name.isEmpty() ? targetLangName() : m_lookup_name;
e78566595089 initial import
mandel
parents:
diff changeset
804 }
e78566595089 initial import
mandel
parents:
diff changeset
805
e78566595089 initial import
mandel
parents:
diff changeset
806 QString jniName() const { return strings_jobject; }
e78566595089 initial import
mandel
parents:
diff changeset
807
e78566595089 initial import
mandel
parents:
diff changeset
808
e78566595089 initial import
mandel
parents:
diff changeset
809 Include include() const { return m_include; }
e78566595089 initial import
mandel
parents:
diff changeset
810 void setInclude(const Include &inc) { m_include = inc; }
e78566595089 initial import
mandel
parents:
diff changeset
811
e78566595089 initial import
mandel
parents:
diff changeset
812 void setTypeFlags(TypeFlags flags)
e78566595089 initial import
mandel
parents:
diff changeset
813 {
e78566595089 initial import
mandel
parents:
diff changeset
814 m_type_flags = flags;
e78566595089 initial import
mandel
parents:
diff changeset
815 }
e78566595089 initial import
mandel
parents:
diff changeset
816
e78566595089 initial import
mandel
parents:
diff changeset
817 TypeFlags typeFlags() const
e78566595089 initial import
mandel
parents:
diff changeset
818 {
e78566595089 initial import
mandel
parents:
diff changeset
819 return m_type_flags;
e78566595089 initial import
mandel
parents:
diff changeset
820 }
e78566595089 initial import
mandel
parents:
diff changeset
821
e78566595089 initial import
mandel
parents:
diff changeset
822 CodeSnipList codeSnips() const { return m_code_snips; }
e78566595089 initial import
mandel
parents:
diff changeset
823 void setCodeSnips(const CodeSnipList &codeSnips) { m_code_snips = codeSnips; }
e78566595089 initial import
mandel
parents:
diff changeset
824 void addCodeSnip(const CodeSnip &codeSnip) { m_code_snips << codeSnip; }
e78566595089 initial import
mandel
parents:
diff changeset
825
e78566595089 initial import
mandel
parents:
diff changeset
826 FunctionModificationList functionModifications() const { return m_function_mods; }
e78566595089 initial import
mandel
parents:
diff changeset
827 void setFunctionModifications(const FunctionModificationList &functionModifications) {
e78566595089 initial import
mandel
parents:
diff changeset
828 m_function_mods = functionModifications;
e78566595089 initial import
mandel
parents:
diff changeset
829 }
e78566595089 initial import
mandel
parents:
diff changeset
830 void addFunctionModification(const FunctionModification &functionModification) {
e78566595089 initial import
mandel
parents:
diff changeset
831 m_function_mods << functionModification;
e78566595089 initial import
mandel
parents:
diff changeset
832 }
e78566595089 initial import
mandel
parents:
diff changeset
833 FunctionModificationList functionModifications(const QString &signature) const;
e78566595089 initial import
mandel
parents:
diff changeset
834
e78566595089 initial import
mandel
parents:
diff changeset
835 FieldModification fieldModification(const QString &name) const;
e78566595089 initial import
mandel
parents:
diff changeset
836 void setFieldModifications(const FieldModificationList &mods) { m_field_mods = mods; }
e78566595089 initial import
mandel
parents:
diff changeset
837 FieldModificationList fieldModifications() const { return m_field_mods; }
e78566595089 initial import
mandel
parents:
diff changeset
838
e78566595089 initial import
mandel
parents:
diff changeset
839 QString javaPackage() const { return m_package; }
e78566595089 initial import
mandel
parents:
diff changeset
840 void setTargetLangPackage(const QString &package) { m_package = package; }
e78566595089 initial import
mandel
parents:
diff changeset
841
e78566595089 initial import
mandel
parents:
diff changeset
842 bool isQObject() const { return m_qobject; }
e78566595089 initial import
mandel
parents:
diff changeset
843 void setQObject(bool qobject) { m_qobject = qobject; }
e78566595089 initial import
mandel
parents:
diff changeset
844
e78566595089 initial import
mandel
parents:
diff changeset
845 QString defaultSuperclass() const { return m_default_superclass; }
e78566595089 initial import
mandel
parents:
diff changeset
846 void setDefaultSuperclass(const QString &sc) { m_default_superclass = sc; }
e78566595089 initial import
mandel
parents:
diff changeset
847
e78566595089 initial import
mandel
parents:
diff changeset
848 virtual QString qualifiedCppName() const { return m_qualified_cpp_name; }
e78566595089 initial import
mandel
parents:
diff changeset
849
e78566595089 initial import
mandel
parents:
diff changeset
850
e78566595089 initial import
mandel
parents:
diff changeset
851 void setIsPolymorphicBase(bool on)
e78566595089 initial import
mandel
parents:
diff changeset
852 {
e78566595089 initial import
mandel
parents:
diff changeset
853 m_polymorphic_base = on;
e78566595089 initial import
mandel
parents:
diff changeset
854 }
e78566595089 initial import
mandel
parents:
diff changeset
855 bool isPolymorphicBase() const { return m_polymorphic_base; }
e78566595089 initial import
mandel
parents:
diff changeset
856
e78566595089 initial import
mandel
parents:
diff changeset
857 void setPolymorphicIdValue(const QString &value)
e78566595089 initial import
mandel
parents:
diff changeset
858 {
e78566595089 initial import
mandel
parents:
diff changeset
859 m_polymorphic_id_value = value;
e78566595089 initial import
mandel
parents:
diff changeset
860 }
e78566595089 initial import
mandel
parents:
diff changeset
861 QString polymorphicIdValue() const { return m_polymorphic_id_value; }
e78566595089 initial import
mandel
parents:
diff changeset
862
e78566595089 initial import
mandel
parents:
diff changeset
863 void setExpensePolicy(const ExpensePolicy &policy) { m_expense_policy = policy; }
e78566595089 initial import
mandel
parents:
diff changeset
864 const ExpensePolicy &expensePolicy() const { return m_expense_policy; }
e78566595089 initial import
mandel
parents:
diff changeset
865
e78566595089 initial import
mandel
parents:
diff changeset
866 QString targetType() const { return m_target_type; }
e78566595089 initial import
mandel
parents:
diff changeset
867 void setTargetType(const QString &code) { m_target_type = code; }
e78566595089 initial import
mandel
parents:
diff changeset
868
e78566595089 initial import
mandel
parents:
diff changeset
869 QString targetLangName() const { return m_java_name.isEmpty()
e78566595089 initial import
mandel
parents:
diff changeset
870 ? TypeEntry::targetLangName()
e78566595089 initial import
mandel
parents:
diff changeset
871 : m_java_name;
e78566595089 initial import
mandel
parents:
diff changeset
872 }
e78566595089 initial import
mandel
parents:
diff changeset
873 void setTargetLangName(const QString &name) { m_java_name = name; }
e78566595089 initial import
mandel
parents:
diff changeset
874
e78566595089 initial import
mandel
parents:
diff changeset
875 bool isGenericClass() const { return m_generic_class; }
e78566595089 initial import
mandel
parents:
diff changeset
876 void setGenericClass(bool isGeneric) { m_generic_class = isGeneric; }
e78566595089 initial import
mandel
parents:
diff changeset
877
e78566595089 initial import
mandel
parents:
diff changeset
878 QString injectedImports;
e78566595089 initial import
mandel
parents:
diff changeset
879
e78566595089 initial import
mandel
parents:
diff changeset
880 // qtd
e78566595089 initial import
mandel
parents:
diff changeset
881 bool isStructInD() const { return m_isStructInD; }
e78566595089 initial import
mandel
parents:
diff changeset
882 void setStructInD(bool isStruct) { m_isStructInD = isStruct; }
e78566595089 initial import
mandel
parents:
diff changeset
883
e78566595089 initial import
mandel
parents:
diff changeset
884 bool isAbstract() const { return m_isAbstract; }
e78566595089 initial import
mandel
parents:
diff changeset
885 void setAbstract(bool isAbstract) { m_isAbstract = isAbstract; }
e78566595089 initial import
mandel
parents:
diff changeset
886
42
eb3b5bbffc8f CMake: generator is not running multiple times.
SokoL_SD
parents: 14
diff changeset
887 void setDepends(const QStringList &depends) {m_depends = depends; }
eb3b5bbffc8f CMake: generator is not running multiple times.
SokoL_SD
parents: 14
diff changeset
888 const QStringList &depends() {return m_depends; }
eb3b5bbffc8f CMake: generator is not running multiple times.
SokoL_SD
parents: 14
diff changeset
889
1
e78566595089 initial import
mandel
parents:
diff changeset
890 QString addedTo;
e78566595089 initial import
mandel
parents:
diff changeset
891 QStringList includedClasses;
e78566595089 initial import
mandel
parents:
diff changeset
892
e78566595089 initial import
mandel
parents:
diff changeset
893
e78566595089 initial import
mandel
parents:
diff changeset
894 private:
e78566595089 initial import
mandel
parents:
diff changeset
895 IncludeList m_extra_includes;
e78566595089 initial import
mandel
parents:
diff changeset
896 Include m_include;
e78566595089 initial import
mandel
parents:
diff changeset
897 QHash<QString, bool> m_includes_used;
e78566595089 initial import
mandel
parents:
diff changeset
898 FunctionModificationList m_function_mods;
e78566595089 initial import
mandel
parents:
diff changeset
899 FieldModificationList m_field_mods;
e78566595089 initial import
mandel
parents:
diff changeset
900 CodeSnipList m_code_snips;
e78566595089 initial import
mandel
parents:
diff changeset
901 QString m_package;
e78566595089 initial import
mandel
parents:
diff changeset
902 QString m_default_superclass;
e78566595089 initial import
mandel
parents:
diff changeset
903 QString m_qualified_cpp_name;
e78566595089 initial import
mandel
parents:
diff changeset
904 QString m_java_name;
e78566595089 initial import
mandel
parents:
diff changeset
905
e78566595089 initial import
mandel
parents:
diff changeset
906 uint m_qobject : 1;
e78566595089 initial import
mandel
parents:
diff changeset
907 uint m_polymorphic_base : 1;
e78566595089 initial import
mandel
parents:
diff changeset
908 uint m_generic_class : 1;
e78566595089 initial import
mandel
parents:
diff changeset
909
e78566595089 initial import
mandel
parents:
diff changeset
910 QString m_polymorphic_id_value;
e78566595089 initial import
mandel
parents:
diff changeset
911 QString m_lookup_name;
e78566595089 initial import
mandel
parents:
diff changeset
912 QString m_target_type;
e78566595089 initial import
mandel
parents:
diff changeset
913 ExpensePolicy m_expense_policy;
e78566595089 initial import
mandel
parents:
diff changeset
914 TypeFlags m_type_flags;
e78566595089 initial import
mandel
parents:
diff changeset
915
e78566595089 initial import
mandel
parents:
diff changeset
916 // qtd
e78566595089 initial import
mandel
parents:
diff changeset
917 bool m_isStructInD;
e78566595089 initial import
mandel
parents:
diff changeset
918 bool m_isAbstract;
42
eb3b5bbffc8f CMake: generator is not running multiple times.
SokoL_SD
parents: 14
diff changeset
919 QStringList m_depends;
1
e78566595089 initial import
mandel
parents:
diff changeset
920 };
e78566595089 initial import
mandel
parents:
diff changeset
921
e78566595089 initial import
mandel
parents:
diff changeset
922 class ContainerTypeEntry : public ComplexTypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
923 {
e78566595089 initial import
mandel
parents:
diff changeset
924 public:
e78566595089 initial import
mandel
parents:
diff changeset
925 enum Type {
e78566595089 initial import
mandel
parents:
diff changeset
926 NoContainer,
e78566595089 initial import
mandel
parents:
diff changeset
927 ListContainer,
e78566595089 initial import
mandel
parents:
diff changeset
928 StringListContainer,
e78566595089 initial import
mandel
parents:
diff changeset
929 LinkedListContainer,
e78566595089 initial import
mandel
parents:
diff changeset
930 VectorContainer,
e78566595089 initial import
mandel
parents:
diff changeset
931 StackContainer,
e78566595089 initial import
mandel
parents:
diff changeset
932 QueueContainer,
e78566595089 initial import
mandel
parents:
diff changeset
933 SetContainer,
e78566595089 initial import
mandel
parents:
diff changeset
934 MapContainer,
e78566595089 initial import
mandel
parents:
diff changeset
935 MultiMapContainer,
e78566595089 initial import
mandel
parents:
diff changeset
936 HashContainer,
e78566595089 initial import
mandel
parents:
diff changeset
937 MultiHashContainer,
e78566595089 initial import
mandel
parents:
diff changeset
938 PairContainer,
e78566595089 initial import
mandel
parents:
diff changeset
939 };
e78566595089 initial import
mandel
parents:
diff changeset
940
e78566595089 initial import
mandel
parents:
diff changeset
941 ContainerTypeEntry(const QString &name, Type type)
e78566595089 initial import
mandel
parents:
diff changeset
942 : ComplexTypeEntry(name, ContainerType)
e78566595089 initial import
mandel
parents:
diff changeset
943 {
e78566595089 initial import
mandel
parents:
diff changeset
944 m_type = type;
e78566595089 initial import
mandel
parents:
diff changeset
945 setCodeGeneration(GenerateForSubclass);
e78566595089 initial import
mandel
parents:
diff changeset
946 }
e78566595089 initial import
mandel
parents:
diff changeset
947
e78566595089 initial import
mandel
parents:
diff changeset
948 Type type() const { return m_type; }
e78566595089 initial import
mandel
parents:
diff changeset
949 QString targetLangName() const;
e78566595089 initial import
mandel
parents:
diff changeset
950 QString javaPackage() const;
e78566595089 initial import
mandel
parents:
diff changeset
951 QString qualifiedCppName() const;
e78566595089 initial import
mandel
parents:
diff changeset
952
e78566595089 initial import
mandel
parents:
diff changeset
953 private:
e78566595089 initial import
mandel
parents:
diff changeset
954 Type m_type;
e78566595089 initial import
mandel
parents:
diff changeset
955 };
e78566595089 initial import
mandel
parents:
diff changeset
956
e78566595089 initial import
mandel
parents:
diff changeset
957
e78566595089 initial import
mandel
parents:
diff changeset
958 class NamespaceTypeEntry : public ComplexTypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
959 {
e78566595089 initial import
mandel
parents:
diff changeset
960 public:
e78566595089 initial import
mandel
parents:
diff changeset
961 NamespaceTypeEntry(const QString &name) : ComplexTypeEntry(name, NamespaceType) { }
e78566595089 initial import
mandel
parents:
diff changeset
962 };
e78566595089 initial import
mandel
parents:
diff changeset
963
e78566595089 initial import
mandel
parents:
diff changeset
964
e78566595089 initial import
mandel
parents:
diff changeset
965 class ValueTypeEntry : public ComplexTypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
966 {
e78566595089 initial import
mandel
parents:
diff changeset
967 public:
e78566595089 initial import
mandel
parents:
diff changeset
968 ValueTypeEntry(const QString &name) : ComplexTypeEntry(name, BasicValueType) { }
e78566595089 initial import
mandel
parents:
diff changeset
969
e78566595089 initial import
mandel
parents:
diff changeset
970 bool isValue() const { return true; }
e78566595089 initial import
mandel
parents:
diff changeset
971
e78566595089 initial import
mandel
parents:
diff changeset
972 virtual bool isNativeIdBased() const { return true; }
e78566595089 initial import
mandel
parents:
diff changeset
973
e78566595089 initial import
mandel
parents:
diff changeset
974 protected:
e78566595089 initial import
mandel
parents:
diff changeset
975 ValueTypeEntry(const QString &name, Type t) : ComplexTypeEntry(name, t) { }
e78566595089 initial import
mandel
parents:
diff changeset
976 };
e78566595089 initial import
mandel
parents:
diff changeset
977
e78566595089 initial import
mandel
parents:
diff changeset
978
e78566595089 initial import
mandel
parents:
diff changeset
979 class StringTypeEntry : public ValueTypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
980 {
e78566595089 initial import
mandel
parents:
diff changeset
981 public:
e78566595089 initial import
mandel
parents:
diff changeset
982 StringTypeEntry(const QString &name)
e78566595089 initial import
mandel
parents:
diff changeset
983 : ValueTypeEntry(name, StringType)
e78566595089 initial import
mandel
parents:
diff changeset
984 {
e78566595089 initial import
mandel
parents:
diff changeset
985 setCodeGeneration(GenerateNothing);
e78566595089 initial import
mandel
parents:
diff changeset
986 }
e78566595089 initial import
mandel
parents:
diff changeset
987
e78566595089 initial import
mandel
parents:
diff changeset
988 QString jniName() const { return strings_jobject; }
e78566595089 initial import
mandel
parents:
diff changeset
989 QString targetLangName() const { return strings_String; }
e78566595089 initial import
mandel
parents:
diff changeset
990 QString javaPackage() const { return strings_java_lang; }
e78566595089 initial import
mandel
parents:
diff changeset
991
e78566595089 initial import
mandel
parents:
diff changeset
992 virtual bool isNativeIdBased() const { return false; }
e78566595089 initial import
mandel
parents:
diff changeset
993 };
e78566595089 initial import
mandel
parents:
diff changeset
994
e78566595089 initial import
mandel
parents:
diff changeset
995 class CharTypeEntry : public ValueTypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
996 {
e78566595089 initial import
mandel
parents:
diff changeset
997 public:
e78566595089 initial import
mandel
parents:
diff changeset
998 CharTypeEntry(const QString &name) : ValueTypeEntry(name, CharType)
e78566595089 initial import
mandel
parents:
diff changeset
999 {
e78566595089 initial import
mandel
parents:
diff changeset
1000 setCodeGeneration(GenerateNothing);
e78566595089 initial import
mandel
parents:
diff changeset
1001 }
e78566595089 initial import
mandel
parents:
diff changeset
1002
e78566595089 initial import
mandel
parents:
diff changeset
1003 QString jniName() const { return strings_jchar; }
e78566595089 initial import
mandel
parents:
diff changeset
1004 QString targetLangName() const { return strings_char; }
e78566595089 initial import
mandel
parents:
diff changeset
1005 QString javaPackage() const { return QString(); }
e78566595089 initial import
mandel
parents:
diff changeset
1006
e78566595089 initial import
mandel
parents:
diff changeset
1007 virtual bool isNativeIdBased() const { return false; }
e78566595089 initial import
mandel
parents:
diff changeset
1008 };
e78566595089 initial import
mandel
parents:
diff changeset
1009
e78566595089 initial import
mandel
parents:
diff changeset
1010 class JObjectWrapperTypeEntry: public ValueTypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
1011 {
e78566595089 initial import
mandel
parents:
diff changeset
1012 public:
e78566595089 initial import
mandel
parents:
diff changeset
1013 JObjectWrapperTypeEntry(const QString &name) : ValueTypeEntry(name, JObjectWrapperType) { }
e78566595089 initial import
mandel
parents:
diff changeset
1014
e78566595089 initial import
mandel
parents:
diff changeset
1015 QString jniName() const { return strings_jobject; }
e78566595089 initial import
mandel
parents:
diff changeset
1016 QString targetLangName() const { return strings_Object; }
e78566595089 initial import
mandel
parents:
diff changeset
1017 QString javaPackage() const { return strings_java_lang; }
e78566595089 initial import
mandel
parents:
diff changeset
1018
e78566595089 initial import
mandel
parents:
diff changeset
1019 bool isNativeIdBased() const { return false; }
e78566595089 initial import
mandel
parents:
diff changeset
1020 };
e78566595089 initial import
mandel
parents:
diff changeset
1021
e78566595089 initial import
mandel
parents:
diff changeset
1022 class VariantTypeEntry: public ValueTypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
1023 {
e78566595089 initial import
mandel
parents:
diff changeset
1024 public:
e78566595089 initial import
mandel
parents:
diff changeset
1025 VariantTypeEntry(const QString &name) : ValueTypeEntry(name, VariantType) { }
e78566595089 initial import
mandel
parents:
diff changeset
1026
e78566595089 initial import
mandel
parents:
diff changeset
1027 QString jniName() const { return strings_jobject; }
e78566595089 initial import
mandel
parents:
diff changeset
1028 QString targetLangName() const { return "QVariant"; }
e78566595089 initial import
mandel
parents:
diff changeset
1029 QString javaPackage() const { return "qt.core"; }
e78566595089 initial import
mandel
parents:
diff changeset
1030 virtual bool isNativeIdBased() const { return false; }
e78566595089 initial import
mandel
parents:
diff changeset
1031 };
e78566595089 initial import
mandel
parents:
diff changeset
1032
e78566595089 initial import
mandel
parents:
diff changeset
1033
e78566595089 initial import
mandel
parents:
diff changeset
1034 class InterfaceTypeEntry : public ComplexTypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
1035 {
e78566595089 initial import
mandel
parents:
diff changeset
1036 public:
e78566595089 initial import
mandel
parents:
diff changeset
1037 InterfaceTypeEntry(const QString &name)
e78566595089 initial import
mandel
parents:
diff changeset
1038 : ComplexTypeEntry(name, InterfaceType)
e78566595089 initial import
mandel
parents:
diff changeset
1039 {
e78566595089 initial import
mandel
parents:
diff changeset
1040 }
e78566595089 initial import
mandel
parents:
diff changeset
1041
e78566595089 initial import
mandel
parents:
diff changeset
1042 static QString interfaceName(const QString &name) {
e78566595089 initial import
mandel
parents:
diff changeset
1043 return "I" + name;
e78566595089 initial import
mandel
parents:
diff changeset
1044 }
e78566595089 initial import
mandel
parents:
diff changeset
1045
e78566595089 initial import
mandel
parents:
diff changeset
1046 ObjectTypeEntry *origin() const { return m_origin; }
e78566595089 initial import
mandel
parents:
diff changeset
1047 void setOrigin(ObjectTypeEntry *origin) { m_origin = origin; }
e78566595089 initial import
mandel
parents:
diff changeset
1048
e78566595089 initial import
mandel
parents:
diff changeset
1049 virtual bool isNativeIdBased() const { return true; }
e78566595089 initial import
mandel
parents:
diff changeset
1050 virtual QString qualifiedCppName() const {
e78566595089 initial import
mandel
parents:
diff changeset
1051 return ComplexTypeEntry::qualifiedCppName().right(ComplexTypeEntry::qualifiedCppName().length() - interfaceName("").length());
e78566595089 initial import
mandel
parents:
diff changeset
1052 }
e78566595089 initial import
mandel
parents:
diff changeset
1053
e78566595089 initial import
mandel
parents:
diff changeset
1054 private:
e78566595089 initial import
mandel
parents:
diff changeset
1055 ObjectTypeEntry *m_origin;
e78566595089 initial import
mandel
parents:
diff changeset
1056 };
e78566595089 initial import
mandel
parents:
diff changeset
1057
e78566595089 initial import
mandel
parents:
diff changeset
1058
e78566595089 initial import
mandel
parents:
diff changeset
1059 class ObjectTypeEntry : public ComplexTypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
1060 {
e78566595089 initial import
mandel
parents:
diff changeset
1061 public:
e78566595089 initial import
mandel
parents:
diff changeset
1062 ObjectTypeEntry(const QString &name)
e78566595089 initial import
mandel
parents:
diff changeset
1063 : ComplexTypeEntry(name, ObjectType), m_interface(0)
e78566595089 initial import
mandel
parents:
diff changeset
1064 {
e78566595089 initial import
mandel
parents:
diff changeset
1065 }
e78566595089 initial import
mandel
parents:
diff changeset
1066
e78566595089 initial import
mandel
parents:
diff changeset
1067 InterfaceTypeEntry *designatedInterface() const { return m_interface; }
e78566595089 initial import
mandel
parents:
diff changeset
1068 void setDesignatedInterface(InterfaceTypeEntry *entry) { m_interface = entry; }
e78566595089 initial import
mandel
parents:
diff changeset
1069
e78566595089 initial import
mandel
parents:
diff changeset
1070 virtual bool isNativeIdBased() const { return true; }
e78566595089 initial import
mandel
parents:
diff changeset
1071
e78566595089 initial import
mandel
parents:
diff changeset
1072 private:
e78566595089 initial import
mandel
parents:
diff changeset
1073 InterfaceTypeEntry *m_interface;
e78566595089 initial import
mandel
parents:
diff changeset
1074 };
e78566595089 initial import
mandel
parents:
diff changeset
1075
e78566595089 initial import
mandel
parents:
diff changeset
1076 class CustomTypeEntry : public ComplexTypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
1077 {
e78566595089 initial import
mandel
parents:
diff changeset
1078 public:
e78566595089 initial import
mandel
parents:
diff changeset
1079 CustomTypeEntry(const QString &name) : ComplexTypeEntry(name, CustomType) { }
e78566595089 initial import
mandel
parents:
diff changeset
1080
e78566595089 initial import
mandel
parents:
diff changeset
1081 virtual void generateCppJavaToQt(QTextStream &s,
e78566595089 initial import
mandel
parents:
diff changeset
1082 const AbstractMetaType *java_type,
e78566595089 initial import
mandel
parents:
diff changeset
1083 const QString &env_name,
e78566595089 initial import
mandel
parents:
diff changeset
1084 const QString &qt_name,
e78566595089 initial import
mandel
parents:
diff changeset
1085 const QString &java_name) const = 0;
e78566595089 initial import
mandel
parents:
diff changeset
1086
e78566595089 initial import
mandel
parents:
diff changeset
1087 virtual void generateCppQtToJava(QTextStream &s,
e78566595089 initial import
mandel
parents:
diff changeset
1088 const AbstractMetaType *java_type,
e78566595089 initial import
mandel
parents:
diff changeset
1089 const QString &env_name,
e78566595089 initial import
mandel
parents:
diff changeset
1090 const QString &qt_name,
e78566595089 initial import
mandel
parents:
diff changeset
1091 const QString &java_name) const = 0;
e78566595089 initial import
mandel
parents:
diff changeset
1092 };
e78566595089 initial import
mandel
parents:
diff changeset
1093
e78566595089 initial import
mandel
parents:
diff changeset
1094 struct TypeRejection
e78566595089 initial import
mandel
parents:
diff changeset
1095 {
e78566595089 initial import
mandel
parents:
diff changeset
1096 QString class_name;
e78566595089 initial import
mandel
parents:
diff changeset
1097 QString function_name;
e78566595089 initial import
mandel
parents:
diff changeset
1098 QString field_name;
e78566595089 initial import
mandel
parents:
diff changeset
1099 QString enum_name;
e78566595089 initial import
mandel
parents:
diff changeset
1100 };
e78566595089 initial import
mandel
parents:
diff changeset
1101
e78566595089 initial import
mandel
parents:
diff changeset
1102 class TypeDatabase
e78566595089 initial import
mandel
parents:
diff changeset
1103 {
e78566595089 initial import
mandel
parents:
diff changeset
1104 public:
e78566595089 initial import
mandel
parents:
diff changeset
1105 TypeDatabase();
e78566595089 initial import
mandel
parents:
diff changeset
1106
e78566595089 initial import
mandel
parents:
diff changeset
1107 static TypeDatabase *instance();
e78566595089 initial import
mandel
parents:
diff changeset
1108
e78566595089 initial import
mandel
parents:
diff changeset
1109 QList<Include> extraIncludes(const QString &className);
e78566595089 initial import
mandel
parents:
diff changeset
1110
e78566595089 initial import
mandel
parents:
diff changeset
1111 inline PrimitiveTypeEntry *findPrimitiveType(const QString &name);
e78566595089 initial import
mandel
parents:
diff changeset
1112 inline ComplexTypeEntry *findComplexType(const QString &name);
e78566595089 initial import
mandel
parents:
diff changeset
1113 inline ObjectTypeEntry *findObjectType(const QString &name);
e78566595089 initial import
mandel
parents:
diff changeset
1114 inline NamespaceTypeEntry *findNamespaceType(const QString &name);
e78566595089 initial import
mandel
parents:
diff changeset
1115 ContainerTypeEntry *findContainerType(const QString &name);
e78566595089 initial import
mandel
parents:
diff changeset
1116
e78566595089 initial import
mandel
parents:
diff changeset
1117 TypeEntry *findType(const QString &name) const {
e78566595089 initial import
mandel
parents:
diff changeset
1118 QList<TypeEntry *> entries = findTypes(name);
e78566595089 initial import
mandel
parents:
diff changeset
1119 foreach (TypeEntry *entry, entries) {
e78566595089 initial import
mandel
parents:
diff changeset
1120 if (entry != 0 &&
e78566595089 initial import
mandel
parents:
diff changeset
1121 (!entry->isPrimitive() || static_cast<PrimitiveTypeEntry *>(entry)->preferredTargetLangType())) {
e78566595089 initial import
mandel
parents:
diff changeset
1122 return entry;
e78566595089 initial import
mandel
parents:
diff changeset
1123 }
e78566595089 initial import
mandel
parents:
diff changeset
1124 }
e78566595089 initial import
mandel
parents:
diff changeset
1125 return 0;
e78566595089 initial import
mandel
parents:
diff changeset
1126 }
e78566595089 initial import
mandel
parents:
diff changeset
1127 QList<TypeEntry *> findTypes(const QString &name) const { return m_entries.value(name); }
e78566595089 initial import
mandel
parents:
diff changeset
1128 TypeEntryHash allEntries() { return m_entries; }
e78566595089 initial import
mandel
parents:
diff changeset
1129 SingleTypeEntryHash entries() {
e78566595089 initial import
mandel
parents:
diff changeset
1130 TypeEntryHash entries = allEntries();
e78566595089 initial import
mandel
parents:
diff changeset
1131
e78566595089 initial import
mandel
parents:
diff changeset
1132 SingleTypeEntryHash returned;
e78566595089 initial import
mandel
parents:
diff changeset
1133 QList<QString> keys = entries.keys();
e78566595089 initial import
mandel
parents:
diff changeset
1134
e78566595089 initial import
mandel
parents:
diff changeset
1135 foreach(QString key, keys) {
e78566595089 initial import
mandel
parents:
diff changeset
1136 returned[key] = findType(key);
e78566595089 initial import
mandel
parents:
diff changeset
1137 }
e78566595089 initial import
mandel
parents:
diff changeset
1138
e78566595089 initial import
mandel
parents:
diff changeset
1139 return returned;
e78566595089 initial import
mandel
parents:
diff changeset
1140 }
e78566595089 initial import
mandel
parents:
diff changeset
1141
e78566595089 initial import
mandel
parents:
diff changeset
1142 PrimitiveTypeEntry *findTargetLangPrimitiveType(const QString &java_name);
e78566595089 initial import
mandel
parents:
diff changeset
1143
e78566595089 initial import
mandel
parents:
diff changeset
1144 void addRejection(const QString &class_name, const QString &function_name,
e78566595089 initial import
mandel
parents:
diff changeset
1145 const QString &field_name, const QString &enum_name);
e78566595089 initial import
mandel
parents:
diff changeset
1146 bool isClassRejected(const QString &class_name);
e78566595089 initial import
mandel
parents:
diff changeset
1147 bool isFunctionRejected(const QString &class_name, const QString &function_name);
e78566595089 initial import
mandel
parents:
diff changeset
1148 bool isFieldRejected(const QString &class_name, const QString &field_name);
e78566595089 initial import
mandel
parents:
diff changeset
1149 bool isEnumRejected(const QString &class_name, const QString &enum_name);
e78566595089 initial import
mandel
parents:
diff changeset
1150
e78566595089 initial import
mandel
parents:
diff changeset
1151 void addType(TypeEntry *e) { m_entries[e->qualifiedCppName()].append(e); }
e78566595089 initial import
mandel
parents:
diff changeset
1152
e78566595089 initial import
mandel
parents:
diff changeset
1153 SingleTypeEntryHash flagsEntries() const { return m_flags_entries; }
e78566595089 initial import
mandel
parents:
diff changeset
1154 FlagsTypeEntry *findFlagsType(const QString &name) const;
e78566595089 initial import
mandel
parents:
diff changeset
1155 void addFlagsType(FlagsTypeEntry *fte) { m_flags_entries[fte->originalName()] = fte; }
e78566595089 initial import
mandel
parents:
diff changeset
1156
e78566595089 initial import
mandel
parents:
diff changeset
1157 TemplateEntry *findTemplate(const QString &name) { return m_templates[name]; }
e78566595089 initial import
mandel
parents:
diff changeset
1158 void addTemplate(TemplateEntry *t) { m_templates[t->name()] = t; }
e78566595089 initial import
mandel
parents:
diff changeset
1159
e78566595089 initial import
mandel
parents:
diff changeset
1160 void setIncludeEclipseWarnings(bool on) { m_includeEclipseWarnings = on; }
e78566595089 initial import
mandel
parents:
diff changeset
1161 bool includeEclipseWarnings() const { return m_includeEclipseWarnings; }
e78566595089 initial import
mandel
parents:
diff changeset
1162
e78566595089 initial import
mandel
parents:
diff changeset
1163 void setSuppressWarnings(bool on) { m_suppressWarnings = on; }
e78566595089 initial import
mandel
parents:
diff changeset
1164 void addSuppressedWarning(const QString &s)
e78566595089 initial import
mandel
parents:
diff changeset
1165 {
e78566595089 initial import
mandel
parents:
diff changeset
1166 m_suppressedWarnings.append(s);
e78566595089 initial import
mandel
parents:
diff changeset
1167 }
e78566595089 initial import
mandel
parents:
diff changeset
1168
e78566595089 initial import
mandel
parents:
diff changeset
1169 bool isSuppressedWarning(const QString &s)
e78566595089 initial import
mandel
parents:
diff changeset
1170 {
e78566595089 initial import
mandel
parents:
diff changeset
1171 if (!m_suppressWarnings)
e78566595089 initial import
mandel
parents:
diff changeset
1172 return false;
e78566595089 initial import
mandel
parents:
diff changeset
1173
e78566595089 initial import
mandel
parents:
diff changeset
1174 foreach (const QString &_warning, m_suppressedWarnings) {
e78566595089 initial import
mandel
parents:
diff changeset
1175 QString warning(QString(_warning).replace("\\*", "&place_holder_for_asterisk;"));
e78566595089 initial import
mandel
parents:
diff changeset
1176
e78566595089 initial import
mandel
parents:
diff changeset
1177 QStringList segs = warning.split("*", QString::SkipEmptyParts);
e78566595089 initial import
mandel
parents:
diff changeset
1178 if (segs.size() == 0)
e78566595089 initial import
mandel
parents:
diff changeset
1179 continue ;
e78566595089 initial import
mandel
parents:
diff changeset
1180
e78566595089 initial import
mandel
parents:
diff changeset
1181 int i = 0;
e78566595089 initial import
mandel
parents:
diff changeset
1182 int pos = s.indexOf(QString(segs.at(i++)).replace("&place_holder_for_asterisk;", "*"));
e78566595089 initial import
mandel
parents:
diff changeset
1183 //qDebug() << "s == " << s << ", warning == " << segs;
e78566595089 initial import
mandel
parents:
diff changeset
1184 while (pos != -1) {
e78566595089 initial import
mandel
parents:
diff changeset
1185 if (i == segs.size())
e78566595089 initial import
mandel
parents:
diff changeset
1186 return true;
e78566595089 initial import
mandel
parents:
diff changeset
1187 pos = s.indexOf(QString(segs.at(i++)).replace("&place_holder_for_asterisk;", "*"), pos);
e78566595089 initial import
mandel
parents:
diff changeset
1188 }
e78566595089 initial import
mandel
parents:
diff changeset
1189 }
e78566595089 initial import
mandel
parents:
diff changeset
1190
e78566595089 initial import
mandel
parents:
diff changeset
1191 return false;
e78566595089 initial import
mandel
parents:
diff changeset
1192 }
e78566595089 initial import
mandel
parents:
diff changeset
1193
e78566595089 initial import
mandel
parents:
diff changeset
1194 void setRebuildClasses(const QStringList &cls) { m_rebuild_classes = cls; }
e78566595089 initial import
mandel
parents:
diff changeset
1195
e78566595089 initial import
mandel
parents:
diff changeset
1196 static QString globalNamespaceClassName(const TypeEntry *te);
e78566595089 initial import
mandel
parents:
diff changeset
1197 QString filename() const { return "typesystem.txt"; }
e78566595089 initial import
mandel
parents:
diff changeset
1198
4
0a29ce1ae854 CMake build script.
SokoL_SD
parents: 1
diff changeset
1199 bool parseFile(const QString &filename, const QString &work_dir, bool generate = true);
1
e78566595089 initial import
mandel
parents:
diff changeset
1200
e78566595089 initial import
mandel
parents:
diff changeset
1201 private:
e78566595089 initial import
mandel
parents:
diff changeset
1202 uint m_suppressWarnings : 1;
e78566595089 initial import
mandel
parents:
diff changeset
1203 uint m_includeEclipseWarnings : 1;
e78566595089 initial import
mandel
parents:
diff changeset
1204 uint m_reserved : 30;
e78566595089 initial import
mandel
parents:
diff changeset
1205
e78566595089 initial import
mandel
parents:
diff changeset
1206 TypeEntryHash m_entries;
e78566595089 initial import
mandel
parents:
diff changeset
1207 SingleTypeEntryHash m_flags_entries;
e78566595089 initial import
mandel
parents:
diff changeset
1208 TemplateEntryHash m_templates;
e78566595089 initial import
mandel
parents:
diff changeset
1209 QStringList m_suppressedWarnings;
e78566595089 initial import
mandel
parents:
diff changeset
1210
e78566595089 initial import
mandel
parents:
diff changeset
1211 QList<TypeRejection> m_rejections;
e78566595089 initial import
mandel
parents:
diff changeset
1212 QStringList m_rebuild_classes;
e78566595089 initial import
mandel
parents:
diff changeset
1213 };
e78566595089 initial import
mandel
parents:
diff changeset
1214
e78566595089 initial import
mandel
parents:
diff changeset
1215 inline PrimitiveTypeEntry *TypeDatabase::findPrimitiveType(const QString &name)
e78566595089 initial import
mandel
parents:
diff changeset
1216 {
e78566595089 initial import
mandel
parents:
diff changeset
1217 QList<TypeEntry *> entries = findTypes(name);
e78566595089 initial import
mandel
parents:
diff changeset
1218
e78566595089 initial import
mandel
parents:
diff changeset
1219 foreach (TypeEntry *entry, entries) {
e78566595089 initial import
mandel
parents:
diff changeset
1220 if (entry != 0 && entry->isPrimitive() && static_cast<PrimitiveTypeEntry *>(entry)->preferredTargetLangType())
e78566595089 initial import
mandel
parents:
diff changeset
1221 return static_cast<PrimitiveTypeEntry *>(entry);
e78566595089 initial import
mandel
parents:
diff changeset
1222 }
e78566595089 initial import
mandel
parents:
diff changeset
1223
e78566595089 initial import
mandel
parents:
diff changeset
1224 return 0;
e78566595089 initial import
mandel
parents:
diff changeset
1225 }
e78566595089 initial import
mandel
parents:
diff changeset
1226
e78566595089 initial import
mandel
parents:
diff changeset
1227 inline ComplexTypeEntry *TypeDatabase::findComplexType(const QString &name)
e78566595089 initial import
mandel
parents:
diff changeset
1228 {
e78566595089 initial import
mandel
parents:
diff changeset
1229 TypeEntry *entry = findType(name);
e78566595089 initial import
mandel
parents:
diff changeset
1230 if (entry != 0 && entry->isComplex())
e78566595089 initial import
mandel
parents:
diff changeset
1231 return static_cast<ComplexTypeEntry *>(entry);
e78566595089 initial import
mandel
parents:
diff changeset
1232 else
e78566595089 initial import
mandel
parents:
diff changeset
1233 return 0;
e78566595089 initial import
mandel
parents:
diff changeset
1234 }
e78566595089 initial import
mandel
parents:
diff changeset
1235
e78566595089 initial import
mandel
parents:
diff changeset
1236 inline ObjectTypeEntry *TypeDatabase::findObjectType(const QString &name)
e78566595089 initial import
mandel
parents:
diff changeset
1237 {
e78566595089 initial import
mandel
parents:
diff changeset
1238 TypeEntry *entry = findType(name);
e78566595089 initial import
mandel
parents:
diff changeset
1239 if (entry != 0 && entry->isObject())
e78566595089 initial import
mandel
parents:
diff changeset
1240 return static_cast<ObjectTypeEntry *>(entry);
e78566595089 initial import
mandel
parents:
diff changeset
1241 else
e78566595089 initial import
mandel
parents:
diff changeset
1242 return 0;
e78566595089 initial import
mandel
parents:
diff changeset
1243 }
e78566595089 initial import
mandel
parents:
diff changeset
1244
e78566595089 initial import
mandel
parents:
diff changeset
1245 inline NamespaceTypeEntry *TypeDatabase::findNamespaceType(const QString &name)
e78566595089 initial import
mandel
parents:
diff changeset
1246 {
e78566595089 initial import
mandel
parents:
diff changeset
1247 TypeEntry *entry = findType(name);
e78566595089 initial import
mandel
parents:
diff changeset
1248 if (entry != 0 && entry->isNamespace())
e78566595089 initial import
mandel
parents:
diff changeset
1249 return static_cast<NamespaceTypeEntry *>(entry);
e78566595089 initial import
mandel
parents:
diff changeset
1250 else
e78566595089 initial import
mandel
parents:
diff changeset
1251 return 0;
e78566595089 initial import
mandel
parents:
diff changeset
1252 }
e78566595089 initial import
mandel
parents:
diff changeset
1253
e78566595089 initial import
mandel
parents:
diff changeset
1254 QString fixCppTypeName(const QString &name);
e78566595089 initial import
mandel
parents:
diff changeset
1255
e78566595089 initial import
mandel
parents:
diff changeset
1256 #endif // TYPESYSTEM_H