annotate generator/typesystem.h @ 257:17b5e13364b7 lifetime

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