annotate generator/typesystem.h @ 337:5896535a03cd

moved enums back to classes
author maxter <spambox@d-coding.com>
date Sat, 13 Mar 2010 00:38:42 +0200
parents 04b52676b45f
children beaf4a2974d7
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),
304
04b52676b45f fixed compiling all packages
eldar_ins@eldar-laptop
parents: 298
diff changeset
439 m_preferred_conversion(true),
04b52676b45f fixed compiling all packages
eldar_ins@eldar-laptop
parents: 298
diff changeset
440 m_has_copy_constructor(false)
1
e78566595089 initial import
mandel
parents:
diff changeset
441 {
304
04b52676b45f fixed compiling all packages
eldar_ins@eldar-laptop
parents: 298
diff changeset
442 }
1
e78566595089 initial import
mandel
parents:
diff changeset
443
e78566595089 initial import
mandel
parents:
diff changeset
444 virtual ~TypeEntry() { }
e78566595089 initial import
mandel
parents:
diff changeset
445
e78566595089 initial import
mandel
parents:
diff changeset
446 Type type() const { return m_type; }
e78566595089 initial import
mandel
parents:
diff changeset
447 bool isPrimitive() const { return m_type == PrimitiveType; }
e78566595089 initial import
mandel
parents:
diff changeset
448 bool isEnum() const { return m_type == EnumType; }
e78566595089 initial import
mandel
parents:
diff changeset
449 bool isFlags() const { return m_type == FlagsType; }
e78566595089 initial import
mandel
parents:
diff changeset
450 bool isInterface() const { return m_type == InterfaceType; }
e78566595089 initial import
mandel
parents:
diff changeset
451 bool isObject() const { return m_type == ObjectType; }
e78566595089 initial import
mandel
parents:
diff changeset
452 bool isString() const { return m_type == StringType; }
e78566595089 initial import
mandel
parents:
diff changeset
453 bool isChar() const { return m_type == CharType; }
e78566595089 initial import
mandel
parents:
diff changeset
454 bool isNamespace() const { return m_type == NamespaceType; }
e78566595089 initial import
mandel
parents:
diff changeset
455 bool isContainer() const { return m_type == ContainerType; }
e78566595089 initial import
mandel
parents:
diff changeset
456 bool isVariant() const { return m_type == VariantType; }
e78566595089 initial import
mandel
parents:
diff changeset
457 bool isJObjectWrapper() const { return m_type == JObjectWrapperType; }
e78566595089 initial import
mandel
parents:
diff changeset
458 bool isArray() const { return m_type == ArrayType; }
e78566595089 initial import
mandel
parents:
diff changeset
459 bool isTemplateArgument() const { return m_type == TemplateArgumentType; }
e78566595089 initial import
mandel
parents:
diff changeset
460 bool isVoid() const { return m_type == VoidType; }
e78566595089 initial import
mandel
parents:
diff changeset
461 bool isThread() const { return m_type == ThreadType; }
e78566595089 initial import
mandel
parents:
diff changeset
462 bool isCustom() const { return m_type == CustomType; }
e78566595089 initial import
mandel
parents:
diff changeset
463 bool isBasicValue() const { return m_type == BasicValueType; }
e78566595089 initial import
mandel
parents:
diff changeset
464 bool isTypeSystem() const { return m_type == TypeSystemType; }
e78566595089 initial import
mandel
parents:
diff changeset
465
e78566595089 initial import
mandel
parents:
diff changeset
466 virtual bool preferredConversion() const { return m_preferred_conversion; }
e78566595089 initial import
mandel
parents:
diff changeset
467 virtual void setPreferredConversion(bool b) { m_preferred_conversion = b; }
e78566595089 initial import
mandel
parents:
diff changeset
468
e78566595089 initial import
mandel
parents:
diff changeset
469 virtual QString javaQualifier() const { return QString(); }
e78566595089 initial import
mandel
parents:
diff changeset
470
e78566595089 initial import
mandel
parents:
diff changeset
471 // The type's name in C++, fully qualified
e78566595089 initial import
mandel
parents:
diff changeset
472 QString name() const { return m_name; }
e78566595089 initial import
mandel
parents:
diff changeset
473
e78566595089 initial import
mandel
parents:
diff changeset
474 uint codeGeneration() const { return m_code_generation; }
e78566595089 initial import
mandel
parents:
diff changeset
475 void setCodeGeneration(uint cg) { m_code_generation = cg; }
e78566595089 initial import
mandel
parents:
diff changeset
476
e78566595089 initial import
mandel
parents:
diff changeset
477 virtual QString qualifiedCppName() const { return m_name; }
e78566595089 initial import
mandel
parents:
diff changeset
478
e78566595089 initial import
mandel
parents:
diff changeset
479 // Its type's name in JNI
e78566595089 initial import
mandel
parents:
diff changeset
480 virtual QString jniName() const { return m_name; }
e78566595089 initial import
mandel
parents:
diff changeset
481
e78566595089 initial import
mandel
parents:
diff changeset
482 // The type's name in TargetLang
e78566595089 initial import
mandel
parents:
diff changeset
483 virtual QString targetLangName() const { return m_name; }
e78566595089 initial import
mandel
parents:
diff changeset
484
e78566595089 initial import
mandel
parents:
diff changeset
485 // The type to lookup when converting to TargetLang
e78566595089 initial import
mandel
parents:
diff changeset
486 virtual QString lookupName() const { return targetLangName(); }
e78566595089 initial import
mandel
parents:
diff changeset
487
e78566595089 initial import
mandel
parents:
diff changeset
488 // The package
e78566595089 initial import
mandel
parents:
diff changeset
489 virtual QString javaPackage() const { return QString(); }
e78566595089 initial import
mandel
parents:
diff changeset
490
e78566595089 initial import
mandel
parents:
diff changeset
491 virtual QString qualifiedTargetLangName() const {
e78566595089 initial import
mandel
parents:
diff changeset
492 // QString pkg = javaPackage();
e78566595089 initial import
mandel
parents:
diff changeset
493 /* if (pkg.isEmpty())*/ return targetLangName();
e78566595089 initial import
mandel
parents:
diff changeset
494 // return pkg + '.' + targetLangName();
e78566595089 initial import
mandel
parents:
diff changeset
495 }
e78566595089 initial import
mandel
parents:
diff changeset
496
e78566595089 initial import
mandel
parents:
diff changeset
497 virtual InterfaceTypeEntry *designatedInterface() const { return 0; }
e78566595089 initial import
mandel
parents:
diff changeset
498
e78566595089 initial import
mandel
parents:
diff changeset
499 void setCustomConstructor(const CustomFunction &func) { m_customConstructor = func; }
e78566595089 initial import
mandel
parents:
diff changeset
500 CustomFunction customConstructor() const { return m_customConstructor; }
e78566595089 initial import
mandel
parents:
diff changeset
501
e78566595089 initial import
mandel
parents:
diff changeset
502 void setCustomDestructor(const CustomFunction &func) { m_customDestructor = func; }
e78566595089 initial import
mandel
parents:
diff changeset
503 CustomFunction customDestructor() const { return m_customDestructor; }
e78566595089 initial import
mandel
parents:
diff changeset
504
e78566595089 initial import
mandel
parents:
diff changeset
505 virtual bool isValue() const { return false; }
e78566595089 initial import
mandel
parents:
diff changeset
506 virtual bool isComplex() const { return false; }
e78566595089 initial import
mandel
parents:
diff changeset
507
e78566595089 initial import
mandel
parents:
diff changeset
508 virtual bool isNativeIdBased() const { return false; }
e78566595089 initial import
mandel
parents:
diff changeset
509
e78566595089 initial import
mandel
parents:
diff changeset
510 // qtd
e78566595089 initial import
mandel
parents:
diff changeset
511 virtual bool isStructInD() const { return false; }
304
04b52676b45f fixed compiling all packages
eldar_ins@eldar-laptop
parents: 298
diff changeset
512 bool hasPrivateCopyConstructor() const { return m_has_copy_constructor; }
04b52676b45f fixed compiling all packages
eldar_ins@eldar-laptop
parents: 298
diff changeset
513 void setHasPrivateCopyConstructor(bool has_copy_constructor) { m_has_copy_constructor = has_copy_constructor; }
1
e78566595089 initial import
mandel
parents:
diff changeset
514
e78566595089 initial import
mandel
parents:
diff changeset
515 private:
e78566595089 initial import
mandel
parents:
diff changeset
516 QString m_name;
e78566595089 initial import
mandel
parents:
diff changeset
517 Type m_type;
e78566595089 initial import
mandel
parents:
diff changeset
518 uint m_code_generation;
e78566595089 initial import
mandel
parents:
diff changeset
519 CustomFunction m_customConstructor;
e78566595089 initial import
mandel
parents:
diff changeset
520 CustomFunction m_customDestructor;
e78566595089 initial import
mandel
parents:
diff changeset
521 bool m_preferred_conversion;
304
04b52676b45f fixed compiling all packages
eldar_ins@eldar-laptop
parents: 298
diff changeset
522 bool m_has_copy_constructor;
1
e78566595089 initial import
mandel
parents:
diff changeset
523 };
e78566595089 initial import
mandel
parents:
diff changeset
524 typedef QHash<QString, QList<TypeEntry *> > TypeEntryHash;
e78566595089 initial import
mandel
parents:
diff changeset
525 typedef QHash<QString, TypeEntry *> SingleTypeEntryHash;
e78566595089 initial import
mandel
parents:
diff changeset
526
e78566595089 initial import
mandel
parents:
diff changeset
527
e78566595089 initial import
mandel
parents:
diff changeset
528 class TypeSystemTypeEntry : public TypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
529 {
e78566595089 initial import
mandel
parents:
diff changeset
530 public:
e78566595089 initial import
mandel
parents:
diff changeset
531 TypeSystemTypeEntry(const QString &name)
e78566595089 initial import
mandel
parents:
diff changeset
532 : TypeEntry(name, TypeSystemType)
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 QList<CodeSnip> snips;
e78566595089 initial import
mandel
parents:
diff changeset
537 };
e78566595089 initial import
mandel
parents:
diff changeset
538
e78566595089 initial import
mandel
parents:
diff changeset
539
e78566595089 initial import
mandel
parents:
diff changeset
540 class ThreadTypeEntry : public TypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
541 {
e78566595089 initial import
mandel
parents:
diff changeset
542 public:
e78566595089 initial import
mandel
parents:
diff changeset
543 ThreadTypeEntry() : TypeEntry("QThread", ThreadType) { setCodeGeneration(GenerateNothing); }
e78566595089 initial import
mandel
parents:
diff changeset
544
e78566595089 initial import
mandel
parents:
diff changeset
545 QString jniName() const { return strings_jobject; }
e78566595089 initial import
mandel
parents:
diff changeset
546 QString targetLangName() const { return strings_Thread; }
e78566595089 initial import
mandel
parents:
diff changeset
547 QString javaPackage() const { return strings_java_lang; }
e78566595089 initial import
mandel
parents:
diff changeset
548 };
e78566595089 initial import
mandel
parents:
diff changeset
549
e78566595089 initial import
mandel
parents:
diff changeset
550 class VoidTypeEntry : public TypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
551 {
e78566595089 initial import
mandel
parents:
diff changeset
552 public:
e78566595089 initial import
mandel
parents:
diff changeset
553 VoidTypeEntry() : TypeEntry("void", VoidType) { }
e78566595089 initial import
mandel
parents:
diff changeset
554 };
e78566595089 initial import
mandel
parents:
diff changeset
555
e78566595089 initial import
mandel
parents:
diff changeset
556 class TemplateArgumentEntry : public TypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
557 {
e78566595089 initial import
mandel
parents:
diff changeset
558 public:
e78566595089 initial import
mandel
parents:
diff changeset
559 TemplateArgumentEntry(const QString &name)
e78566595089 initial import
mandel
parents:
diff changeset
560 : TypeEntry(name, TemplateArgumentType), m_ordinal(0)
e78566595089 initial import
mandel
parents:
diff changeset
561 {
e78566595089 initial import
mandel
parents:
diff changeset
562 }
e78566595089 initial import
mandel
parents:
diff changeset
563
e78566595089 initial import
mandel
parents:
diff changeset
564 int ordinal() const { return m_ordinal; }
e78566595089 initial import
mandel
parents:
diff changeset
565 void setOrdinal(int o) { m_ordinal = o; }
e78566595089 initial import
mandel
parents:
diff changeset
566
e78566595089 initial import
mandel
parents:
diff changeset
567 private:
e78566595089 initial import
mandel
parents:
diff changeset
568 int m_ordinal;
e78566595089 initial import
mandel
parents:
diff changeset
569 };
e78566595089 initial import
mandel
parents:
diff changeset
570
e78566595089 initial import
mandel
parents:
diff changeset
571 class ArrayTypeEntry : public TypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
572 {
e78566595089 initial import
mandel
parents:
diff changeset
573 public:
e78566595089 initial import
mandel
parents:
diff changeset
574 ArrayTypeEntry(const TypeEntry *nested_type) : TypeEntry("Array", ArrayType), m_nested_type(nested_type)
e78566595089 initial import
mandel
parents:
diff changeset
575 {
e78566595089 initial import
mandel
parents:
diff changeset
576 Q_ASSERT(m_nested_type);
e78566595089 initial import
mandel
parents:
diff changeset
577 }
e78566595089 initial import
mandel
parents:
diff changeset
578
e78566595089 initial import
mandel
parents:
diff changeset
579 void setNestedTypeEntry(TypeEntry *nested) { m_nested_type = nested; }
e78566595089 initial import
mandel
parents:
diff changeset
580 const TypeEntry *nestedTypeEntry() const { return m_nested_type; }
e78566595089 initial import
mandel
parents:
diff changeset
581
e78566595089 initial import
mandel
parents:
diff changeset
582 QString targetLangName() const { return m_nested_type->targetLangName() + "[]"; }
e78566595089 initial import
mandel
parents:
diff changeset
583 QString jniName() const
e78566595089 initial import
mandel
parents:
diff changeset
584 {
e78566595089 initial import
mandel
parents:
diff changeset
585 if (m_nested_type->isPrimitive())
e78566595089 initial import
mandel
parents:
diff changeset
586 return m_nested_type->jniName() + "Array";
e78566595089 initial import
mandel
parents:
diff changeset
587 else
e78566595089 initial import
mandel
parents:
diff changeset
588 return "jobjectArray";
e78566595089 initial import
mandel
parents:
diff changeset
589 }
e78566595089 initial import
mandel
parents:
diff changeset
590
e78566595089 initial import
mandel
parents:
diff changeset
591 private:
e78566595089 initial import
mandel
parents:
diff changeset
592 const TypeEntry *m_nested_type;
e78566595089 initial import
mandel
parents:
diff changeset
593 };
e78566595089 initial import
mandel
parents:
diff changeset
594
e78566595089 initial import
mandel
parents:
diff changeset
595
e78566595089 initial import
mandel
parents:
diff changeset
596 class PrimitiveTypeEntry : public TypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
597 {
e78566595089 initial import
mandel
parents:
diff changeset
598 public:
e78566595089 initial import
mandel
parents:
diff changeset
599 PrimitiveTypeEntry(const QString &name)
e78566595089 initial import
mandel
parents:
diff changeset
600 : TypeEntry(name, PrimitiveType), m_preferred_conversion(true), m_preferred_java_type(true)
e78566595089 initial import
mandel
parents:
diff changeset
601 {
e78566595089 initial import
mandel
parents:
diff changeset
602 }
e78566595089 initial import
mandel
parents:
diff changeset
603
e78566595089 initial import
mandel
parents:
diff changeset
604 QString targetLangName() const { return m_java_name; }
e78566595089 initial import
mandel
parents:
diff changeset
605 void setTargetLangName(const QString &targetLangName) { m_java_name = targetLangName; }
e78566595089 initial import
mandel
parents:
diff changeset
606
e78566595089 initial import
mandel
parents:
diff changeset
607 QString jniName() const { return m_jni_name; }
e78566595089 initial import
mandel
parents:
diff changeset
608 void setJniName(const QString &jniName) { m_jni_name = jniName; }
e78566595089 initial import
mandel
parents:
diff changeset
609
e78566595089 initial import
mandel
parents:
diff changeset
610 QString javaObjectFullName() const { return javaObjectPackage() + "." + javaObjectName(); }
e78566595089 initial import
mandel
parents:
diff changeset
611 QString javaObjectName() const;
e78566595089 initial import
mandel
parents:
diff changeset
612 QString javaObjectPackage() const { return strings_java_lang; }
e78566595089 initial import
mandel
parents:
diff changeset
613
e78566595089 initial import
mandel
parents:
diff changeset
614 virtual bool preferredConversion() const { return m_preferred_conversion; }
e78566595089 initial import
mandel
parents:
diff changeset
615 virtual void setPreferredConversion(bool b) { m_preferred_conversion = b; }
e78566595089 initial import
mandel
parents:
diff changeset
616
e78566595089 initial import
mandel
parents:
diff changeset
617 virtual bool preferredTargetLangType() const { return m_preferred_java_type; }
e78566595089 initial import
mandel
parents:
diff changeset
618 virtual void setPreferredTargetLangType(bool b) { m_preferred_java_type = b; }
e78566595089 initial import
mandel
parents:
diff changeset
619
e78566595089 initial import
mandel
parents:
diff changeset
620 private:
e78566595089 initial import
mandel
parents:
diff changeset
621 QString m_java_name;
e78566595089 initial import
mandel
parents:
diff changeset
622 QString m_jni_name;
e78566595089 initial import
mandel
parents:
diff changeset
623 uint m_preferred_conversion : 1;
e78566595089 initial import
mandel
parents:
diff changeset
624 uint m_preferred_java_type : 1;
e78566595089 initial import
mandel
parents:
diff changeset
625 };
e78566595089 initial import
mandel
parents:
diff changeset
626
e78566595089 initial import
mandel
parents:
diff changeset
627
e78566595089 initial import
mandel
parents:
diff changeset
628
e78566595089 initial import
mandel
parents:
diff changeset
629
e78566595089 initial import
mandel
parents:
diff changeset
630 struct EnumValueRedirection
e78566595089 initial import
mandel
parents:
diff changeset
631 {
e78566595089 initial import
mandel
parents:
diff changeset
632 EnumValueRedirection(const QString &rej, const QString &us)
e78566595089 initial import
mandel
parents:
diff changeset
633 : rejected(rej),
e78566595089 initial import
mandel
parents:
diff changeset
634 used(us)
e78566595089 initial import
mandel
parents:
diff changeset
635 {
e78566595089 initial import
mandel
parents:
diff changeset
636 }
e78566595089 initial import
mandel
parents:
diff changeset
637 QString rejected;
e78566595089 initial import
mandel
parents:
diff changeset
638 QString used;
e78566595089 initial import
mandel
parents:
diff changeset
639 };
e78566595089 initial import
mandel
parents:
diff changeset
640
e78566595089 initial import
mandel
parents:
diff changeset
641 class EnumTypeEntry : public TypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
642 {
e78566595089 initial import
mandel
parents:
diff changeset
643 public:
e78566595089 initial import
mandel
parents:
diff changeset
644 EnumTypeEntry(const QString &nspace, const QString &enumName)
e78566595089 initial import
mandel
parents:
diff changeset
645 : TypeEntry(nspace.isEmpty() ? enumName : nspace + QLatin1String("::") + enumName,
e78566595089 initial import
mandel
parents:
diff changeset
646 EnumType),
e78566595089 initial import
mandel
parents:
diff changeset
647 m_flags(0),
e78566595089 initial import
mandel
parents:
diff changeset
648 m_extensible(false)
e78566595089 initial import
mandel
parents:
diff changeset
649 {
e78566595089 initial import
mandel
parents:
diff changeset
650 m_qualifier = nspace;
e78566595089 initial import
mandel
parents:
diff changeset
651 m_java_name = enumName;
e78566595089 initial import
mandel
parents:
diff changeset
652 }
e78566595089 initial import
mandel
parents:
diff changeset
653
e78566595089 initial import
mandel
parents:
diff changeset
654 QString javaPackage() const { return m_package_name; }
e78566595089 initial import
mandel
parents:
diff changeset
655 void setTargetLangPackage(const QString &package) { m_package_name = package; }
e78566595089 initial import
mandel
parents:
diff changeset
656
e78566595089 initial import
mandel
parents:
diff changeset
657 QString targetLangName() const { return m_java_name; }
e78566595089 initial import
mandel
parents:
diff changeset
658 QString javaQualifier() const;
e78566595089 initial import
mandel
parents:
diff changeset
659 QString qualifiedTargetLangName() const {
337
5896535a03cd moved enums back to classes
maxter <spambox@d-coding.com>
parents: 304
diff changeset
660 return javaQualifier() + '.' + targetLangName();
5896535a03cd moved enums back to classes
maxter <spambox@d-coding.com>
parents: 304
diff changeset
661 //return targetLangName();
1
e78566595089 initial import
mandel
parents:
diff changeset
662 }
e78566595089 initial import
mandel
parents:
diff changeset
663
e78566595089 initial import
mandel
parents:
diff changeset
664 QString jniName() const;
e78566595089 initial import
mandel
parents:
diff changeset
665
e78566595089 initial import
mandel
parents:
diff changeset
666 QString qualifier() const { return m_qualifier; }
e78566595089 initial import
mandel
parents:
diff changeset
667 void setQualifier(const QString &q) { m_qualifier = q; }
e78566595089 initial import
mandel
parents:
diff changeset
668
e78566595089 initial import
mandel
parents:
diff changeset
669 virtual bool preferredConversion() const { return false; }
e78566595089 initial import
mandel
parents:
diff changeset
670
e78566595089 initial import
mandel
parents:
diff changeset
671 bool isBoundsChecked() const { return m_lower_bound.isEmpty() && m_upper_bound.isEmpty(); }
e78566595089 initial import
mandel
parents:
diff changeset
672
e78566595089 initial import
mandel
parents:
diff changeset
673 QString upperBound() const { return m_upper_bound; }
e78566595089 initial import
mandel
parents:
diff changeset
674 void setUpperBound(const QString &bound) { m_upper_bound = bound; }
e78566595089 initial import
mandel
parents:
diff changeset
675
e78566595089 initial import
mandel
parents:
diff changeset
676 QString lowerBound() const { return m_lower_bound; }
e78566595089 initial import
mandel
parents:
diff changeset
677 void setLowerBound(const QString &bound) { m_lower_bound = bound; }
e78566595089 initial import
mandel
parents:
diff changeset
678
e78566595089 initial import
mandel
parents:
diff changeset
679 void setFlags(FlagsTypeEntry *flags) { m_flags = flags; }
e78566595089 initial import
mandel
parents:
diff changeset
680 FlagsTypeEntry *flags() const { return m_flags; }
e78566595089 initial import
mandel
parents:
diff changeset
681
e78566595089 initial import
mandel
parents:
diff changeset
682 bool isExtensible() const { return m_extensible; }
e78566595089 initial import
mandel
parents:
diff changeset
683 void setExtensible(bool is) { m_extensible = is; }
e78566595089 initial import
mandel
parents:
diff changeset
684
e78566595089 initial import
mandel
parents:
diff changeset
685 bool isEnumValueRejected(const QString &name) { return m_rejected_enums.contains(name); }
e78566595089 initial import
mandel
parents:
diff changeset
686 void addEnumValueRejection(const QString &name) { m_rejected_enums << name; }
e78566595089 initial import
mandel
parents:
diff changeset
687 QStringList enumValueRejections() const { return m_rejected_enums; }
e78566595089 initial import
mandel
parents:
diff changeset
688
e78566595089 initial import
mandel
parents:
diff changeset
689 void addEnumValueRedirection(const QString &rejected, const QString &usedValue);
e78566595089 initial import
mandel
parents:
diff changeset
690 QString enumValueRedirection(const QString &value) const;
e78566595089 initial import
mandel
parents:
diff changeset
691
e78566595089 initial import
mandel
parents:
diff changeset
692 bool forceInteger() const { return m_force_integer; }
e78566595089 initial import
mandel
parents:
diff changeset
693 void setForceInteger(bool force) { m_force_integer = force; }
e78566595089 initial import
mandel
parents:
diff changeset
694
e78566595089 initial import
mandel
parents:
diff changeset
695 private:
e78566595089 initial import
mandel
parents:
diff changeset
696 QString m_package_name;
e78566595089 initial import
mandel
parents:
diff changeset
697 QString m_qualifier;
e78566595089 initial import
mandel
parents:
diff changeset
698 QString m_java_name;
e78566595089 initial import
mandel
parents:
diff changeset
699
e78566595089 initial import
mandel
parents:
diff changeset
700 QString m_lower_bound;
e78566595089 initial import
mandel
parents:
diff changeset
701 QString m_upper_bound;
e78566595089 initial import
mandel
parents:
diff changeset
702
e78566595089 initial import
mandel
parents:
diff changeset
703 QStringList m_rejected_enums;
e78566595089 initial import
mandel
parents:
diff changeset
704 QList<EnumValueRedirection> m_enum_redirections;
e78566595089 initial import
mandel
parents:
diff changeset
705
e78566595089 initial import
mandel
parents:
diff changeset
706 FlagsTypeEntry *m_flags;
e78566595089 initial import
mandel
parents:
diff changeset
707
e78566595089 initial import
mandel
parents:
diff changeset
708 bool m_extensible;
e78566595089 initial import
mandel
parents:
diff changeset
709 bool m_force_integer;
e78566595089 initial import
mandel
parents:
diff changeset
710 };
e78566595089 initial import
mandel
parents:
diff changeset
711
e78566595089 initial import
mandel
parents:
diff changeset
712 class FlagsTypeEntry : public TypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
713 {
e78566595089 initial import
mandel
parents:
diff changeset
714 public:
e78566595089 initial import
mandel
parents:
diff changeset
715 FlagsTypeEntry(const QString &name) : TypeEntry(name, FlagsType), m_enum(0)
e78566595089 initial import
mandel
parents:
diff changeset
716 {
e78566595089 initial import
mandel
parents:
diff changeset
717 }
e78566595089 initial import
mandel
parents:
diff changeset
718
e78566595089 initial import
mandel
parents:
diff changeset
719 QString qualifiedTargetLangName() const;
e78566595089 initial import
mandel
parents:
diff changeset
720 QString targetLangName() const { return m_java_name; }
e78566595089 initial import
mandel
parents:
diff changeset
721 QString jniName() const;
e78566595089 initial import
mandel
parents:
diff changeset
722 virtual bool preferredConversion() const { return false; }
e78566595089 initial import
mandel
parents:
diff changeset
723
e78566595089 initial import
mandel
parents:
diff changeset
724 QString originalName() const { return m_original_name; }
e78566595089 initial import
mandel
parents:
diff changeset
725 void setOriginalName(const QString &s) { m_original_name = s; }
e78566595089 initial import
mandel
parents:
diff changeset
726
e78566595089 initial import
mandel
parents:
diff changeset
727 QString flagsName() const { return m_java_name; }
e78566595089 initial import
mandel
parents:
diff changeset
728 void setFlagsName(const QString &name) { m_java_name = name; }
e78566595089 initial import
mandel
parents:
diff changeset
729
e78566595089 initial import
mandel
parents:
diff changeset
730 bool forceInteger() const { return m_enum->forceInteger(); }
e78566595089 initial import
mandel
parents:
diff changeset
731
e78566595089 initial import
mandel
parents:
diff changeset
732 EnumTypeEntry *originator() const { return m_enum; }
e78566595089 initial import
mandel
parents:
diff changeset
733 void setOriginator(EnumTypeEntry *e) { m_enum = e; }
e78566595089 initial import
mandel
parents:
diff changeset
734
e78566595089 initial import
mandel
parents:
diff changeset
735 QString javaPackage() const { return m_enum->javaPackage(); }
e78566595089 initial import
mandel
parents:
diff changeset
736 QString javaQualifier() const { return m_enum->javaQualifier(); }
e78566595089 initial import
mandel
parents:
diff changeset
737 QString qualifier() const { return m_enum->qualifier(); }
e78566595089 initial import
mandel
parents:
diff changeset
738
e78566595089 initial import
mandel
parents:
diff changeset
739 private:
e78566595089 initial import
mandel
parents:
diff changeset
740 QString m_original_name;
e78566595089 initial import
mandel
parents:
diff changeset
741 QString m_java_name;
e78566595089 initial import
mandel
parents:
diff changeset
742 EnumTypeEntry *m_enum;
e78566595089 initial import
mandel
parents:
diff changeset
743 };
e78566595089 initial import
mandel
parents:
diff changeset
744
e78566595089 initial import
mandel
parents:
diff changeset
745
e78566595089 initial import
mandel
parents:
diff changeset
746 class ComplexTypeEntry : public TypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
747 {
e78566595089 initial import
mandel
parents:
diff changeset
748 public:
e78566595089 initial import
mandel
parents:
diff changeset
749 enum TypeFlag {
e78566595089 initial import
mandel
parents:
diff changeset
750 ForceAbstract = 0x1,
e78566595089 initial import
mandel
parents:
diff changeset
751 DeleteInMainThread = 0x2,
e78566595089 initial import
mandel
parents:
diff changeset
752 Deprecated = 0x4
e78566595089 initial import
mandel
parents:
diff changeset
753 };
e78566595089 initial import
mandel
parents:
diff changeset
754 typedef QFlags<TypeFlag> TypeFlags;
e78566595089 initial import
mandel
parents:
diff changeset
755
e78566595089 initial import
mandel
parents:
diff changeset
756 ComplexTypeEntry(const QString &name, Type t)
e78566595089 initial import
mandel
parents:
diff changeset
757 : TypeEntry(QString(name).replace("::", "_"), t),
e78566595089 initial import
mandel
parents:
diff changeset
758 m_qualified_cpp_name(name),
e78566595089 initial import
mandel
parents:
diff changeset
759 m_qobject(false),
e78566595089 initial import
mandel
parents:
diff changeset
760 m_polymorphic_base(false),
e78566595089 initial import
mandel
parents:
diff changeset
761 m_generic_class(false),
e78566595089 initial import
mandel
parents:
diff changeset
762 m_type_flags(0),
e78566595089 initial import
mandel
parents:
diff changeset
763 m_isStructInD(false),
e78566595089 initial import
mandel
parents:
diff changeset
764 m_isAbstract(false)
e78566595089 initial import
mandel
parents:
diff changeset
765 {
e78566595089 initial import
mandel
parents:
diff changeset
766 Include inc;
e78566595089 initial import
mandel
parents:
diff changeset
767 inc.name = "QVariant";
e78566595089 initial import
mandel
parents:
diff changeset
768 inc.type = Include::IncludePath;
e78566595089 initial import
mandel
parents:
diff changeset
769
e78566595089 initial import
mandel
parents:
diff changeset
770 addExtraInclude(inc);
e78566595089 initial import
mandel
parents:
diff changeset
771 }
e78566595089 initial import
mandel
parents:
diff changeset
772
e78566595089 initial import
mandel
parents:
diff changeset
773 bool isComplex() const { return true; }
e78566595089 initial import
mandel
parents:
diff changeset
774
e78566595089 initial import
mandel
parents:
diff changeset
775 IncludeList extraIncludes() const { return m_extra_includes; }
e78566595089 initial import
mandel
parents:
diff changeset
776 void setExtraIncludes(const IncludeList &includes) { m_extra_includes = includes; }
e78566595089 initial import
mandel
parents:
diff changeset
777 void addExtraInclude(const Include &include)
e78566595089 initial import
mandel
parents:
diff changeset
778 {
e78566595089 initial import
mandel
parents:
diff changeset
779 if (!m_includes_used.value(include.name, false)) {
e78566595089 initial import
mandel
parents:
diff changeset
780 m_extra_includes << include;
e78566595089 initial import
mandel
parents:
diff changeset
781 m_includes_used[include.name] = true;
e78566595089 initial import
mandel
parents:
diff changeset
782 }
e78566595089 initial import
mandel
parents:
diff changeset
783 }
e78566595089 initial import
mandel
parents:
diff changeset
784
e78566595089 initial import
mandel
parents:
diff changeset
785 ComplexTypeEntry *copy() const
e78566595089 initial import
mandel
parents:
diff changeset
786 {
e78566595089 initial import
mandel
parents:
diff changeset
787 ComplexTypeEntry *centry = new ComplexTypeEntry(name(), type());
e78566595089 initial import
mandel
parents:
diff changeset
788 centry->setInclude(include());
e78566595089 initial import
mandel
parents:
diff changeset
789 centry->setExtraIncludes(extraIncludes());
e78566595089 initial import
mandel
parents:
diff changeset
790 centry->setFunctionModifications(functionModifications());
e78566595089 initial import
mandel
parents:
diff changeset
791 centry->setFieldModifications(fieldModifications());
e78566595089 initial import
mandel
parents:
diff changeset
792 centry->setQObject(isQObject());
e78566595089 initial import
mandel
parents:
diff changeset
793 centry->setDefaultSuperclass(defaultSuperclass());
e78566595089 initial import
mandel
parents:
diff changeset
794 centry->setCodeSnips(codeSnips());
e78566595089 initial import
mandel
parents:
diff changeset
795 centry->setTargetLangPackage(javaPackage());
e78566595089 initial import
mandel
parents:
diff changeset
796
e78566595089 initial import
mandel
parents:
diff changeset
797 return centry;
e78566595089 initial import
mandel
parents:
diff changeset
798 }
e78566595089 initial import
mandel
parents:
diff changeset
799
e78566595089 initial import
mandel
parents:
diff changeset
800 void setLookupName(const QString &name)
e78566595089 initial import
mandel
parents:
diff changeset
801 {
e78566595089 initial import
mandel
parents:
diff changeset
802 m_lookup_name = name;
e78566595089 initial import
mandel
parents:
diff changeset
803 }
e78566595089 initial import
mandel
parents:
diff changeset
804
e78566595089 initial import
mandel
parents:
diff changeset
805 virtual QString lookupName() const
e78566595089 initial import
mandel
parents:
diff changeset
806 {
e78566595089 initial import
mandel
parents:
diff changeset
807 return m_lookup_name.isEmpty() ? targetLangName() : m_lookup_name;
e78566595089 initial import
mandel
parents:
diff changeset
808 }
e78566595089 initial import
mandel
parents:
diff changeset
809
e78566595089 initial import
mandel
parents:
diff changeset
810 QString jniName() const { return strings_jobject; }
e78566595089 initial import
mandel
parents:
diff changeset
811
e78566595089 initial import
mandel
parents:
diff changeset
812
e78566595089 initial import
mandel
parents:
diff changeset
813 Include include() const { return m_include; }
e78566595089 initial import
mandel
parents:
diff changeset
814 void setInclude(const Include &inc) { m_include = inc; }
e78566595089 initial import
mandel
parents:
diff changeset
815
e78566595089 initial import
mandel
parents:
diff changeset
816 void setTypeFlags(TypeFlags flags)
e78566595089 initial import
mandel
parents:
diff changeset
817 {
e78566595089 initial import
mandel
parents:
diff changeset
818 m_type_flags = flags;
e78566595089 initial import
mandel
parents:
diff changeset
819 }
e78566595089 initial import
mandel
parents:
diff changeset
820
e78566595089 initial import
mandel
parents:
diff changeset
821 TypeFlags typeFlags() const
e78566595089 initial import
mandel
parents:
diff changeset
822 {
e78566595089 initial import
mandel
parents:
diff changeset
823 return m_type_flags;
e78566595089 initial import
mandel
parents:
diff changeset
824 }
e78566595089 initial import
mandel
parents:
diff changeset
825
e78566595089 initial import
mandel
parents:
diff changeset
826 CodeSnipList codeSnips() const { return m_code_snips; }
e78566595089 initial import
mandel
parents:
diff changeset
827 void setCodeSnips(const CodeSnipList &codeSnips) { m_code_snips = codeSnips; }
e78566595089 initial import
mandel
parents:
diff changeset
828 void addCodeSnip(const CodeSnip &codeSnip) { m_code_snips << codeSnip; }
e78566595089 initial import
mandel
parents:
diff changeset
829
e78566595089 initial import
mandel
parents:
diff changeset
830 FunctionModificationList functionModifications() const { return m_function_mods; }
e78566595089 initial import
mandel
parents:
diff changeset
831 void setFunctionModifications(const FunctionModificationList &functionModifications) {
e78566595089 initial import
mandel
parents:
diff changeset
832 m_function_mods = functionModifications;
e78566595089 initial import
mandel
parents:
diff changeset
833 }
e78566595089 initial import
mandel
parents:
diff changeset
834 void addFunctionModification(const FunctionModification &functionModification) {
e78566595089 initial import
mandel
parents:
diff changeset
835 m_function_mods << functionModification;
e78566595089 initial import
mandel
parents:
diff changeset
836 }
e78566595089 initial import
mandel
parents:
diff changeset
837 FunctionModificationList functionModifications(const QString &signature) const;
e78566595089 initial import
mandel
parents:
diff changeset
838
e78566595089 initial import
mandel
parents:
diff changeset
839 FieldModification fieldModification(const QString &name) const;
e78566595089 initial import
mandel
parents:
diff changeset
840 void setFieldModifications(const FieldModificationList &mods) { m_field_mods = mods; }
e78566595089 initial import
mandel
parents:
diff changeset
841 FieldModificationList fieldModifications() const { return m_field_mods; }
e78566595089 initial import
mandel
parents:
diff changeset
842
e78566595089 initial import
mandel
parents:
diff changeset
843 QString javaPackage() const { return m_package; }
e78566595089 initial import
mandel
parents:
diff changeset
844 void setTargetLangPackage(const QString &package) { m_package = package; }
e78566595089 initial import
mandel
parents:
diff changeset
845
e78566595089 initial import
mandel
parents:
diff changeset
846 bool isQObject() const { return m_qobject; }
e78566595089 initial import
mandel
parents:
diff changeset
847 void setQObject(bool qobject) { m_qobject = qobject; }
e78566595089 initial import
mandel
parents:
diff changeset
848
e78566595089 initial import
mandel
parents:
diff changeset
849 QString defaultSuperclass() const { return m_default_superclass; }
e78566595089 initial import
mandel
parents:
diff changeset
850 void setDefaultSuperclass(const QString &sc) { m_default_superclass = sc; }
e78566595089 initial import
mandel
parents:
diff changeset
851
e78566595089 initial import
mandel
parents:
diff changeset
852 virtual QString qualifiedCppName() const { return m_qualified_cpp_name; }
e78566595089 initial import
mandel
parents:
diff changeset
853
e78566595089 initial import
mandel
parents:
diff changeset
854
e78566595089 initial import
mandel
parents:
diff changeset
855 void setIsPolymorphicBase(bool on)
e78566595089 initial import
mandel
parents:
diff changeset
856 {
e78566595089 initial import
mandel
parents:
diff changeset
857 m_polymorphic_base = on;
e78566595089 initial import
mandel
parents:
diff changeset
858 }
e78566595089 initial import
mandel
parents:
diff changeset
859 bool isPolymorphicBase() const { return m_polymorphic_base; }
e78566595089 initial import
mandel
parents:
diff changeset
860
e78566595089 initial import
mandel
parents:
diff changeset
861 void setPolymorphicIdValue(const QString &value)
e78566595089 initial import
mandel
parents:
diff changeset
862 {
e78566595089 initial import
mandel
parents:
diff changeset
863 m_polymorphic_id_value = value;
e78566595089 initial import
mandel
parents:
diff changeset
864 }
e78566595089 initial import
mandel
parents:
diff changeset
865 QString polymorphicIdValue() const { return m_polymorphic_id_value; }
e78566595089 initial import
mandel
parents:
diff changeset
866
e78566595089 initial import
mandel
parents:
diff changeset
867 void setExpensePolicy(const ExpensePolicy &policy) { m_expense_policy = policy; }
e78566595089 initial import
mandel
parents:
diff changeset
868 const ExpensePolicy &expensePolicy() const { return m_expense_policy; }
e78566595089 initial import
mandel
parents:
diff changeset
869
e78566595089 initial import
mandel
parents:
diff changeset
870 QString targetType() const { return m_target_type; }
e78566595089 initial import
mandel
parents:
diff changeset
871 void setTargetType(const QString &code) { m_target_type = code; }
e78566595089 initial import
mandel
parents:
diff changeset
872
e78566595089 initial import
mandel
parents:
diff changeset
873 QString targetLangName() const { return m_java_name.isEmpty()
e78566595089 initial import
mandel
parents:
diff changeset
874 ? TypeEntry::targetLangName()
e78566595089 initial import
mandel
parents:
diff changeset
875 : m_java_name;
e78566595089 initial import
mandel
parents:
diff changeset
876 }
e78566595089 initial import
mandel
parents:
diff changeset
877 void setTargetLangName(const QString &name) { m_java_name = name; }
e78566595089 initial import
mandel
parents:
diff changeset
878
e78566595089 initial import
mandel
parents:
diff changeset
879 bool isGenericClass() const { return m_generic_class; }
e78566595089 initial import
mandel
parents:
diff changeset
880 void setGenericClass(bool isGeneric) { m_generic_class = isGeneric; }
e78566595089 initial import
mandel
parents:
diff changeset
881
e78566595089 initial import
mandel
parents:
diff changeset
882 QString injectedImports;
e78566595089 initial import
mandel
parents:
diff changeset
883
e78566595089 initial import
mandel
parents:
diff changeset
884 // qtd
e78566595089 initial import
mandel
parents:
diff changeset
885 bool isStructInD() const { return m_isStructInD; }
e78566595089 initial import
mandel
parents:
diff changeset
886 void setStructInD(bool isStruct) { m_isStructInD = isStruct; }
e78566595089 initial import
mandel
parents:
diff changeset
887
e78566595089 initial import
mandel
parents:
diff changeset
888 bool isAbstract() const { return m_isAbstract; }
e78566595089 initial import
mandel
parents:
diff changeset
889 void setAbstract(bool isAbstract) { m_isAbstract = isAbstract; }
e78566595089 initial import
mandel
parents:
diff changeset
890
42
eb3b5bbffc8f CMake: generator is not running multiple times.
SokoL_SD
parents: 14
diff changeset
891 void setDepends(const QStringList &depends) {m_depends = depends; }
eb3b5bbffc8f CMake: generator is not running multiple times.
SokoL_SD
parents: 14
diff changeset
892 const QStringList &depends() {return m_depends; }
eb3b5bbffc8f CMake: generator is not running multiple times.
SokoL_SD
parents: 14
diff changeset
893
1
e78566595089 initial import
mandel
parents:
diff changeset
894 QString addedTo;
e78566595089 initial import
mandel
parents:
diff changeset
895 QStringList includedClasses;
e78566595089 initial import
mandel
parents:
diff changeset
896
e78566595089 initial import
mandel
parents:
diff changeset
897
e78566595089 initial import
mandel
parents:
diff changeset
898 private:
e78566595089 initial import
mandel
parents:
diff changeset
899 IncludeList m_extra_includes;
e78566595089 initial import
mandel
parents:
diff changeset
900 Include m_include;
e78566595089 initial import
mandel
parents:
diff changeset
901 QHash<QString, bool> m_includes_used;
e78566595089 initial import
mandel
parents:
diff changeset
902 FunctionModificationList m_function_mods;
e78566595089 initial import
mandel
parents:
diff changeset
903 FieldModificationList m_field_mods;
e78566595089 initial import
mandel
parents:
diff changeset
904 CodeSnipList m_code_snips;
e78566595089 initial import
mandel
parents:
diff changeset
905 QString m_package;
e78566595089 initial import
mandel
parents:
diff changeset
906 QString m_default_superclass;
e78566595089 initial import
mandel
parents:
diff changeset
907 QString m_qualified_cpp_name;
e78566595089 initial import
mandel
parents:
diff changeset
908 QString m_java_name;
e78566595089 initial import
mandel
parents:
diff changeset
909
e78566595089 initial import
mandel
parents:
diff changeset
910 uint m_qobject : 1;
e78566595089 initial import
mandel
parents:
diff changeset
911 uint m_polymorphic_base : 1;
e78566595089 initial import
mandel
parents:
diff changeset
912 uint m_generic_class : 1;
e78566595089 initial import
mandel
parents:
diff changeset
913
e78566595089 initial import
mandel
parents:
diff changeset
914 QString m_polymorphic_id_value;
e78566595089 initial import
mandel
parents:
diff changeset
915 QString m_lookup_name;
e78566595089 initial import
mandel
parents:
diff changeset
916 QString m_target_type;
e78566595089 initial import
mandel
parents:
diff changeset
917 ExpensePolicy m_expense_policy;
e78566595089 initial import
mandel
parents:
diff changeset
918 TypeFlags m_type_flags;
e78566595089 initial import
mandel
parents:
diff changeset
919
e78566595089 initial import
mandel
parents:
diff changeset
920 // qtd
e78566595089 initial import
mandel
parents:
diff changeset
921 bool m_isStructInD;
e78566595089 initial import
mandel
parents:
diff changeset
922 bool m_isAbstract;
42
eb3b5bbffc8f CMake: generator is not running multiple times.
SokoL_SD
parents: 14
diff changeset
923 QStringList m_depends;
1
e78566595089 initial import
mandel
parents:
diff changeset
924 };
e78566595089 initial import
mandel
parents:
diff changeset
925
e78566595089 initial import
mandel
parents:
diff changeset
926 class ContainerTypeEntry : public ComplexTypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
927 {
e78566595089 initial import
mandel
parents:
diff changeset
928 public:
e78566595089 initial import
mandel
parents:
diff changeset
929 enum Type {
e78566595089 initial import
mandel
parents:
diff changeset
930 NoContainer,
e78566595089 initial import
mandel
parents:
diff changeset
931 ListContainer,
e78566595089 initial import
mandel
parents:
diff changeset
932 StringListContainer,
e78566595089 initial import
mandel
parents:
diff changeset
933 LinkedListContainer,
e78566595089 initial import
mandel
parents:
diff changeset
934 VectorContainer,
e78566595089 initial import
mandel
parents:
diff changeset
935 StackContainer,
e78566595089 initial import
mandel
parents:
diff changeset
936 QueueContainer,
e78566595089 initial import
mandel
parents:
diff changeset
937 SetContainer,
e78566595089 initial import
mandel
parents:
diff changeset
938 MapContainer,
e78566595089 initial import
mandel
parents:
diff changeset
939 MultiMapContainer,
e78566595089 initial import
mandel
parents:
diff changeset
940 HashContainer,
e78566595089 initial import
mandel
parents:
diff changeset
941 MultiHashContainer,
e78566595089 initial import
mandel
parents:
diff changeset
942 PairContainer,
e78566595089 initial import
mandel
parents:
diff changeset
943 };
e78566595089 initial import
mandel
parents:
diff changeset
944
e78566595089 initial import
mandel
parents:
diff changeset
945 ContainerTypeEntry(const QString &name, Type type)
e78566595089 initial import
mandel
parents:
diff changeset
946 : ComplexTypeEntry(name, ContainerType)
e78566595089 initial import
mandel
parents:
diff changeset
947 {
e78566595089 initial import
mandel
parents:
diff changeset
948 m_type = type;
e78566595089 initial import
mandel
parents:
diff changeset
949 setCodeGeneration(GenerateForSubclass);
e78566595089 initial import
mandel
parents:
diff changeset
950 }
e78566595089 initial import
mandel
parents:
diff changeset
951
e78566595089 initial import
mandel
parents:
diff changeset
952 Type type() const { return m_type; }
e78566595089 initial import
mandel
parents:
diff changeset
953 QString targetLangName() const;
e78566595089 initial import
mandel
parents:
diff changeset
954 QString javaPackage() const;
e78566595089 initial import
mandel
parents:
diff changeset
955 QString qualifiedCppName() const;
e78566595089 initial import
mandel
parents:
diff changeset
956
298
adae77fdc1ea Native QList implementation is now used throughout QtD
eldar
parents: 148
diff changeset
957 bool isQList() const { return type() == ListContainer || type() == StringListContainer; }
adae77fdc1ea Native QList implementation is now used throughout QtD
eldar
parents: 148
diff changeset
958
1
e78566595089 initial import
mandel
parents:
diff changeset
959 private:
e78566595089 initial import
mandel
parents:
diff changeset
960 Type m_type;
e78566595089 initial import
mandel
parents:
diff changeset
961 };
e78566595089 initial import
mandel
parents:
diff changeset
962
e78566595089 initial import
mandel
parents:
diff changeset
963
e78566595089 initial import
mandel
parents:
diff changeset
964 class NamespaceTypeEntry : public ComplexTypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
965 {
e78566595089 initial import
mandel
parents:
diff changeset
966 public:
e78566595089 initial import
mandel
parents:
diff changeset
967 NamespaceTypeEntry(const QString &name) : ComplexTypeEntry(name, NamespaceType) { }
e78566595089 initial import
mandel
parents:
diff changeset
968 };
e78566595089 initial import
mandel
parents:
diff changeset
969
e78566595089 initial import
mandel
parents:
diff changeset
970
e78566595089 initial import
mandel
parents:
diff changeset
971 class ValueTypeEntry : public ComplexTypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
972 {
e78566595089 initial import
mandel
parents:
diff changeset
973 public:
e78566595089 initial import
mandel
parents:
diff changeset
974 ValueTypeEntry(const QString &name) : ComplexTypeEntry(name, BasicValueType) { }
e78566595089 initial import
mandel
parents:
diff changeset
975
e78566595089 initial import
mandel
parents:
diff changeset
976 bool isValue() const { return true; }
e78566595089 initial import
mandel
parents:
diff changeset
977
e78566595089 initial import
mandel
parents:
diff changeset
978 virtual bool isNativeIdBased() const { return true; }
e78566595089 initial import
mandel
parents:
diff changeset
979
e78566595089 initial import
mandel
parents:
diff changeset
980 protected:
e78566595089 initial import
mandel
parents:
diff changeset
981 ValueTypeEntry(const QString &name, Type t) : ComplexTypeEntry(name, t) { }
e78566595089 initial import
mandel
parents:
diff changeset
982 };
e78566595089 initial import
mandel
parents:
diff changeset
983
e78566595089 initial import
mandel
parents:
diff changeset
984
e78566595089 initial import
mandel
parents:
diff changeset
985 class StringTypeEntry : public ValueTypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
986 {
e78566595089 initial import
mandel
parents:
diff changeset
987 public:
e78566595089 initial import
mandel
parents:
diff changeset
988 StringTypeEntry(const QString &name)
e78566595089 initial import
mandel
parents:
diff changeset
989 : ValueTypeEntry(name, StringType)
e78566595089 initial import
mandel
parents:
diff changeset
990 {
e78566595089 initial import
mandel
parents:
diff changeset
991 setCodeGeneration(GenerateNothing);
e78566595089 initial import
mandel
parents:
diff changeset
992 }
e78566595089 initial import
mandel
parents:
diff changeset
993
e78566595089 initial import
mandel
parents:
diff changeset
994 QString jniName() const { return strings_jobject; }
e78566595089 initial import
mandel
parents:
diff changeset
995 QString targetLangName() const { return strings_String; }
e78566595089 initial import
mandel
parents:
diff changeset
996 QString javaPackage() const { return strings_java_lang; }
e78566595089 initial import
mandel
parents:
diff changeset
997
e78566595089 initial import
mandel
parents:
diff changeset
998 virtual bool isNativeIdBased() const { return false; }
e78566595089 initial import
mandel
parents:
diff changeset
999 };
e78566595089 initial import
mandel
parents:
diff changeset
1000
e78566595089 initial import
mandel
parents:
diff changeset
1001 class CharTypeEntry : public ValueTypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
1002 {
e78566595089 initial import
mandel
parents:
diff changeset
1003 public:
e78566595089 initial import
mandel
parents:
diff changeset
1004 CharTypeEntry(const QString &name) : ValueTypeEntry(name, CharType)
e78566595089 initial import
mandel
parents:
diff changeset
1005 {
e78566595089 initial import
mandel
parents:
diff changeset
1006 setCodeGeneration(GenerateNothing);
e78566595089 initial import
mandel
parents:
diff changeset
1007 }
e78566595089 initial import
mandel
parents:
diff changeset
1008
e78566595089 initial import
mandel
parents:
diff changeset
1009 QString jniName() const { return strings_jchar; }
e78566595089 initial import
mandel
parents:
diff changeset
1010 QString targetLangName() const { return strings_char; }
e78566595089 initial import
mandel
parents:
diff changeset
1011 QString javaPackage() const { return QString(); }
e78566595089 initial import
mandel
parents:
diff changeset
1012
e78566595089 initial import
mandel
parents:
diff changeset
1013 virtual bool isNativeIdBased() const { return false; }
e78566595089 initial import
mandel
parents:
diff changeset
1014 };
e78566595089 initial import
mandel
parents:
diff changeset
1015
e78566595089 initial import
mandel
parents:
diff changeset
1016 class JObjectWrapperTypeEntry: public ValueTypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
1017 {
e78566595089 initial import
mandel
parents:
diff changeset
1018 public:
e78566595089 initial import
mandel
parents:
diff changeset
1019 JObjectWrapperTypeEntry(const QString &name) : ValueTypeEntry(name, JObjectWrapperType) { }
e78566595089 initial import
mandel
parents:
diff changeset
1020
e78566595089 initial import
mandel
parents:
diff changeset
1021 QString jniName() const { return strings_jobject; }
e78566595089 initial import
mandel
parents:
diff changeset
1022 QString targetLangName() const { return strings_Object; }
e78566595089 initial import
mandel
parents:
diff changeset
1023 QString javaPackage() const { return strings_java_lang; }
e78566595089 initial import
mandel
parents:
diff changeset
1024
e78566595089 initial import
mandel
parents:
diff changeset
1025 bool isNativeIdBased() const { return false; }
e78566595089 initial import
mandel
parents:
diff changeset
1026 };
e78566595089 initial import
mandel
parents:
diff changeset
1027
e78566595089 initial import
mandel
parents:
diff changeset
1028 class VariantTypeEntry: public ValueTypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
1029 {
e78566595089 initial import
mandel
parents:
diff changeset
1030 public:
e78566595089 initial import
mandel
parents:
diff changeset
1031 VariantTypeEntry(const QString &name) : ValueTypeEntry(name, VariantType) { }
e78566595089 initial import
mandel
parents:
diff changeset
1032
e78566595089 initial import
mandel
parents:
diff changeset
1033 QString jniName() const { return strings_jobject; }
e78566595089 initial import
mandel
parents:
diff changeset
1034 QString targetLangName() const { return "QVariant"; }
e78566595089 initial import
mandel
parents:
diff changeset
1035 QString javaPackage() const { return "qt.core"; }
e78566595089 initial import
mandel
parents:
diff changeset
1036 virtual bool isNativeIdBased() const { return false; }
e78566595089 initial import
mandel
parents:
diff changeset
1037 };
e78566595089 initial import
mandel
parents:
diff changeset
1038
e78566595089 initial import
mandel
parents:
diff changeset
1039
e78566595089 initial import
mandel
parents:
diff changeset
1040 class InterfaceTypeEntry : public ComplexTypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
1041 {
e78566595089 initial import
mandel
parents:
diff changeset
1042 public:
e78566595089 initial import
mandel
parents:
diff changeset
1043 InterfaceTypeEntry(const QString &name)
e78566595089 initial import
mandel
parents:
diff changeset
1044 : ComplexTypeEntry(name, InterfaceType)
e78566595089 initial import
mandel
parents:
diff changeset
1045 {
e78566595089 initial import
mandel
parents:
diff changeset
1046 }
e78566595089 initial import
mandel
parents:
diff changeset
1047
e78566595089 initial import
mandel
parents:
diff changeset
1048 static QString interfaceName(const QString &name) {
e78566595089 initial import
mandel
parents:
diff changeset
1049 return "I" + name;
e78566595089 initial import
mandel
parents:
diff changeset
1050 }
e78566595089 initial import
mandel
parents:
diff changeset
1051
e78566595089 initial import
mandel
parents:
diff changeset
1052 ObjectTypeEntry *origin() const { return m_origin; }
e78566595089 initial import
mandel
parents:
diff changeset
1053 void setOrigin(ObjectTypeEntry *origin) { m_origin = origin; }
e78566595089 initial import
mandel
parents:
diff changeset
1054
e78566595089 initial import
mandel
parents:
diff changeset
1055 virtual bool isNativeIdBased() const { return true; }
e78566595089 initial import
mandel
parents:
diff changeset
1056 virtual QString qualifiedCppName() const {
e78566595089 initial import
mandel
parents:
diff changeset
1057 return ComplexTypeEntry::qualifiedCppName().right(ComplexTypeEntry::qualifiedCppName().length() - interfaceName("").length());
e78566595089 initial import
mandel
parents:
diff changeset
1058 }
e78566595089 initial import
mandel
parents:
diff changeset
1059
e78566595089 initial import
mandel
parents:
diff changeset
1060 private:
e78566595089 initial import
mandel
parents:
diff changeset
1061 ObjectTypeEntry *m_origin;
e78566595089 initial import
mandel
parents:
diff changeset
1062 };
e78566595089 initial import
mandel
parents:
diff changeset
1063
e78566595089 initial import
mandel
parents:
diff changeset
1064
e78566595089 initial import
mandel
parents:
diff changeset
1065 class ObjectTypeEntry : public ComplexTypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
1066 {
e78566595089 initial import
mandel
parents:
diff changeset
1067 public:
e78566595089 initial import
mandel
parents:
diff changeset
1068 ObjectTypeEntry(const QString &name)
e78566595089 initial import
mandel
parents:
diff changeset
1069 : ComplexTypeEntry(name, ObjectType), m_interface(0)
e78566595089 initial import
mandel
parents:
diff changeset
1070 {
e78566595089 initial import
mandel
parents:
diff changeset
1071 }
e78566595089 initial import
mandel
parents:
diff changeset
1072
e78566595089 initial import
mandel
parents:
diff changeset
1073 InterfaceTypeEntry *designatedInterface() const { return m_interface; }
e78566595089 initial import
mandel
parents:
diff changeset
1074 void setDesignatedInterface(InterfaceTypeEntry *entry) { m_interface = entry; }
e78566595089 initial import
mandel
parents:
diff changeset
1075
e78566595089 initial import
mandel
parents:
diff changeset
1076 virtual bool isNativeIdBased() const { return true; }
e78566595089 initial import
mandel
parents:
diff changeset
1077
e78566595089 initial import
mandel
parents:
diff changeset
1078 private:
e78566595089 initial import
mandel
parents:
diff changeset
1079 InterfaceTypeEntry *m_interface;
e78566595089 initial import
mandel
parents:
diff changeset
1080 };
e78566595089 initial import
mandel
parents:
diff changeset
1081
e78566595089 initial import
mandel
parents:
diff changeset
1082 class CustomTypeEntry : public ComplexTypeEntry
e78566595089 initial import
mandel
parents:
diff changeset
1083 {
e78566595089 initial import
mandel
parents:
diff changeset
1084 public:
e78566595089 initial import
mandel
parents:
diff changeset
1085 CustomTypeEntry(const QString &name) : ComplexTypeEntry(name, CustomType) { }
e78566595089 initial import
mandel
parents:
diff changeset
1086
e78566595089 initial import
mandel
parents:
diff changeset
1087 virtual void generateCppJavaToQt(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 virtual void generateCppQtToJava(QTextStream &s,
e78566595089 initial import
mandel
parents:
diff changeset
1094 const AbstractMetaType *java_type,
e78566595089 initial import
mandel
parents:
diff changeset
1095 const QString &env_name,
e78566595089 initial import
mandel
parents:
diff changeset
1096 const QString &qt_name,
e78566595089 initial import
mandel
parents:
diff changeset
1097 const QString &java_name) const = 0;
e78566595089 initial import
mandel
parents:
diff changeset
1098 };
e78566595089 initial import
mandel
parents:
diff changeset
1099
e78566595089 initial import
mandel
parents:
diff changeset
1100 struct TypeRejection
e78566595089 initial import
mandel
parents:
diff changeset
1101 {
e78566595089 initial import
mandel
parents:
diff changeset
1102 QString class_name;
e78566595089 initial import
mandel
parents:
diff changeset
1103 QString function_name;
e78566595089 initial import
mandel
parents:
diff changeset
1104 QString field_name;
e78566595089 initial import
mandel
parents:
diff changeset
1105 QString enum_name;
e78566595089 initial import
mandel
parents:
diff changeset
1106 };
e78566595089 initial import
mandel
parents:
diff changeset
1107
e78566595089 initial import
mandel
parents:
diff changeset
1108 class TypeDatabase
e78566595089 initial import
mandel
parents:
diff changeset
1109 {
e78566595089 initial import
mandel
parents:
diff changeset
1110 public:
e78566595089 initial import
mandel
parents:
diff changeset
1111 TypeDatabase();
e78566595089 initial import
mandel
parents:
diff changeset
1112
e78566595089 initial import
mandel
parents:
diff changeset
1113 static TypeDatabase *instance();
e78566595089 initial import
mandel
parents:
diff changeset
1114
e78566595089 initial import
mandel
parents:
diff changeset
1115 QList<Include> extraIncludes(const QString &className);
e78566595089 initial import
mandel
parents:
diff changeset
1116
e78566595089 initial import
mandel
parents:
diff changeset
1117 inline PrimitiveTypeEntry *findPrimitiveType(const QString &name);
e78566595089 initial import
mandel
parents:
diff changeset
1118 inline ComplexTypeEntry *findComplexType(const QString &name);
e78566595089 initial import
mandel
parents:
diff changeset
1119 inline ObjectTypeEntry *findObjectType(const QString &name);
e78566595089 initial import
mandel
parents:
diff changeset
1120 inline NamespaceTypeEntry *findNamespaceType(const QString &name);
e78566595089 initial import
mandel
parents:
diff changeset
1121 ContainerTypeEntry *findContainerType(const QString &name);
e78566595089 initial import
mandel
parents:
diff changeset
1122
e78566595089 initial import
mandel
parents:
diff changeset
1123 TypeEntry *findType(const QString &name) const {
e78566595089 initial import
mandel
parents:
diff changeset
1124 QList<TypeEntry *> entries = findTypes(name);
e78566595089 initial import
mandel
parents:
diff changeset
1125 foreach (TypeEntry *entry, entries) {
e78566595089 initial import
mandel
parents:
diff changeset
1126 if (entry != 0 &&
e78566595089 initial import
mandel
parents:
diff changeset
1127 (!entry->isPrimitive() || static_cast<PrimitiveTypeEntry *>(entry)->preferredTargetLangType())) {
e78566595089 initial import
mandel
parents:
diff changeset
1128 return entry;
e78566595089 initial import
mandel
parents:
diff changeset
1129 }
e78566595089 initial import
mandel
parents:
diff changeset
1130 }
e78566595089 initial import
mandel
parents:
diff changeset
1131 return 0;
e78566595089 initial import
mandel
parents:
diff changeset
1132 }
e78566595089 initial import
mandel
parents:
diff changeset
1133 QList<TypeEntry *> findTypes(const QString &name) const { return m_entries.value(name); }
e78566595089 initial import
mandel
parents:
diff changeset
1134 TypeEntryHash allEntries() { return m_entries; }
e78566595089 initial import
mandel
parents:
diff changeset
1135 SingleTypeEntryHash entries() {
e78566595089 initial import
mandel
parents:
diff changeset
1136 TypeEntryHash entries = allEntries();
e78566595089 initial import
mandel
parents:
diff changeset
1137
e78566595089 initial import
mandel
parents:
diff changeset
1138 SingleTypeEntryHash returned;
e78566595089 initial import
mandel
parents:
diff changeset
1139 QList<QString> keys = entries.keys();
e78566595089 initial import
mandel
parents:
diff changeset
1140
e78566595089 initial import
mandel
parents:
diff changeset
1141 foreach(QString key, keys) {
e78566595089 initial import
mandel
parents:
diff changeset
1142 returned[key] = findType(key);
e78566595089 initial import
mandel
parents:
diff changeset
1143 }
e78566595089 initial import
mandel
parents:
diff changeset
1144
e78566595089 initial import
mandel
parents:
diff changeset
1145 return returned;
e78566595089 initial import
mandel
parents:
diff changeset
1146 }
e78566595089 initial import
mandel
parents:
diff changeset
1147
e78566595089 initial import
mandel
parents:
diff changeset
1148 PrimitiveTypeEntry *findTargetLangPrimitiveType(const QString &java_name);
e78566595089 initial import
mandel
parents:
diff changeset
1149
e78566595089 initial import
mandel
parents:
diff changeset
1150 void addRejection(const QString &class_name, const QString &function_name,
e78566595089 initial import
mandel
parents:
diff changeset
1151 const QString &field_name, const QString &enum_name);
e78566595089 initial import
mandel
parents:
diff changeset
1152 bool isClassRejected(const QString &class_name);
e78566595089 initial import
mandel
parents:
diff changeset
1153 bool isFunctionRejected(const QString &class_name, const QString &function_name);
e78566595089 initial import
mandel
parents:
diff changeset
1154 bool isFieldRejected(const QString &class_name, const QString &field_name);
e78566595089 initial import
mandel
parents:
diff changeset
1155 bool isEnumRejected(const QString &class_name, const QString &enum_name);
e78566595089 initial import
mandel
parents:
diff changeset
1156
e78566595089 initial import
mandel
parents:
diff changeset
1157 void addType(TypeEntry *e) { m_entries[e->qualifiedCppName()].append(e); }
e78566595089 initial import
mandel
parents:
diff changeset
1158
e78566595089 initial import
mandel
parents:
diff changeset
1159 SingleTypeEntryHash flagsEntries() const { return m_flags_entries; }
e78566595089 initial import
mandel
parents:
diff changeset
1160 FlagsTypeEntry *findFlagsType(const QString &name) const;
e78566595089 initial import
mandel
parents:
diff changeset
1161 void addFlagsType(FlagsTypeEntry *fte) { m_flags_entries[fte->originalName()] = fte; }
e78566595089 initial import
mandel
parents:
diff changeset
1162
e78566595089 initial import
mandel
parents:
diff changeset
1163 TemplateEntry *findTemplate(const QString &name) { return m_templates[name]; }
e78566595089 initial import
mandel
parents:
diff changeset
1164 void addTemplate(TemplateEntry *t) { m_templates[t->name()] = t; }
e78566595089 initial import
mandel
parents:
diff changeset
1165
e78566595089 initial import
mandel
parents:
diff changeset
1166 void setIncludeEclipseWarnings(bool on) { m_includeEclipseWarnings = on; }
e78566595089 initial import
mandel
parents:
diff changeset
1167 bool includeEclipseWarnings() const { return m_includeEclipseWarnings; }
e78566595089 initial import
mandel
parents:
diff changeset
1168
e78566595089 initial import
mandel
parents:
diff changeset
1169 void setSuppressWarnings(bool on) { m_suppressWarnings = on; }
e78566595089 initial import
mandel
parents:
diff changeset
1170 void addSuppressedWarning(const QString &s)
e78566595089 initial import
mandel
parents:
diff changeset
1171 {
e78566595089 initial import
mandel
parents:
diff changeset
1172 m_suppressedWarnings.append(s);
e78566595089 initial import
mandel
parents:
diff changeset
1173 }
e78566595089 initial import
mandel
parents:
diff changeset
1174
e78566595089 initial import
mandel
parents:
diff changeset
1175 bool isSuppressedWarning(const QString &s)
e78566595089 initial import
mandel
parents:
diff changeset
1176 {
e78566595089 initial import
mandel
parents:
diff changeset
1177 if (!m_suppressWarnings)
e78566595089 initial import
mandel
parents:
diff changeset
1178 return false;
e78566595089 initial import
mandel
parents:
diff changeset
1179
e78566595089 initial import
mandel
parents:
diff changeset
1180 foreach (const QString &_warning, m_suppressedWarnings) {
e78566595089 initial import
mandel
parents:
diff changeset
1181 QString warning(QString(_warning).replace("\\*", "&place_holder_for_asterisk;"));
e78566595089 initial import
mandel
parents:
diff changeset
1182
e78566595089 initial import
mandel
parents:
diff changeset
1183 QStringList segs = warning.split("*", QString::SkipEmptyParts);
e78566595089 initial import
mandel
parents:
diff changeset
1184 if (segs.size() == 0)
e78566595089 initial import
mandel
parents:
diff changeset
1185 continue ;
e78566595089 initial import
mandel
parents:
diff changeset
1186
e78566595089 initial import
mandel
parents:
diff changeset
1187 int i = 0;
e78566595089 initial import
mandel
parents:
diff changeset
1188 int pos = s.indexOf(QString(segs.at(i++)).replace("&place_holder_for_asterisk;", "*"));
e78566595089 initial import
mandel
parents:
diff changeset
1189 //qDebug() << "s == " << s << ", warning == " << segs;
e78566595089 initial import
mandel
parents:
diff changeset
1190 while (pos != -1) {
e78566595089 initial import
mandel
parents:
diff changeset
1191 if (i == segs.size())
e78566595089 initial import
mandel
parents:
diff changeset
1192 return true;
e78566595089 initial import
mandel
parents:
diff changeset
1193 pos = s.indexOf(QString(segs.at(i++)).replace("&place_holder_for_asterisk;", "*"), pos);
e78566595089 initial import
mandel
parents:
diff changeset
1194 }
e78566595089 initial import
mandel
parents:
diff changeset
1195 }
e78566595089 initial import
mandel
parents:
diff changeset
1196
e78566595089 initial import
mandel
parents:
diff changeset
1197 return false;
e78566595089 initial import
mandel
parents:
diff changeset
1198 }
e78566595089 initial import
mandel
parents:
diff changeset
1199
e78566595089 initial import
mandel
parents:
diff changeset
1200 void setRebuildClasses(const QStringList &cls) { m_rebuild_classes = cls; }
e78566595089 initial import
mandel
parents:
diff changeset
1201
e78566595089 initial import
mandel
parents:
diff changeset
1202 static QString globalNamespaceClassName(const TypeEntry *te);
e78566595089 initial import
mandel
parents:
diff changeset
1203 QString filename() const { return "typesystem.txt"; }
e78566595089 initial import
mandel
parents:
diff changeset
1204
4
0a29ce1ae854 CMake build script.
SokoL_SD
parents: 1
diff changeset
1205 bool parseFile(const QString &filename, const QString &work_dir, bool generate = true);
1
e78566595089 initial import
mandel
parents:
diff changeset
1206
e78566595089 initial import
mandel
parents:
diff changeset
1207 private:
e78566595089 initial import
mandel
parents:
diff changeset
1208 uint m_suppressWarnings : 1;
e78566595089 initial import
mandel
parents:
diff changeset
1209 uint m_includeEclipseWarnings : 1;
e78566595089 initial import
mandel
parents:
diff changeset
1210 uint m_reserved : 30;
e78566595089 initial import
mandel
parents:
diff changeset
1211
e78566595089 initial import
mandel
parents:
diff changeset
1212 TypeEntryHash m_entries;
e78566595089 initial import
mandel
parents:
diff changeset
1213 SingleTypeEntryHash m_flags_entries;
e78566595089 initial import
mandel
parents:
diff changeset
1214 TemplateEntryHash m_templates;
e78566595089 initial import
mandel
parents:
diff changeset
1215 QStringList m_suppressedWarnings;
e78566595089 initial import
mandel
parents:
diff changeset
1216
e78566595089 initial import
mandel
parents:
diff changeset
1217 QList<TypeRejection> m_rejections;
e78566595089 initial import
mandel
parents:
diff changeset
1218 QStringList m_rebuild_classes;
e78566595089 initial import
mandel
parents:
diff changeset
1219 };
e78566595089 initial import
mandel
parents:
diff changeset
1220
e78566595089 initial import
mandel
parents:
diff changeset
1221 inline PrimitiveTypeEntry *TypeDatabase::findPrimitiveType(const QString &name)
e78566595089 initial import
mandel
parents:
diff changeset
1222 {
e78566595089 initial import
mandel
parents:
diff changeset
1223 QList<TypeEntry *> entries = findTypes(name);
e78566595089 initial import
mandel
parents:
diff changeset
1224
e78566595089 initial import
mandel
parents:
diff changeset
1225 foreach (TypeEntry *entry, entries) {
e78566595089 initial import
mandel
parents:
diff changeset
1226 if (entry != 0 && entry->isPrimitive() && static_cast<PrimitiveTypeEntry *>(entry)->preferredTargetLangType())
e78566595089 initial import
mandel
parents:
diff changeset
1227 return static_cast<PrimitiveTypeEntry *>(entry);
e78566595089 initial import
mandel
parents:
diff changeset
1228 }
e78566595089 initial import
mandel
parents:
diff changeset
1229
e78566595089 initial import
mandel
parents:
diff changeset
1230 return 0;
e78566595089 initial import
mandel
parents:
diff changeset
1231 }
e78566595089 initial import
mandel
parents:
diff changeset
1232
e78566595089 initial import
mandel
parents:
diff changeset
1233 inline ComplexTypeEntry *TypeDatabase::findComplexType(const QString &name)
e78566595089 initial import
mandel
parents:
diff changeset
1234 {
e78566595089 initial import
mandel
parents:
diff changeset
1235 TypeEntry *entry = findType(name);
e78566595089 initial import
mandel
parents:
diff changeset
1236 if (entry != 0 && entry->isComplex())
e78566595089 initial import
mandel
parents:
diff changeset
1237 return static_cast<ComplexTypeEntry *>(entry);
e78566595089 initial import
mandel
parents:
diff changeset
1238 else
e78566595089 initial import
mandel
parents:
diff changeset
1239 return 0;
e78566595089 initial import
mandel
parents:
diff changeset
1240 }
e78566595089 initial import
mandel
parents:
diff changeset
1241
e78566595089 initial import
mandel
parents:
diff changeset
1242 inline ObjectTypeEntry *TypeDatabase::findObjectType(const QString &name)
e78566595089 initial import
mandel
parents:
diff changeset
1243 {
e78566595089 initial import
mandel
parents:
diff changeset
1244 TypeEntry *entry = findType(name);
e78566595089 initial import
mandel
parents:
diff changeset
1245 if (entry != 0 && entry->isObject())
e78566595089 initial import
mandel
parents:
diff changeset
1246 return static_cast<ObjectTypeEntry *>(entry);
e78566595089 initial import
mandel
parents:
diff changeset
1247 else
e78566595089 initial import
mandel
parents:
diff changeset
1248 return 0;
e78566595089 initial import
mandel
parents:
diff changeset
1249 }
e78566595089 initial import
mandel
parents:
diff changeset
1250
e78566595089 initial import
mandel
parents:
diff changeset
1251 inline NamespaceTypeEntry *TypeDatabase::findNamespaceType(const QString &name)
e78566595089 initial import
mandel
parents:
diff changeset
1252 {
e78566595089 initial import
mandel
parents:
diff changeset
1253 TypeEntry *entry = findType(name);
e78566595089 initial import
mandel
parents:
diff changeset
1254 if (entry != 0 && entry->isNamespace())
e78566595089 initial import
mandel
parents:
diff changeset
1255 return static_cast<NamespaceTypeEntry *>(entry);
e78566595089 initial import
mandel
parents:
diff changeset
1256 else
e78566595089 initial import
mandel
parents:
diff changeset
1257 return 0;
e78566595089 initial import
mandel
parents:
diff changeset
1258 }
e78566595089 initial import
mandel
parents:
diff changeset
1259
e78566595089 initial import
mandel
parents:
diff changeset
1260 QString fixCppTypeName(const QString &name);
e78566595089 initial import
mandel
parents:
diff changeset
1261
e78566595089 initial import
mandel
parents:
diff changeset
1262 #endif // TYPESYSTEM_H