annotate generator/abstractmetalang.h @ 288:f9559a957be9 signals

new signals and slots implementation
author eldar
date Sun, 08 Nov 2009 19:28:01 +0000
parents 136c9ee83ee5
children 8627891e4556
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 ABSTRACTMETALANG_H
e78566595089 initial import
mandel
parents:
diff changeset
43 #define ABSTRACTMETALANG_H
e78566595089 initial import
mandel
parents:
diff changeset
44
e78566595089 initial import
mandel
parents:
diff changeset
45 #include "codemodel.h"
e78566595089 initial import
mandel
parents:
diff changeset
46
e78566595089 initial import
mandel
parents:
diff changeset
47 #include "typesystem.h"
e78566595089 initial import
mandel
parents:
diff changeset
48
e78566595089 initial import
mandel
parents:
diff changeset
49 #include <QHash>
e78566595089 initial import
mandel
parents:
diff changeset
50 #include <QSet>
e78566595089 initial import
mandel
parents:
diff changeset
51 #include <QStringList>
e78566595089 initial import
mandel
parents:
diff changeset
52 #include <QTextStream>
e78566595089 initial import
mandel
parents:
diff changeset
53
e78566595089 initial import
mandel
parents:
diff changeset
54
e78566595089 initial import
mandel
parents:
diff changeset
55 class AbstractMeta;
e78566595089 initial import
mandel
parents:
diff changeset
56 class AbstractMetaClass;
e78566595089 initial import
mandel
parents:
diff changeset
57 class AbstractMetaField;
e78566595089 initial import
mandel
parents:
diff changeset
58 class AbstractMetaFunction;
e78566595089 initial import
mandel
parents:
diff changeset
59 class AbstractMetaType;
e78566595089 initial import
mandel
parents:
diff changeset
60 class AbstractMetaVariable;
e78566595089 initial import
mandel
parents:
diff changeset
61 class AbstractMetaArgument;
e78566595089 initial import
mandel
parents:
diff changeset
62 class AbstractMetaEnumValue;
e78566595089 initial import
mandel
parents:
diff changeset
63 class AbstractMetaEnum;
e78566595089 initial import
mandel
parents:
diff changeset
64 class QPropertySpec;
e78566595089 initial import
mandel
parents:
diff changeset
65
e78566595089 initial import
mandel
parents:
diff changeset
66 typedef QList<AbstractMetaField *> AbstractMetaFieldList;
e78566595089 initial import
mandel
parents:
diff changeset
67 typedef QList<AbstractMetaArgument *> AbstractMetaArgumentList;
e78566595089 initial import
mandel
parents:
diff changeset
68 typedef QList<AbstractMetaFunction *> AbstractMetaFunctionList;
e78566595089 initial import
mandel
parents:
diff changeset
69 class AbstractMetaClassList : public QList<AbstractMetaClass *>
e78566595089 initial import
mandel
parents:
diff changeset
70 {
e78566595089 initial import
mandel
parents:
diff changeset
71 public:
e78566595089 initial import
mandel
parents:
diff changeset
72 AbstractMetaClass *findClass(const QString &name) const;
e78566595089 initial import
mandel
parents:
diff changeset
73 AbstractMetaEnumValue *findEnumValue(const QString &string) const;
e78566595089 initial import
mandel
parents:
diff changeset
74 AbstractMetaEnum *findEnum(const EnumTypeEntry *entry) const;
e78566595089 initial import
mandel
parents:
diff changeset
75
e78566595089 initial import
mandel
parents:
diff changeset
76 };
e78566595089 initial import
mandel
parents:
diff changeset
77
e78566595089 initial import
mandel
parents:
diff changeset
78
e78566595089 initial import
mandel
parents:
diff changeset
79
e78566595089 initial import
mandel
parents:
diff changeset
80 class AbstractMetaAttributes
e78566595089 initial import
mandel
parents:
diff changeset
81 {
e78566595089 initial import
mandel
parents:
diff changeset
82 public:
e78566595089 initial import
mandel
parents:
diff changeset
83 AbstractMetaAttributes() : m_attributes(0) { };
e78566595089 initial import
mandel
parents:
diff changeset
84
e78566595089 initial import
mandel
parents:
diff changeset
85 enum Attribute {
e78566595089 initial import
mandel
parents:
diff changeset
86 None = 0x00000000,
e78566595089 initial import
mandel
parents:
diff changeset
87
e78566595089 initial import
mandel
parents:
diff changeset
88 Private = 0x00000001,
e78566595089 initial import
mandel
parents:
diff changeset
89 Protected = 0x00000002,
e78566595089 initial import
mandel
parents:
diff changeset
90 Public = 0x00000004,
e78566595089 initial import
mandel
parents:
diff changeset
91 Friendly = 0x00000008,
e78566595089 initial import
mandel
parents:
diff changeset
92 Visibility = 0x0000000f,
e78566595089 initial import
mandel
parents:
diff changeset
93
e78566595089 initial import
mandel
parents:
diff changeset
94 Native = 0x00000010,
e78566595089 initial import
mandel
parents:
diff changeset
95 Abstract = 0x00000020,
e78566595089 initial import
mandel
parents:
diff changeset
96 Static = 0x00000040,
e78566595089 initial import
mandel
parents:
diff changeset
97
e78566595089 initial import
mandel
parents:
diff changeset
98 FinalInTargetLang = 0x00000080,
e78566595089 initial import
mandel
parents:
diff changeset
99 FinalInCpp = 0x00000100,
e78566595089 initial import
mandel
parents:
diff changeset
100 ForceShellImplementation = 0x00000200,
e78566595089 initial import
mandel
parents:
diff changeset
101
e78566595089 initial import
mandel
parents:
diff changeset
102 GetterFunction = 0x00000400,
e78566595089 initial import
mandel
parents:
diff changeset
103 SetterFunction = 0x00000800,
e78566595089 initial import
mandel
parents:
diff changeset
104
e78566595089 initial import
mandel
parents:
diff changeset
105 FinalOverload = 0x00001000,
e78566595089 initial import
mandel
parents:
diff changeset
106 InterfaceFunction = 0x00002000,
e78566595089 initial import
mandel
parents:
diff changeset
107
e78566595089 initial import
mandel
parents:
diff changeset
108 PropertyReader = 0x00004000,
e78566595089 initial import
mandel
parents:
diff changeset
109 PropertyWriter = 0x00008000,
e78566595089 initial import
mandel
parents:
diff changeset
110 PropertyResetter = 0x00010000,
e78566595089 initial import
mandel
parents:
diff changeset
111
e78566595089 initial import
mandel
parents:
diff changeset
112 Fake = 0x00020000,
e78566595089 initial import
mandel
parents:
diff changeset
113
e78566595089 initial import
mandel
parents:
diff changeset
114 Invokable = 0x00040000,
e78566595089 initial import
mandel
parents:
diff changeset
115
e78566595089 initial import
mandel
parents:
diff changeset
116 Final = FinalInTargetLang | FinalInCpp
e78566595089 initial import
mandel
parents:
diff changeset
117 };
e78566595089 initial import
mandel
parents:
diff changeset
118
e78566595089 initial import
mandel
parents:
diff changeset
119 uint attributes() const { return m_attributes; }
e78566595089 initial import
mandel
parents:
diff changeset
120 void setAttributes(uint attributes) { m_attributes = attributes; }
e78566595089 initial import
mandel
parents:
diff changeset
121
e78566595089 initial import
mandel
parents:
diff changeset
122 uint originalAttributes() const { return m_originalAttributes; }
e78566595089 initial import
mandel
parents:
diff changeset
123 void setOriginalAttributes(uint attributes) { m_originalAttributes = attributes; }
e78566595089 initial import
mandel
parents:
diff changeset
124
e78566595089 initial import
mandel
parents:
diff changeset
125 uint visibility() const { return m_attributes & Visibility; }
e78566595089 initial import
mandel
parents:
diff changeset
126 void setVisibility(uint visi) { m_attributes = (m_attributes & ~Visibility) | visi; }
e78566595089 initial import
mandel
parents:
diff changeset
127
e78566595089 initial import
mandel
parents:
diff changeset
128 void operator+=(Attribute attribute) { m_attributes |= attribute; }
e78566595089 initial import
mandel
parents:
diff changeset
129 void operator-=(Attribute attribute) { m_attributes &= ~attribute; }
e78566595089 initial import
mandel
parents:
diff changeset
130
e78566595089 initial import
mandel
parents:
diff changeset
131 bool isNative() const { return m_attributes & Native; }
e78566595089 initial import
mandel
parents:
diff changeset
132 bool isFinal() const { return (m_attributes & Final) == Final; }
e78566595089 initial import
mandel
parents:
diff changeset
133 bool isFinalInTargetLang() const { return m_attributes & FinalInTargetLang; }
e78566595089 initial import
mandel
parents:
diff changeset
134 bool isFinalInCpp() const { return m_attributes & FinalInCpp; }
e78566595089 initial import
mandel
parents:
diff changeset
135 bool isAbstract() const { return m_attributes & Abstract; }
e78566595089 initial import
mandel
parents:
diff changeset
136 bool isStatic() const { return m_attributes & Static; }
e78566595089 initial import
mandel
parents:
diff changeset
137 bool isForcedShellImplementation() const { return m_attributes & ForceShellImplementation; }
e78566595089 initial import
mandel
parents:
diff changeset
138 bool isInterfaceFunction() const { return m_attributes & InterfaceFunction; }
e78566595089 initial import
mandel
parents:
diff changeset
139 bool isFinalOverload() const { return m_attributes & FinalOverload; }
e78566595089 initial import
mandel
parents:
diff changeset
140 bool isInvokable() const { return m_attributes & Invokable; }
e78566595089 initial import
mandel
parents:
diff changeset
141
e78566595089 initial import
mandel
parents:
diff changeset
142 bool isPropertyReader() const { return m_attributes & PropertyReader; }
e78566595089 initial import
mandel
parents:
diff changeset
143 bool isPropertyWriter() const { return m_attributes & PropertyWriter; }
e78566595089 initial import
mandel
parents:
diff changeset
144 bool isPropertyResetter() const { return m_attributes & PropertyResetter; }
e78566595089 initial import
mandel
parents:
diff changeset
145
e78566595089 initial import
mandel
parents:
diff changeset
146 bool isPrivate() const { return m_attributes & Private; }
e78566595089 initial import
mandel
parents:
diff changeset
147 bool isProtected() const { return m_attributes & Protected; }
e78566595089 initial import
mandel
parents:
diff changeset
148 bool isPublic() const { return m_attributes & Public; }
e78566595089 initial import
mandel
parents:
diff changeset
149 bool isFriendly() const { return m_attributes & Friendly; }
e78566595089 initial import
mandel
parents:
diff changeset
150
e78566595089 initial import
mandel
parents:
diff changeset
151 bool wasPrivate() const { return m_originalAttributes & Private; }
e78566595089 initial import
mandel
parents:
diff changeset
152 bool wasProtected() const { return m_originalAttributes & Protected; }
e78566595089 initial import
mandel
parents:
diff changeset
153 bool wasPublic() const { return m_originalAttributes & Public; }
e78566595089 initial import
mandel
parents:
diff changeset
154 bool wasFriendly() const { return m_originalAttributes & Friendly; }
e78566595089 initial import
mandel
parents:
diff changeset
155
e78566595089 initial import
mandel
parents:
diff changeset
156 private:
e78566595089 initial import
mandel
parents:
diff changeset
157 uint m_attributes;
e78566595089 initial import
mandel
parents:
diff changeset
158 uint m_originalAttributes;
e78566595089 initial import
mandel
parents:
diff changeset
159 };
e78566595089 initial import
mandel
parents:
diff changeset
160
e78566595089 initial import
mandel
parents:
diff changeset
161
e78566595089 initial import
mandel
parents:
diff changeset
162 class AbstractMetaType
e78566595089 initial import
mandel
parents:
diff changeset
163 {
e78566595089 initial import
mandel
parents:
diff changeset
164 public:
e78566595089 initial import
mandel
parents:
diff changeset
165 enum TypeUsagePattern {
e78566595089 initial import
mandel
parents:
diff changeset
166 InvalidPattern,
e78566595089 initial import
mandel
parents:
diff changeset
167 PrimitivePattern,
e78566595089 initial import
mandel
parents:
diff changeset
168 FlagsPattern,
e78566595089 initial import
mandel
parents:
diff changeset
169 EnumPattern,
e78566595089 initial import
mandel
parents:
diff changeset
170 ValuePattern,
e78566595089 initial import
mandel
parents:
diff changeset
171 StringPattern,
e78566595089 initial import
mandel
parents:
diff changeset
172 CharPattern,
e78566595089 initial import
mandel
parents:
diff changeset
173 ObjectPattern,
e78566595089 initial import
mandel
parents:
diff changeset
174 QObjectPattern,
e78566595089 initial import
mandel
parents:
diff changeset
175 NativePointerPattern,
e78566595089 initial import
mandel
parents:
diff changeset
176 ContainerPattern,
e78566595089 initial import
mandel
parents:
diff changeset
177 VariantPattern,
e78566595089 initial import
mandel
parents:
diff changeset
178 JObjectWrapperPattern,
e78566595089 initial import
mandel
parents:
diff changeset
179 ArrayPattern,
e78566595089 initial import
mandel
parents:
diff changeset
180 ThreadPattern
e78566595089 initial import
mandel
parents:
diff changeset
181 };
e78566595089 initial import
mandel
parents:
diff changeset
182
e78566595089 initial import
mandel
parents:
diff changeset
183 AbstractMetaType() :
e78566595089 initial import
mandel
parents:
diff changeset
184 m_type_entry(0),
e78566595089 initial import
mandel
parents:
diff changeset
185 m_array_element_count(0),
e78566595089 initial import
mandel
parents:
diff changeset
186 m_array_element_type(0),
e78566595089 initial import
mandel
parents:
diff changeset
187 m_original_template_type(0),
e78566595089 initial import
mandel
parents:
diff changeset
188 m_pattern(InvalidPattern),
e78566595089 initial import
mandel
parents:
diff changeset
189 m_constant(false),
e78566595089 initial import
mandel
parents:
diff changeset
190 m_reference(false),
e78566595089 initial import
mandel
parents:
diff changeset
191 m_cpp_instantiation(true),
e78566595089 initial import
mandel
parents:
diff changeset
192 m_indirections(0),
e78566595089 initial import
mandel
parents:
diff changeset
193 m_reserved(0)
e78566595089 initial import
mandel
parents:
diff changeset
194 {
e78566595089 initial import
mandel
parents:
diff changeset
195 }
e78566595089 initial import
mandel
parents:
diff changeset
196
e78566595089 initial import
mandel
parents:
diff changeset
197 QString package() const { return m_type_entry->javaPackage(); }
e78566595089 initial import
mandel
parents:
diff changeset
198 QString name() const { return m_type_entry->targetLangName(); }
e78566595089 initial import
mandel
parents:
diff changeset
199 QString fullName() const { return m_type_entry->qualifiedTargetLangName(); }
e78566595089 initial import
mandel
parents:
diff changeset
200
e78566595089 initial import
mandel
parents:
diff changeset
201 void setTypeUsagePattern(TypeUsagePattern pattern) { m_pattern = pattern; }
e78566595089 initial import
mandel
parents:
diff changeset
202 TypeUsagePattern typeUsagePattern() const { return m_pattern; }
e78566595089 initial import
mandel
parents:
diff changeset
203
e78566595089 initial import
mandel
parents:
diff changeset
204 // true when use pattern is container
e78566595089 initial import
mandel
parents:
diff changeset
205 bool hasInstantiations() const { return !m_instantiations.isEmpty(); }
e78566595089 initial import
mandel
parents:
diff changeset
206 void addInstantiation(AbstractMetaType *inst) { m_instantiations << inst; }
e78566595089 initial import
mandel
parents:
diff changeset
207 void setInstantiations(const QList<AbstractMetaType *> &insts) { m_instantiations = insts; }
e78566595089 initial import
mandel
parents:
diff changeset
208 QList<AbstractMetaType *> instantiations() const { return m_instantiations; }
e78566595089 initial import
mandel
parents:
diff changeset
209 void setInstantiationInCpp(bool incpp) { m_cpp_instantiation = incpp; }
e78566595089 initial import
mandel
parents:
diff changeset
210 bool hasInstantiationInCpp() const { return hasInstantiations() && m_cpp_instantiation; }
e78566595089 initial import
mandel
parents:
diff changeset
211
e78566595089 initial import
mandel
parents:
diff changeset
212 QString minimalSignature() const;
e78566595089 initial import
mandel
parents:
diff changeset
213
e78566595089 initial import
mandel
parents:
diff changeset
214 // true when the type is a QtJambiObject subclass
e78566595089 initial import
mandel
parents:
diff changeset
215 bool hasNativeId() const;
e78566595089 initial import
mandel
parents:
diff changeset
216
e78566595089 initial import
mandel
parents:
diff changeset
217 // returns true if the typs is used as a non complex primitive, no & or *'s
e78566595089 initial import
mandel
parents:
diff changeset
218 bool isPrimitive() const { return m_pattern == PrimitivePattern; }
e78566595089 initial import
mandel
parents:
diff changeset
219
e78566595089 initial import
mandel
parents:
diff changeset
220 // returns true if the type is used as an enum
e78566595089 initial import
mandel
parents:
diff changeset
221 bool isEnum() const { return m_pattern == EnumPattern; }
e78566595089 initial import
mandel
parents:
diff changeset
222
e78566595089 initial import
mandel
parents:
diff changeset
223 // returns true if the type is used as a QObject *
e78566595089 initial import
mandel
parents:
diff changeset
224 bool isQObject() const { return m_pattern == QObjectPattern; }
e78566595089 initial import
mandel
parents:
diff changeset
225
e78566595089 initial import
mandel
parents:
diff changeset
226 // returns true if the type is used as an object, e.g. Xxx *
e78566595089 initial import
mandel
parents:
diff changeset
227 bool isObject() const { return m_pattern == ObjectPattern; }
e78566595089 initial import
mandel
parents:
diff changeset
228
e78566595089 initial import
mandel
parents:
diff changeset
229 // returns true if the type is used as an array, e.g. Xxx[42]
e78566595089 initial import
mandel
parents:
diff changeset
230 bool isArray() const { return m_pattern == ArrayPattern; }
e78566595089 initial import
mandel
parents:
diff changeset
231
e78566595089 initial import
mandel
parents:
diff changeset
232 // returns true if the type is used as a value type (X or const X &)
e78566595089 initial import
mandel
parents:
diff changeset
233 bool isValue() const { return m_pattern == ValuePattern; }
e78566595089 initial import
mandel
parents:
diff changeset
234
e78566595089 initial import
mandel
parents:
diff changeset
235 // returns true for more complex types...
e78566595089 initial import
mandel
parents:
diff changeset
236 bool isNativePointer() const { return m_pattern == NativePointerPattern; }
e78566595089 initial import
mandel
parents:
diff changeset
237
e78566595089 initial import
mandel
parents:
diff changeset
238 // returns true if the type was originally a QString or const QString & or equivalent for QLatin1String
e78566595089 initial import
mandel
parents:
diff changeset
239 bool isTargetLangString() const { return m_pattern == StringPattern; }
e78566595089 initial import
mandel
parents:
diff changeset
240
e78566595089 initial import
mandel
parents:
diff changeset
241 // returns true if the type was originally a QChar or const QChar &
e78566595089 initial import
mandel
parents:
diff changeset
242 bool isTargetLangChar() const { return m_pattern == CharPattern; }
e78566595089 initial import
mandel
parents:
diff changeset
243
e78566595089 initial import
mandel
parents:
diff changeset
244 // return true if the type was originally a QVariant or const QVariant &
e78566595089 initial import
mandel
parents:
diff changeset
245 bool isVariant() const { return m_pattern == VariantPattern; }
e78566595089 initial import
mandel
parents:
diff changeset
246
e78566595089 initial import
mandel
parents:
diff changeset
247 // return true if the type was originally a JObjectWrapper or const JObjectWrapper &
e78566595089 initial import
mandel
parents:
diff changeset
248 bool isJObjectWrapper() const { return m_pattern == JObjectWrapperPattern; }
e78566595089 initial import
mandel
parents:
diff changeset
249
e78566595089 initial import
mandel
parents:
diff changeset
250 // returns true if the type was used as a container
e78566595089 initial import
mandel
parents:
diff changeset
251 bool isContainer() const { return m_pattern == ContainerPattern; }
e78566595089 initial import
mandel
parents:
diff changeset
252
e78566595089 initial import
mandel
parents:
diff changeset
253 // returns true if the type was used as a flag
e78566595089 initial import
mandel
parents:
diff changeset
254 bool isFlags() const { return m_pattern == FlagsPattern; }
e78566595089 initial import
mandel
parents:
diff changeset
255
e78566595089 initial import
mandel
parents:
diff changeset
256 // returns true if the type was used as a thread
e78566595089 initial import
mandel
parents:
diff changeset
257 bool isThread() const { return m_pattern == ThreadPattern; }
e78566595089 initial import
mandel
parents:
diff changeset
258
e78566595089 initial import
mandel
parents:
diff changeset
259 bool isConstant() const { return m_constant; }
e78566595089 initial import
mandel
parents:
diff changeset
260 void setConstant(bool constant) { m_constant = constant; }
e78566595089 initial import
mandel
parents:
diff changeset
261
e78566595089 initial import
mandel
parents:
diff changeset
262 bool isReference() const { return m_reference; }
e78566595089 initial import
mandel
parents:
diff changeset
263 void setReference(bool ref) { m_reference = ref; }
e78566595089 initial import
mandel
parents:
diff changeset
264
e78566595089 initial import
mandel
parents:
diff changeset
265 // Returns true if the type is to be implemented using Java enums, e.g. not plain ints.
e78566595089 initial import
mandel
parents:
diff changeset
266 bool isTargetLangEnum() const { return isEnum() && !((EnumTypeEntry *) typeEntry())->forceInteger(); }
e78566595089 initial import
mandel
parents:
diff changeset
267 bool isIntegerEnum() const { return isEnum() && !isTargetLangEnum(); }
e78566595089 initial import
mandel
parents:
diff changeset
268
e78566595089 initial import
mandel
parents:
diff changeset
269 // Returns true if the type is to be implemented using Java QFlags, e.g. not plain ints.
e78566595089 initial import
mandel
parents:
diff changeset
270 bool isTargetLangFlags() const {
e78566595089 initial import
mandel
parents:
diff changeset
271 return isFlags() && !((FlagsTypeEntry *) typeEntry())->forceInteger(); }
e78566595089 initial import
mandel
parents:
diff changeset
272 bool isIntegerFlags() const { return isFlags() && !isTargetLangFlags(); }
e78566595089 initial import
mandel
parents:
diff changeset
273
e78566595089 initial import
mandel
parents:
diff changeset
274 int actualIndirections() const { return m_indirections + (isReference() ? 1 : 0); }
e78566595089 initial import
mandel
parents:
diff changeset
275 int indirections() const { return m_indirections; }
e78566595089 initial import
mandel
parents:
diff changeset
276 void setIndirections(int indirections) { m_indirections = indirections; }
e78566595089 initial import
mandel
parents:
diff changeset
277
e78566595089 initial import
mandel
parents:
diff changeset
278 void setArrayElementCount(int n) { m_array_element_count = n; }
e78566595089 initial import
mandel
parents:
diff changeset
279 int arrayElementCount() const { return m_array_element_count; }
e78566595089 initial import
mandel
parents:
diff changeset
280
e78566595089 initial import
mandel
parents:
diff changeset
281 AbstractMetaType *arrayElementType() const { return m_array_element_type; }
e78566595089 initial import
mandel
parents:
diff changeset
282 void setArrayElementType(AbstractMetaType *t) { m_array_element_type = t; }
e78566595089 initial import
mandel
parents:
diff changeset
283
e78566595089 initial import
mandel
parents:
diff changeset
284 QString cppSignature() const;
e78566595089 initial import
mandel
parents:
diff changeset
285
e78566595089 initial import
mandel
parents:
diff changeset
286 AbstractMetaType *copy() const;
e78566595089 initial import
mandel
parents:
diff changeset
287
e78566595089 initial import
mandel
parents:
diff changeset
288 const TypeEntry *typeEntry() const { return m_type_entry; }
e78566595089 initial import
mandel
parents:
diff changeset
289 void setTypeEntry(const TypeEntry *type) { m_type_entry = type; }
e78566595089 initial import
mandel
parents:
diff changeset
290
e78566595089 initial import
mandel
parents:
diff changeset
291 void setOriginalTypeDescription(const QString &otd) { m_original_type_description = otd; }
e78566595089 initial import
mandel
parents:
diff changeset
292 QString originalTypeDescription() const { return m_original_type_description; }
e78566595089 initial import
mandel
parents:
diff changeset
293
e78566595089 initial import
mandel
parents:
diff changeset
294 void setOriginalTemplateType(const AbstractMetaType *type) { m_original_template_type = type; }
e78566595089 initial import
mandel
parents:
diff changeset
295 const AbstractMetaType *originalTemplateType() const { return m_original_template_type; }
e78566595089 initial import
mandel
parents:
diff changeset
296
e78566595089 initial import
mandel
parents:
diff changeset
297 private:
e78566595089 initial import
mandel
parents:
diff changeset
298 const TypeEntry *m_type_entry;
e78566595089 initial import
mandel
parents:
diff changeset
299 QList <AbstractMetaType *> m_instantiations;
e78566595089 initial import
mandel
parents:
diff changeset
300 QString m_package;
e78566595089 initial import
mandel
parents:
diff changeset
301 QString m_original_type_description;
e78566595089 initial import
mandel
parents:
diff changeset
302
e78566595089 initial import
mandel
parents:
diff changeset
303 int m_array_element_count;
e78566595089 initial import
mandel
parents:
diff changeset
304 AbstractMetaType *m_array_element_type;
e78566595089 initial import
mandel
parents:
diff changeset
305 const AbstractMetaType *m_original_template_type;
e78566595089 initial import
mandel
parents:
diff changeset
306
e78566595089 initial import
mandel
parents:
diff changeset
307 TypeUsagePattern m_pattern;
e78566595089 initial import
mandel
parents:
diff changeset
308 uint m_constant : 1;
e78566595089 initial import
mandel
parents:
diff changeset
309 uint m_reference : 1;
e78566595089 initial import
mandel
parents:
diff changeset
310 uint m_cpp_instantiation : 1;
e78566595089 initial import
mandel
parents:
diff changeset
311 int m_indirections : 4;
e78566595089 initial import
mandel
parents:
diff changeset
312 uint m_reserved : 25; // unused
e78566595089 initial import
mandel
parents:
diff changeset
313 };
e78566595089 initial import
mandel
parents:
diff changeset
314
e78566595089 initial import
mandel
parents:
diff changeset
315 class AbstractMetaVariable
e78566595089 initial import
mandel
parents:
diff changeset
316 {
e78566595089 initial import
mandel
parents:
diff changeset
317 public:
e78566595089 initial import
mandel
parents:
diff changeset
318 AbstractMetaVariable() : m_type(0) { }
e78566595089 initial import
mandel
parents:
diff changeset
319
e78566595089 initial import
mandel
parents:
diff changeset
320 AbstractMetaType *type() const { return m_type; }
e78566595089 initial import
mandel
parents:
diff changeset
321 void setType(AbstractMetaType *type) { m_type = type; }
e78566595089 initial import
mandel
parents:
diff changeset
322
e78566595089 initial import
mandel
parents:
diff changeset
323 QString name() const { return m_name; }
e78566595089 initial import
mandel
parents:
diff changeset
324 void setName(const QString &name) { m_name = name; }
e78566595089 initial import
mandel
parents:
diff changeset
325
e78566595089 initial import
mandel
parents:
diff changeset
326 private:
e78566595089 initial import
mandel
parents:
diff changeset
327 QString m_name;
e78566595089 initial import
mandel
parents:
diff changeset
328 AbstractMetaType *m_type;
e78566595089 initial import
mandel
parents:
diff changeset
329 };
e78566595089 initial import
mandel
parents:
diff changeset
330
e78566595089 initial import
mandel
parents:
diff changeset
331
e78566595089 initial import
mandel
parents:
diff changeset
332
e78566595089 initial import
mandel
parents:
diff changeset
333 class AbstractMetaArgument : public AbstractMetaVariable
e78566595089 initial import
mandel
parents:
diff changeset
334 {
e78566595089 initial import
mandel
parents:
diff changeset
335 public:
e78566595089 initial import
mandel
parents:
diff changeset
336 AbstractMetaArgument() : m_argument_index(0) { };
e78566595089 initial import
mandel
parents:
diff changeset
337
e78566595089 initial import
mandel
parents:
diff changeset
338 QString defaultValueExpression() const { return m_expression; }
e78566595089 initial import
mandel
parents:
diff changeset
339 void setDefaultValueExpression(const QString &expr) { m_expression = expr; }
e78566595089 initial import
mandel
parents:
diff changeset
340
e78566595089 initial import
mandel
parents:
diff changeset
341 QString originalDefaultValueExpression() const { return m_original_expression; }
e78566595089 initial import
mandel
parents:
diff changeset
342 void setOriginalDefaultValueExpression(const QString &expr) { m_original_expression = expr; }
e78566595089 initial import
mandel
parents:
diff changeset
343
e78566595089 initial import
mandel
parents:
diff changeset
344 QString toString() const { return type()->name() + " " + AbstractMetaVariable::name() +
e78566595089 initial import
mandel
parents:
diff changeset
345 (m_expression.isEmpty() ? "" : " = " + m_expression); }
e78566595089 initial import
mandel
parents:
diff changeset
346
e78566595089 initial import
mandel
parents:
diff changeset
347 int argumentIndex() const { return m_argument_index; }
e78566595089 initial import
mandel
parents:
diff changeset
348 void setArgumentIndex(int argIndex) { m_argument_index = argIndex; }
e78566595089 initial import
mandel
parents:
diff changeset
349
e78566595089 initial import
mandel
parents:
diff changeset
350 QString argumentName() const;
e78566595089 initial import
mandel
parents:
diff changeset
351 QString indexedName() const;
e78566595089 initial import
mandel
parents:
diff changeset
352
e78566595089 initial import
mandel
parents:
diff changeset
353 AbstractMetaArgument *copy() const;
e78566595089 initial import
mandel
parents:
diff changeset
354
e78566595089 initial import
mandel
parents:
diff changeset
355 private:
e78566595089 initial import
mandel
parents:
diff changeset
356 // Just to force people to call argumentName() And indexedName();
e78566595089 initial import
mandel
parents:
diff changeset
357 QString name() const;
e78566595089 initial import
mandel
parents:
diff changeset
358
e78566595089 initial import
mandel
parents:
diff changeset
359 QString m_expression;
e78566595089 initial import
mandel
parents:
diff changeset
360 QString m_original_expression;
e78566595089 initial import
mandel
parents:
diff changeset
361 int m_argument_index;
e78566595089 initial import
mandel
parents:
diff changeset
362 };
e78566595089 initial import
mandel
parents:
diff changeset
363
e78566595089 initial import
mandel
parents:
diff changeset
364
e78566595089 initial import
mandel
parents:
diff changeset
365 class AbstractMetaField : public AbstractMetaVariable, public AbstractMetaAttributes
e78566595089 initial import
mandel
parents:
diff changeset
366 {
e78566595089 initial import
mandel
parents:
diff changeset
367 public:
e78566595089 initial import
mandel
parents:
diff changeset
368 AbstractMetaField();
e78566595089 initial import
mandel
parents:
diff changeset
369 ~AbstractMetaField();
e78566595089 initial import
mandel
parents:
diff changeset
370
e78566595089 initial import
mandel
parents:
diff changeset
371 const AbstractMetaClass *enclosingClass() const { return m_class; }
e78566595089 initial import
mandel
parents:
diff changeset
372 void setEnclosingClass(const AbstractMetaClass *cls) { m_class = cls; }
e78566595089 initial import
mandel
parents:
diff changeset
373
e78566595089 initial import
mandel
parents:
diff changeset
374 const AbstractMetaFunction *getter() const;
e78566595089 initial import
mandel
parents:
diff changeset
375 const AbstractMetaFunction *setter() const;
e78566595089 initial import
mandel
parents:
diff changeset
376
e78566595089 initial import
mandel
parents:
diff changeset
377 FieldModificationList modifications() const;
e78566595089 initial import
mandel
parents:
diff changeset
378
e78566595089 initial import
mandel
parents:
diff changeset
379 AbstractMetaField *copy() const;
e78566595089 initial import
mandel
parents:
diff changeset
380
e78566595089 initial import
mandel
parents:
diff changeset
381 private:
e78566595089 initial import
mandel
parents:
diff changeset
382 mutable AbstractMetaFunction *m_getter;
e78566595089 initial import
mandel
parents:
diff changeset
383 mutable AbstractMetaFunction *m_setter;
e78566595089 initial import
mandel
parents:
diff changeset
384 const AbstractMetaClass *m_class;
e78566595089 initial import
mandel
parents:
diff changeset
385 };
e78566595089 initial import
mandel
parents:
diff changeset
386
e78566595089 initial import
mandel
parents:
diff changeset
387
e78566595089 initial import
mandel
parents:
diff changeset
388 class AbstractMetaFunction : public AbstractMetaAttributes
e78566595089 initial import
mandel
parents:
diff changeset
389 {
e78566595089 initial import
mandel
parents:
diff changeset
390 public:
e78566595089 initial import
mandel
parents:
diff changeset
391 enum FunctionType {
e78566595089 initial import
mandel
parents:
diff changeset
392 ConstructorFunction,
e78566595089 initial import
mandel
parents:
diff changeset
393 DestructorFunction,
e78566595089 initial import
mandel
parents:
diff changeset
394 NormalFunction,
e78566595089 initial import
mandel
parents:
diff changeset
395 SignalFunction,
e78566595089 initial import
mandel
parents:
diff changeset
396 EmptyFunction,
e78566595089 initial import
mandel
parents:
diff changeset
397 SlotFunction,
e78566595089 initial import
mandel
parents:
diff changeset
398 GlobalScopeFunction
e78566595089 initial import
mandel
parents:
diff changeset
399 };
e78566595089 initial import
mandel
parents:
diff changeset
400
e78566595089 initial import
mandel
parents:
diff changeset
401 enum CompareResult {
e78566595089 initial import
mandel
parents:
diff changeset
402 EqualName = 0x00000001,
e78566595089 initial import
mandel
parents:
diff changeset
403 EqualArguments = 0x00000002,
e78566595089 initial import
mandel
parents:
diff changeset
404 EqualAttributes = 0x00000004,
e78566595089 initial import
mandel
parents:
diff changeset
405 EqualImplementor = 0x00000008,
e78566595089 initial import
mandel
parents:
diff changeset
406 EqualReturnType = 0x00000010,
e78566595089 initial import
mandel
parents:
diff changeset
407 EqualDefaultValueOverload = 0x00000020,
e78566595089 initial import
mandel
parents:
diff changeset
408 EqualModifiedName = 0x00000040,
e78566595089 initial import
mandel
parents:
diff changeset
409
e78566595089 initial import
mandel
parents:
diff changeset
410 NameLessThan = 0x00001000,
e78566595089 initial import
mandel
parents:
diff changeset
411
e78566595089 initial import
mandel
parents:
diff changeset
412 PrettySimilar = EqualName | EqualArguments,
e78566595089 initial import
mandel
parents:
diff changeset
413 Equal = 0x0000001f,
e78566595089 initial import
mandel
parents:
diff changeset
414 NotEqual = 0x00001000
e78566595089 initial import
mandel
parents:
diff changeset
415 };
e78566595089 initial import
mandel
parents:
diff changeset
416
e78566595089 initial import
mandel
parents:
diff changeset
417 AbstractMetaFunction()
e78566595089 initial import
mandel
parents:
diff changeset
418 : m_function_type(NormalFunction),
e78566595089 initial import
mandel
parents:
diff changeset
419 m_type(0),
e78566595089 initial import
mandel
parents:
diff changeset
420 m_class(0),
e78566595089 initial import
mandel
parents:
diff changeset
421 m_implementing_class(0),
e78566595089 initial import
mandel
parents:
diff changeset
422 m_declaring_class(0),
e78566595089 initial import
mandel
parents:
diff changeset
423 m_interface_class(0),
e78566595089 initial import
mandel
parents:
diff changeset
424 m_property_spec(0),
e78566595089 initial import
mandel
parents:
diff changeset
425 m_constant(false),
e78566595089 initial import
mandel
parents:
diff changeset
426 m_invalid(false),
e78566595089 initial import
mandel
parents:
diff changeset
427 m_jumptable_id(-1),
e78566595089 initial import
mandel
parents:
diff changeset
428 // qtd
e78566595089 initial import
mandel
parents:
diff changeset
429 m_store_result(0)
e78566595089 initial import
mandel
parents:
diff changeset
430 {
e78566595089 initial import
mandel
parents:
diff changeset
431 }
e78566595089 initial import
mandel
parents:
diff changeset
432
e78566595089 initial import
mandel
parents:
diff changeset
433 ~AbstractMetaFunction();
e78566595089 initial import
mandel
parents:
diff changeset
434
e78566595089 initial import
mandel
parents:
diff changeset
435 QString name() const { return m_name; }
e78566595089 initial import
mandel
parents:
diff changeset
436 void setName(const QString &name) { m_name = name; }
e78566595089 initial import
mandel
parents:
diff changeset
437
e78566595089 initial import
mandel
parents:
diff changeset
438 QString originalName() const { return m_original_name.isEmpty() ? name() : m_original_name; }
e78566595089 initial import
mandel
parents:
diff changeset
439 void setOriginalName(const QString &name) { m_original_name = name; }
e78566595089 initial import
mandel
parents:
diff changeset
440
e78566595089 initial import
mandel
parents:
diff changeset
441 QString modifiedName() const;
e78566595089 initial import
mandel
parents:
diff changeset
442
288
f9559a957be9 new signals and slots implementation
eldar
parents: 110
diff changeset
443 QString minimalSignature(int reduce = 0) const;
1
e78566595089 initial import
mandel
parents:
diff changeset
444 QStringList possibleIntrospectionCompatibleSignatures() const;
e78566595089 initial import
mandel
parents:
diff changeset
445
e78566595089 initial import
mandel
parents:
diff changeset
446 QString marshalledName(bool classIsOwner = true) const;
e78566595089 initial import
mandel
parents:
diff changeset
447
e78566595089 initial import
mandel
parents:
diff changeset
448 // true if one or more of the arguments are of QtJambiObject subclasses
e78566595089 initial import
mandel
parents:
diff changeset
449 bool argumentsHaveNativeId() const
e78566595089 initial import
mandel
parents:
diff changeset
450 {
e78566595089 initial import
mandel
parents:
diff changeset
451 foreach (const AbstractMetaArgument *arg, m_arguments) {
e78566595089 initial import
mandel
parents:
diff changeset
452 if (arg->type()->hasNativeId())
e78566595089 initial import
mandel
parents:
diff changeset
453 return true;
e78566595089 initial import
mandel
parents:
diff changeset
454 }
e78566595089 initial import
mandel
parents:
diff changeset
455
e78566595089 initial import
mandel
parents:
diff changeset
456 return false;
e78566595089 initial import
mandel
parents:
diff changeset
457 }
e78566595089 initial import
mandel
parents:
diff changeset
458
e78566595089 initial import
mandel
parents:
diff changeset
459 bool isModifiedRemoved(int types = TypeSystem::All) const;
e78566595089 initial import
mandel
parents:
diff changeset
460
e78566595089 initial import
mandel
parents:
diff changeset
461 AbstractMetaType *type() const { return m_type; }
e78566595089 initial import
mandel
parents:
diff changeset
462 void setType(AbstractMetaType *type) { m_type = type; }
e78566595089 initial import
mandel
parents:
diff changeset
463
e78566595089 initial import
mandel
parents:
diff changeset
464 // The class that has this function as a member.
e78566595089 initial import
mandel
parents:
diff changeset
465 const AbstractMetaClass *ownerClass() const { return m_class; }
e78566595089 initial import
mandel
parents:
diff changeset
466 void setOwnerClass(const AbstractMetaClass *cls) { m_class = cls; }
e78566595089 initial import
mandel
parents:
diff changeset
467
e78566595089 initial import
mandel
parents:
diff changeset
468 // The first class in a hierarchy that declares the function
e78566595089 initial import
mandel
parents:
diff changeset
469 const AbstractMetaClass *declaringClass() const { return m_declaring_class; }
e78566595089 initial import
mandel
parents:
diff changeset
470 void setDeclaringClass(const AbstractMetaClass *cls) { m_declaring_class = cls; }
e78566595089 initial import
mandel
parents:
diff changeset
471
e78566595089 initial import
mandel
parents:
diff changeset
472 // The class that actually implements this function
e78566595089 initial import
mandel
parents:
diff changeset
473 const AbstractMetaClass *implementingClass() const { return m_implementing_class; }
e78566595089 initial import
mandel
parents:
diff changeset
474 void setImplementingClass(const AbstractMetaClass *cls) { m_implementing_class = cls; }
e78566595089 initial import
mandel
parents:
diff changeset
475
e78566595089 initial import
mandel
parents:
diff changeset
476 bool needsCallThrough() const;
e78566595089 initial import
mandel
parents:
diff changeset
477
e78566595089 initial import
mandel
parents:
diff changeset
478 AbstractMetaArgumentList arguments() const { return m_arguments; }
e78566595089 initial import
mandel
parents:
diff changeset
479 void setArguments(const AbstractMetaArgumentList &arguments) { m_arguments = arguments; }
e78566595089 initial import
mandel
parents:
diff changeset
480 void addArgument(AbstractMetaArgument *argument) { m_arguments << argument; }
e78566595089 initial import
mandel
parents:
diff changeset
481 int actualMinimumArgumentCount() const;
e78566595089 initial import
mandel
parents:
diff changeset
482
e78566595089 initial import
mandel
parents:
diff changeset
483 void setInvalid(bool on) { m_invalid = on; }
e78566595089 initial import
mandel
parents:
diff changeset
484 bool isInvalid() const { return m_invalid; }
e78566595089 initial import
mandel
parents:
diff changeset
485 bool isDeprecated() const;
e78566595089 initial import
mandel
parents:
diff changeset
486 bool isDestructor() const { return functionType() == DestructorFunction; }
e78566595089 initial import
mandel
parents:
diff changeset
487 bool isConstructor() const { return functionType() == ConstructorFunction; }
e78566595089 initial import
mandel
parents:
diff changeset
488 bool isNormal() const { return functionType() == NormalFunction || isSlot() || isInGlobalScope(); }
e78566595089 initial import
mandel
parents:
diff changeset
489 bool isInGlobalScope() const { return functionType() == GlobalScopeFunction; }
e78566595089 initial import
mandel
parents:
diff changeset
490 bool isSignal() const { return functionType() == SignalFunction; }
e78566595089 initial import
mandel
parents:
diff changeset
491 bool isSlot() const { return functionType() == SlotFunction; }
e78566595089 initial import
mandel
parents:
diff changeset
492 bool isEmptyFunction() const { return functionType() == EmptyFunction; }
e78566595089 initial import
mandel
parents:
diff changeset
493 FunctionType functionType() const { return m_function_type; }
e78566595089 initial import
mandel
parents:
diff changeset
494 void setFunctionType(FunctionType type) { m_function_type = type; }
e78566595089 initial import
mandel
parents:
diff changeset
495
e78566595089 initial import
mandel
parents:
diff changeset
496 QStringList introspectionCompatibleSignatures(const QStringList &resolvedArguments = QStringList()) const;
e78566595089 initial import
mandel
parents:
diff changeset
497 QString signature() const;
e78566595089 initial import
mandel
parents:
diff changeset
498 QString targetLangSignature(bool minimal = false) const;
e78566595089 initial import
mandel
parents:
diff changeset
499 bool shouldReturnThisObject() const { return QLatin1String("this") == argumentReplaced(0); }
e78566595089 initial import
mandel
parents:
diff changeset
500
e78566595089 initial import
mandel
parents:
diff changeset
501 bool isConstant() const { return m_constant; }
e78566595089 initial import
mandel
parents:
diff changeset
502 void setConstant(bool constant) { m_constant = constant; }
e78566595089 initial import
mandel
parents:
diff changeset
503
e78566595089 initial import
mandel
parents:
diff changeset
504 QString toString() const { return m_name; }
e78566595089 initial import
mandel
parents:
diff changeset
505
e78566595089 initial import
mandel
parents:
diff changeset
506 uint compareTo(const AbstractMetaFunction *other) const;
e78566595089 initial import
mandel
parents:
diff changeset
507
e78566595089 initial import
mandel
parents:
diff changeset
508 bool operator <(const AbstractMetaFunction &a) const;
e78566595089 initial import
mandel
parents:
diff changeset
509
e78566595089 initial import
mandel
parents:
diff changeset
510 AbstractMetaFunction *copy() const;
e78566595089 initial import
mandel
parents:
diff changeset
511
e78566595089 initial import
mandel
parents:
diff changeset
512 QString replacedDefaultExpression(const AbstractMetaClass *cls, int idx) const;
e78566595089 initial import
mandel
parents:
diff changeset
513 bool removedDefaultExpression(const AbstractMetaClass *cls, int idx) const;
e78566595089 initial import
mandel
parents:
diff changeset
514 QString conversionRule(TypeSystem::Language language, int idx) const;
e78566595089 initial import
mandel
parents:
diff changeset
515 QList<ReferenceCount> referenceCounts(const AbstractMetaClass *cls, int idx = -2) const;
e78566595089 initial import
mandel
parents:
diff changeset
516
e78566595089 initial import
mandel
parents:
diff changeset
517 bool nullPointersDisabled(const AbstractMetaClass *cls = 0, int argument_idx = 0) const;
e78566595089 initial import
mandel
parents:
diff changeset
518 QString nullPointerDefaultValue(const AbstractMetaClass *cls = 0, int argument_idx = 0) const;
e78566595089 initial import
mandel
parents:
diff changeset
519
e78566595089 initial import
mandel
parents:
diff changeset
520 bool resetObjectAfterUse(int argument_idx) const;
e78566595089 initial import
mandel
parents:
diff changeset
521
e78566595089 initial import
mandel
parents:
diff changeset
522 // Returns whether garbage collection is disabled for the argument in any context
e78566595089 initial import
mandel
parents:
diff changeset
523 bool disabledGarbageCollection(const AbstractMetaClass *cls, int key) const;
e78566595089 initial import
mandel
parents:
diff changeset
524
e78566595089 initial import
mandel
parents:
diff changeset
525 // Returns the ownership rules for the given argument in the given context
e78566595089 initial import
mandel
parents:
diff changeset
526 TypeSystem::Ownership ownership(const AbstractMetaClass *cls, TypeSystem::Language language, int idx) const;
e78566595089 initial import
mandel
parents:
diff changeset
527
e78566595089 initial import
mandel
parents:
diff changeset
528 bool isVirtualSlot() const;
e78566595089 initial import
mandel
parents:
diff changeset
529
e78566595089 initial import
mandel
parents:
diff changeset
530 QString typeReplaced(int argument_index) const;
e78566595089 initial import
mandel
parents:
diff changeset
531 bool isRemovedFromAllLanguages(const AbstractMetaClass *) const;
e78566595089 initial import
mandel
parents:
diff changeset
532 bool isRemovedFrom(const AbstractMetaClass *, TypeSystem::Language language) const;
e78566595089 initial import
mandel
parents:
diff changeset
533 bool argumentRemoved(int) const;
e78566595089 initial import
mandel
parents:
diff changeset
534
e78566595089 initial import
mandel
parents:
diff changeset
535 QString argumentReplaced(int key) const;
e78566595089 initial import
mandel
parents:
diff changeset
536 bool needsSuppressUncheckedWarning() const;
e78566595089 initial import
mandel
parents:
diff changeset
537
e78566595089 initial import
mandel
parents:
diff changeset
538 bool hasModifications(const AbstractMetaClass *implementor) const;
e78566595089 initial import
mandel
parents:
diff changeset
539 FunctionModificationList modifications(const AbstractMetaClass *implementor) const;
e78566595089 initial import
mandel
parents:
diff changeset
540
e78566595089 initial import
mandel
parents:
diff changeset
541 // If this function stems from an interface, this returns the
e78566595089 initial import
mandel
parents:
diff changeset
542 // interface that declares it.
e78566595089 initial import
mandel
parents:
diff changeset
543 const AbstractMetaClass *interfaceClass() const { return m_interface_class; }
e78566595089 initial import
mandel
parents:
diff changeset
544 void setInterfaceClass(const AbstractMetaClass *cl) { m_interface_class = cl; }
e78566595089 initial import
mandel
parents:
diff changeset
545
e78566595089 initial import
mandel
parents:
diff changeset
546 void setPropertySpec(QPropertySpec *spec) { m_property_spec = spec; }
e78566595089 initial import
mandel
parents:
diff changeset
547 QPropertySpec *propertySpec() const { return m_property_spec; }
e78566595089 initial import
mandel
parents:
diff changeset
548
e78566595089 initial import
mandel
parents:
diff changeset
549 int jumpTableId() const { return m_jumptable_id; }
e78566595089 initial import
mandel
parents:
diff changeset
550 void setJumpTableId(int id) { m_jumptable_id = id; }
e78566595089 initial import
mandel
parents:
diff changeset
551
e78566595089 initial import
mandel
parents:
diff changeset
552 // qtd
e78566595089 initial import
mandel
parents:
diff changeset
553 bool storeResult() const;
e78566595089 initial import
mandel
parents:
diff changeset
554 void checkStoreResult();
e78566595089 initial import
mandel
parents:
diff changeset
555
e78566595089 initial import
mandel
parents:
diff changeset
556 private:
e78566595089 initial import
mandel
parents:
diff changeset
557 int m_store_result;
e78566595089 initial import
mandel
parents:
diff changeset
558
e78566595089 initial import
mandel
parents:
diff changeset
559 private:
e78566595089 initial import
mandel
parents:
diff changeset
560 QString m_name;
e78566595089 initial import
mandel
parents:
diff changeset
561 QString m_original_name;
e78566595089 initial import
mandel
parents:
diff changeset
562 mutable QString m_cached_minimal_signature;
e78566595089 initial import
mandel
parents:
diff changeset
563 mutable QString m_cached_modified_name;
e78566595089 initial import
mandel
parents:
diff changeset
564
e78566595089 initial import
mandel
parents:
diff changeset
565 FunctionType m_function_type;
e78566595089 initial import
mandel
parents:
diff changeset
566 AbstractMetaType *m_type;
e78566595089 initial import
mandel
parents:
diff changeset
567 const AbstractMetaClass *m_class;
e78566595089 initial import
mandel
parents:
diff changeset
568 const AbstractMetaClass *m_implementing_class;
e78566595089 initial import
mandel
parents:
diff changeset
569 const AbstractMetaClass *m_declaring_class;
e78566595089 initial import
mandel
parents:
diff changeset
570 const AbstractMetaClass *m_interface_class;
e78566595089 initial import
mandel
parents:
diff changeset
571 QPropertySpec *m_property_spec;
e78566595089 initial import
mandel
parents:
diff changeset
572 AbstractMetaArgumentList m_arguments;
e78566595089 initial import
mandel
parents:
diff changeset
573 uint m_constant : 1;
e78566595089 initial import
mandel
parents:
diff changeset
574 uint m_invalid : 1;
e78566595089 initial import
mandel
parents:
diff changeset
575 int m_jumptable_id;
e78566595089 initial import
mandel
parents:
diff changeset
576 };
e78566595089 initial import
mandel
parents:
diff changeset
577
e78566595089 initial import
mandel
parents:
diff changeset
578
e78566595089 initial import
mandel
parents:
diff changeset
579 class AbstractMetaEnumValue
e78566595089 initial import
mandel
parents:
diff changeset
580 {
e78566595089 initial import
mandel
parents:
diff changeset
581 public:
e78566595089 initial import
mandel
parents:
diff changeset
582 AbstractMetaEnumValue()
e78566595089 initial import
mandel
parents:
diff changeset
583 : m_value_set(false), m_value(0)
e78566595089 initial import
mandel
parents:
diff changeset
584 {
e78566595089 initial import
mandel
parents:
diff changeset
585 }
e78566595089 initial import
mandel
parents:
diff changeset
586
e78566595089 initial import
mandel
parents:
diff changeset
587 int value() const { return m_value; }
e78566595089 initial import
mandel
parents:
diff changeset
588 void setValue(int value) { m_value_set = true; m_value = value; }
e78566595089 initial import
mandel
parents:
diff changeset
589
e78566595089 initial import
mandel
parents:
diff changeset
590 QString stringValue() const { return m_string_value; }
e78566595089 initial import
mandel
parents:
diff changeset
591 void setStringValue(const QString &v) { m_string_value = v; }
e78566595089 initial import
mandel
parents:
diff changeset
592
e78566595089 initial import
mandel
parents:
diff changeset
593 QString name() const { return m_name; }
e78566595089 initial import
mandel
parents:
diff changeset
594 void setName(const QString &name) { m_name = name; }
e78566595089 initial import
mandel
parents:
diff changeset
595
e78566595089 initial import
mandel
parents:
diff changeset
596 bool isValueSet() const { return m_value_set; }
e78566595089 initial import
mandel
parents:
diff changeset
597
e78566595089 initial import
mandel
parents:
diff changeset
598 private:
e78566595089 initial import
mandel
parents:
diff changeset
599 QString m_name;
e78566595089 initial import
mandel
parents:
diff changeset
600 QString m_string_value;
e78566595089 initial import
mandel
parents:
diff changeset
601
e78566595089 initial import
mandel
parents:
diff changeset
602 bool m_value_set;
e78566595089 initial import
mandel
parents:
diff changeset
603 int m_value;
e78566595089 initial import
mandel
parents:
diff changeset
604 };
e78566595089 initial import
mandel
parents:
diff changeset
605
e78566595089 initial import
mandel
parents:
diff changeset
606
e78566595089 initial import
mandel
parents:
diff changeset
607 class AbstractMetaEnumValueList : public QList<AbstractMetaEnumValue *>
e78566595089 initial import
mandel
parents:
diff changeset
608 {
e78566595089 initial import
mandel
parents:
diff changeset
609 public:
e78566595089 initial import
mandel
parents:
diff changeset
610 AbstractMetaEnumValue *find(const QString &name) const;
e78566595089 initial import
mandel
parents:
diff changeset
611 };
e78566595089 initial import
mandel
parents:
diff changeset
612
e78566595089 initial import
mandel
parents:
diff changeset
613 class AbstractMetaEnum : public AbstractMetaAttributes
e78566595089 initial import
mandel
parents:
diff changeset
614 {
e78566595089 initial import
mandel
parents:
diff changeset
615 public:
e78566595089 initial import
mandel
parents:
diff changeset
616 AbstractMetaEnum() : m_type_entry(0), m_class(0), m_has_qenums_declaration(false) {}
e78566595089 initial import
mandel
parents:
diff changeset
617
e78566595089 initial import
mandel
parents:
diff changeset
618 AbstractMetaEnumValueList values() const { return m_enum_values; }
e78566595089 initial import
mandel
parents:
diff changeset
619 void addEnumValue(AbstractMetaEnumValue *enumValue) { m_enum_values << enumValue; }
e78566595089 initial import
mandel
parents:
diff changeset
620
e78566595089 initial import
mandel
parents:
diff changeset
621 QString name() const { return m_type_entry->targetLangName(); }
e78566595089 initial import
mandel
parents:
diff changeset
622 QString qualifier() const { return m_type_entry->javaQualifier(); }
e78566595089 initial import
mandel
parents:
diff changeset
623 QString package() const { return m_type_entry->javaPackage(); }
e78566595089 initial import
mandel
parents:
diff changeset
624 QString fullName() const { return package() + "." + qualifier() + "." + name(); }
e78566595089 initial import
mandel
parents:
diff changeset
625
e78566595089 initial import
mandel
parents:
diff changeset
626 // Has the enum been declared inside a Q_ENUMS() macro in its enclosing class?
e78566595089 initial import
mandel
parents:
diff changeset
627 void setHasQEnumsDeclaration(bool on) { m_has_qenums_declaration = on; }
e78566595089 initial import
mandel
parents:
diff changeset
628 bool hasQEnumsDeclaration() const { return m_has_qenums_declaration; }
e78566595089 initial import
mandel
parents:
diff changeset
629
e78566595089 initial import
mandel
parents:
diff changeset
630 EnumTypeEntry *typeEntry() const { return m_type_entry; }
e78566595089 initial import
mandel
parents:
diff changeset
631 void setTypeEntry(EnumTypeEntry *entry) { m_type_entry = entry; }
e78566595089 initial import
mandel
parents:
diff changeset
632
e78566595089 initial import
mandel
parents:
diff changeset
633 AbstractMetaClass *enclosingClass() const { return m_class; }
e78566595089 initial import
mandel
parents:
diff changeset
634 void setEnclosingClass(AbstractMetaClass *c) { m_class = c; }
e78566595089 initial import
mandel
parents:
diff changeset
635
e78566595089 initial import
mandel
parents:
diff changeset
636 private:
e78566595089 initial import
mandel
parents:
diff changeset
637 AbstractMetaEnumValueList m_enum_values;
e78566595089 initial import
mandel
parents:
diff changeset
638 EnumTypeEntry *m_type_entry;
e78566595089 initial import
mandel
parents:
diff changeset
639 AbstractMetaClass *m_class;
e78566595089 initial import
mandel
parents:
diff changeset
640
e78566595089 initial import
mandel
parents:
diff changeset
641 uint m_has_qenums_declaration : 1;
e78566595089 initial import
mandel
parents:
diff changeset
642 uint m_reserved : 31;
e78566595089 initial import
mandel
parents:
diff changeset
643 };
e78566595089 initial import
mandel
parents:
diff changeset
644
e78566595089 initial import
mandel
parents:
diff changeset
645 typedef QList<AbstractMetaEnum *> AbstractMetaEnumList;
e78566595089 initial import
mandel
parents:
diff changeset
646
e78566595089 initial import
mandel
parents:
diff changeset
647 class AbstractMetaClass : public AbstractMetaAttributes
e78566595089 initial import
mandel
parents:
diff changeset
648 {
e78566595089 initial import
mandel
parents:
diff changeset
649 public:
e78566595089 initial import
mandel
parents:
diff changeset
650 enum FunctionQueryOption {
e78566595089 initial import
mandel
parents:
diff changeset
651 Constructors = 0x000001, // Only constructors
e78566595089 initial import
mandel
parents:
diff changeset
652 //Destructors = 0x000002, // Only destructors. Not included in class.
e78566595089 initial import
mandel
parents:
diff changeset
653 VirtualFunctions = 0x000004, // Only virtual functions (virtual in both TargetLang and C++)
e78566595089 initial import
mandel
parents:
diff changeset
654 FinalInTargetLangFunctions = 0x000008, // Only functions that are non-virtual in TargetLang
e78566595089 initial import
mandel
parents:
diff changeset
655 FinalInCppFunctions = 0x000010, // Only functions that are non-virtual in C++
e78566595089 initial import
mandel
parents:
diff changeset
656 ClassImplements = 0x000020, // Only functions implemented by the current class
e78566595089 initial import
mandel
parents:
diff changeset
657 Inconsistent = 0x000040, // Only inconsistent functions (inconsistent virtualness in TargetLang/C++)
e78566595089 initial import
mandel
parents:
diff changeset
658 StaticFunctions = 0x000080, // Only static functions
e78566595089 initial import
mandel
parents:
diff changeset
659 Signals = 0x000100, // Only signals
e78566595089 initial import
mandel
parents:
diff changeset
660 NormalFunctions = 0x000200, // Only functions that aren't signals
e78566595089 initial import
mandel
parents:
diff changeset
661 Visible = 0x000400, // Only public and protected functions
e78566595089 initial import
mandel
parents:
diff changeset
662 ForcedShellFunctions = 0x000800, // Only functions that are overridden to be implemented in the shell class
e78566595089 initial import
mandel
parents:
diff changeset
663 WasPublic = 0x001000, // Only functions that were originally public
e78566595089 initial import
mandel
parents:
diff changeset
664 WasProtected = 0x002000, // Only functions that were originally protected
e78566595089 initial import
mandel
parents:
diff changeset
665 NonStaticFunctions = 0x004000, // No static functions
e78566595089 initial import
mandel
parents:
diff changeset
666 Empty = 0x008000, // Empty overrides of abstract functions
e78566595089 initial import
mandel
parents:
diff changeset
667 Invisible = 0x010000, // Only private functions
e78566595089 initial import
mandel
parents:
diff changeset
668 VirtualInCppFunctions = 0x020000, // Only functions that are virtual in C++
e78566595089 initial import
mandel
parents:
diff changeset
669 NonEmptyFunctions = 0x040000, // Only functions with JNI implementations
e78566595089 initial import
mandel
parents:
diff changeset
670 VirtualInTargetLangFunctions = 0x080000, // Only functions which are virtual in TargetLang
e78566595089 initial import
mandel
parents:
diff changeset
671 AbstractFunctions = 0x100000, // Only abstract functions
e78566595089 initial import
mandel
parents:
diff changeset
672 WasVisible = 0x200000, // Only functions that were public or protected in the original code
e78566595089 initial import
mandel
parents:
diff changeset
673 NotRemovedFromTargetLang = 0x400000, // Only functions that have not been removed from TargetLang
e78566595089 initial import
mandel
parents:
diff changeset
674 NotRemovedFromShell = 0x800000, // Only functions that have not been removed from the shell class
e78566595089 initial import
mandel
parents:
diff changeset
675 VirtualSlots = 0x1000000 // Only functions that are set as virtual slots in the type system
e78566595089 initial import
mandel
parents:
diff changeset
676 };
e78566595089 initial import
mandel
parents:
diff changeset
677
e78566595089 initial import
mandel
parents:
diff changeset
678 AbstractMetaClass()
e78566595089 initial import
mandel
parents:
diff changeset
679 : m_namespace(false),
e78566595089 initial import
mandel
parents:
diff changeset
680 m_qobject(false),
e78566595089 initial import
mandel
parents:
diff changeset
681 m_has_virtuals(false),
e78566595089 initial import
mandel
parents:
diff changeset
682 m_has_nonpublic(false),
e78566595089 initial import
mandel
parents:
diff changeset
683 m_has_virtual_slots(false),
e78566595089 initial import
mandel
parents:
diff changeset
684 m_has_nonprivateconstructor(false),
e78566595089 initial import
mandel
parents:
diff changeset
685 m_functions_fixed(false),
e78566595089 initial import
mandel
parents:
diff changeset
686 m_has_public_destructor(true),
e78566595089 initial import
mandel
parents:
diff changeset
687 m_force_shell_class(false),
e78566595089 initial import
mandel
parents:
diff changeset
688 m_has_hash_function(false),
e78566595089 initial import
mandel
parents:
diff changeset
689 m_has_equals_operator(false),
e78566595089 initial import
mandel
parents:
diff changeset
690 m_has_clone_operator(false),
e78566595089 initial import
mandel
parents:
diff changeset
691 m_is_type_alias(false),
e78566595089 initial import
mandel
parents:
diff changeset
692 m_enclosing_class(0),
e78566595089 initial import
mandel
parents:
diff changeset
693 m_base_class(0),
e78566595089 initial import
mandel
parents:
diff changeset
694 m_template_base_class(0),
e78566595089 initial import
mandel
parents:
diff changeset
695 m_extracted_interface(0),
e78566595089 initial import
mandel
parents:
diff changeset
696 m_primary_interface_implementor(0),
e78566595089 initial import
mandel
parents:
diff changeset
697 m_type_entry(0),
110
136c9ee83ee5 put conversion code in separate functions
eldar
parents: 42
diff changeset
698 m_qDebug_stream_function(0),
136c9ee83ee5 put conversion code in separate functions
eldar
parents: 42
diff changeset
699 needsConversionFunc(false)
1
e78566595089 initial import
mandel
parents:
diff changeset
700 {
e78566595089 initial import
mandel
parents:
diff changeset
701 }
e78566595089 initial import
mandel
parents:
diff changeset
702
e78566595089 initial import
mandel
parents:
diff changeset
703 virtual ~AbstractMetaClass();
e78566595089 initial import
mandel
parents:
diff changeset
704
e78566595089 initial import
mandel
parents:
diff changeset
705 AbstractMetaClass *extractInterface();
e78566595089 initial import
mandel
parents:
diff changeset
706 void fixFunctions();
e78566595089 initial import
mandel
parents:
diff changeset
707
e78566595089 initial import
mandel
parents:
diff changeset
708 AbstractMetaFunctionList functions() const { return m_functions; }
e78566595089 initial import
mandel
parents:
diff changeset
709 void setFunctions(const AbstractMetaFunctionList &functions);
e78566595089 initial import
mandel
parents:
diff changeset
710 void addFunction(AbstractMetaFunction *function);
e78566595089 initial import
mandel
parents:
diff changeset
711 bool hasFunction(const AbstractMetaFunction *f) const;
e78566595089 initial import
mandel
parents:
diff changeset
712 bool hasFunction(const QString &str) const;
e78566595089 initial import
mandel
parents:
diff changeset
713 bool hasSignal(const AbstractMetaFunction *f) const;
e78566595089 initial import
mandel
parents:
diff changeset
714
e78566595089 initial import
mandel
parents:
diff changeset
715 bool hasConstructors() const;
e78566595089 initial import
mandel
parents:
diff changeset
716
e78566595089 initial import
mandel
parents:
diff changeset
717 void addDefaultConstructor();
e78566595089 initial import
mandel
parents:
diff changeset
718
e78566595089 initial import
mandel
parents:
diff changeset
719 bool hasNonPrivateConstructor() const { return m_has_nonprivateconstructor; }
e78566595089 initial import
mandel
parents:
diff changeset
720 void setHasNonPrivateConstructor(bool on) { m_has_nonprivateconstructor = on; }
e78566595089 initial import
mandel
parents:
diff changeset
721 bool hasPublicDestructor() const { return m_has_public_destructor; }
e78566595089 initial import
mandel
parents:
diff changeset
722 void setHasPublicDestructor(bool on) { m_has_public_destructor = on; }
e78566595089 initial import
mandel
parents:
diff changeset
723
e78566595089 initial import
mandel
parents:
diff changeset
724 AbstractMetaFunctionList queryFunctionsByName(const QString &name) const;
e78566595089 initial import
mandel
parents:
diff changeset
725 AbstractMetaFunctionList queryFunctions(uint query) const;
e78566595089 initial import
mandel
parents:
diff changeset
726 inline AbstractMetaFunctionList allVirtualFunctions() const;
e78566595089 initial import
mandel
parents:
diff changeset
727 inline AbstractMetaFunctionList allFinalFunctions() const;
e78566595089 initial import
mandel
parents:
diff changeset
728 AbstractMetaFunctionList functionsInTargetLang() const;
e78566595089 initial import
mandel
parents:
diff changeset
729 AbstractMetaFunctionList functionsInShellClass() const;
e78566595089 initial import
mandel
parents:
diff changeset
730 inline AbstractMetaFunctionList cppInconsistentFunctions() const;
e78566595089 initial import
mandel
parents:
diff changeset
731 inline AbstractMetaFunctionList cppSignalFunctions() const;
e78566595089 initial import
mandel
parents:
diff changeset
732 AbstractMetaFunctionList publicOverrideFunctions() const;
e78566595089 initial import
mandel
parents:
diff changeset
733 AbstractMetaFunctionList virtualOverrideFunctions() const;
e78566595089 initial import
mandel
parents:
diff changeset
734 AbstractMetaFunctionList virtualFunctions() const;
e78566595089 initial import
mandel
parents:
diff changeset
735 AbstractMetaFunctionList nonVirtualShellFunctions() const;
e78566595089 initial import
mandel
parents:
diff changeset
736
e78566595089 initial import
mandel
parents:
diff changeset
737 AbstractMetaFieldList fields() const { return m_fields; }
e78566595089 initial import
mandel
parents:
diff changeset
738 void setFields(const AbstractMetaFieldList &fields) { m_fields = fields; }
e78566595089 initial import
mandel
parents:
diff changeset
739 void addField(AbstractMetaField *field) { m_fields << field; }
e78566595089 initial import
mandel
parents:
diff changeset
740
e78566595089 initial import
mandel
parents:
diff changeset
741 AbstractMetaEnumList enums() const { return m_enums; }
e78566595089 initial import
mandel
parents:
diff changeset
742 void setEnums(const AbstractMetaEnumList &enums) { m_enums = enums; }
e78566595089 initial import
mandel
parents:
diff changeset
743 void addEnum(AbstractMetaEnum *e) { m_enums << e; }
e78566595089 initial import
mandel
parents:
diff changeset
744
e78566595089 initial import
mandel
parents:
diff changeset
745 AbstractMetaEnum *findEnum(const QString &enumName);
e78566595089 initial import
mandel
parents:
diff changeset
746 AbstractMetaEnum *findEnumForValue(const QString &enumName);
e78566595089 initial import
mandel
parents:
diff changeset
747 AbstractMetaEnumValue *findEnumValue(const QString &enumName, AbstractMetaEnum *meta_enum);
e78566595089 initial import
mandel
parents:
diff changeset
748
e78566595089 initial import
mandel
parents:
diff changeset
749 AbstractMetaClassList interfaces() const { return m_interfaces; }
e78566595089 initial import
mandel
parents:
diff changeset
750 void addInterface(AbstractMetaClass *interface);
e78566595089 initial import
mandel
parents:
diff changeset
751 void setInterfaces(const AbstractMetaClassList &interface);
e78566595089 initial import
mandel
parents:
diff changeset
752
e78566595089 initial import
mandel
parents:
diff changeset
753 QString fullName() const { return package() + "." + name(); }
e78566595089 initial import
mandel
parents:
diff changeset
754 QString name() const;
e78566595089 initial import
mandel
parents:
diff changeset
755
e78566595089 initial import
mandel
parents:
diff changeset
756 QString baseClassName() const { return m_base_class ? m_base_class->name() : QString(); }
e78566595089 initial import
mandel
parents:
diff changeset
757
e78566595089 initial import
mandel
parents:
diff changeset
758 AbstractMetaClass *baseClass() const { return m_base_class; }
e78566595089 initial import
mandel
parents:
diff changeset
759 void setBaseClass(AbstractMetaClass *base_class) { m_base_class = base_class; }
e78566595089 initial import
mandel
parents:
diff changeset
760
e78566595089 initial import
mandel
parents:
diff changeset
761 const AbstractMetaClass *enclosingClass() const { return m_enclosing_class; }
e78566595089 initial import
mandel
parents:
diff changeset
762 void setEnclosingClass(AbstractMetaClass *cl) { m_enclosing_class = cl; }
e78566595089 initial import
mandel
parents:
diff changeset
763
e78566595089 initial import
mandel
parents:
diff changeset
764 QString package() const { return m_type_entry->javaPackage(); }
e78566595089 initial import
mandel
parents:
diff changeset
765 bool isInterface() const { return m_type_entry->isInterface(); }
e78566595089 initial import
mandel
parents:
diff changeset
766 bool isNamespace() const { return m_type_entry->isNamespace(); }
e78566595089 initial import
mandel
parents:
diff changeset
767 bool isQObject() const { return m_type_entry->isQObject(); }
e78566595089 initial import
mandel
parents:
diff changeset
768 bool isQtNamespace() const { return isNamespace() && name() == "Qt"; }
e78566595089 initial import
mandel
parents:
diff changeset
769 QString qualifiedCppName() const { return m_type_entry->qualifiedCppName(); }
e78566595089 initial import
mandel
parents:
diff changeset
770
e78566595089 initial import
mandel
parents:
diff changeset
771 bool hasInconsistentFunctions() const;
e78566595089 initial import
mandel
parents:
diff changeset
772 bool hasSignals() const;
e78566595089 initial import
mandel
parents:
diff changeset
773 bool inheritsFrom(const AbstractMetaClass *other) const;
e78566595089 initial import
mandel
parents:
diff changeset
774
e78566595089 initial import
mandel
parents:
diff changeset
775 void setForceShellClass(bool on) { m_force_shell_class = on; }
e78566595089 initial import
mandel
parents:
diff changeset
776 bool generateShellClass() const;
e78566595089 initial import
mandel
parents:
diff changeset
777
e78566595089 initial import
mandel
parents:
diff changeset
778 bool hasVirtualSlots() const { return m_has_virtual_slots; }
e78566595089 initial import
mandel
parents:
diff changeset
779 bool hasVirtualFunctions() const { return !isFinal() && m_has_virtuals; }
e78566595089 initial import
mandel
parents:
diff changeset
780 bool hasProtectedFunctions() const;
e78566595089 initial import
mandel
parents:
diff changeset
781
e78566595089 initial import
mandel
parents:
diff changeset
782 QList<TypeEntry *> templateArguments() const { return m_template_args; }
e78566595089 initial import
mandel
parents:
diff changeset
783 void setTemplateArguments(const QList<TypeEntry *> &args) { m_template_args = args; }
e78566595089 initial import
mandel
parents:
diff changeset
784
e78566595089 initial import
mandel
parents:
diff changeset
785 bool hasFieldAccessors() const;
e78566595089 initial import
mandel
parents:
diff changeset
786
e78566595089 initial import
mandel
parents:
diff changeset
787 // only valid during metajavabuilder's run
e78566595089 initial import
mandel
parents:
diff changeset
788 QStringList baseClassNames() const { return m_base_class_names; }
e78566595089 initial import
mandel
parents:
diff changeset
789 void setBaseClassNames(const QStringList &names) { m_base_class_names = names; }
e78566595089 initial import
mandel
parents:
diff changeset
790
e78566595089 initial import
mandel
parents:
diff changeset
791 AbstractMetaClass *primaryInterfaceImplementor() const { return m_primary_interface_implementor; }
e78566595089 initial import
mandel
parents:
diff changeset
792 void setPrimaryInterfaceImplementor(AbstractMetaClass *cl) { m_primary_interface_implementor = cl; }
e78566595089 initial import
mandel
parents:
diff changeset
793
e78566595089 initial import
mandel
parents:
diff changeset
794 const ComplexTypeEntry *typeEntry() const { return m_type_entry; }
e78566595089 initial import
mandel
parents:
diff changeset
795 ComplexTypeEntry *typeEntry() { return m_type_entry; }
e78566595089 initial import
mandel
parents:
diff changeset
796 void setTypeEntry(ComplexTypeEntry *type) { m_type_entry = type; }
e78566595089 initial import
mandel
parents:
diff changeset
797
e78566595089 initial import
mandel
parents:
diff changeset
798 void setHasHashFunction(bool on) { m_has_hash_function = on; }
e78566595089 initial import
mandel
parents:
diff changeset
799 bool hasHashFunction() const { return m_has_hash_function; }
e78566595089 initial import
mandel
parents:
diff changeset
800
e78566595089 initial import
mandel
parents:
diff changeset
801 void setToStringCapability(FunctionModelItem fun) { m_qDebug_stream_function= fun; }
e78566595089 initial import
mandel
parents:
diff changeset
802 FunctionModelItem hasToStringCapability() const { return m_qDebug_stream_function; }
e78566595089 initial import
mandel
parents:
diff changeset
803
e78566595089 initial import
mandel
parents:
diff changeset
804 virtual bool hasDefaultToStringFunction() const;
e78566595089 initial import
mandel
parents:
diff changeset
805
e78566595089 initial import
mandel
parents:
diff changeset
806 void setHasEqualsOperator(bool on) { m_has_equals_operator = on; }
e78566595089 initial import
mandel
parents:
diff changeset
807 bool hasEqualsOperator() const { return m_has_equals_operator; }
e78566595089 initial import
mandel
parents:
diff changeset
808
e78566595089 initial import
mandel
parents:
diff changeset
809 void setHasCloneOperator(bool on) { m_has_clone_operator = on; }
e78566595089 initial import
mandel
parents:
diff changeset
810 bool hasCloneOperator() const { return m_has_clone_operator; }
e78566595089 initial import
mandel
parents:
diff changeset
811
e78566595089 initial import
mandel
parents:
diff changeset
812 void addPropertySpec(QPropertySpec *spec) { m_property_specs << spec; }
e78566595089 initial import
mandel
parents:
diff changeset
813 QList<QPropertySpec *> propertySpecs() const { return m_property_specs; }
e78566595089 initial import
mandel
parents:
diff changeset
814
e78566595089 initial import
mandel
parents:
diff changeset
815 QPropertySpec *propertySpecForRead(const QString &name) const;
e78566595089 initial import
mandel
parents:
diff changeset
816 QPropertySpec *propertySpecForWrite(const QString &name) const;
e78566595089 initial import
mandel
parents:
diff changeset
817 QPropertySpec *propertySpecForReset(const QString &name) const;
e78566595089 initial import
mandel
parents:
diff changeset
818
e78566595089 initial import
mandel
parents:
diff changeset
819 QList<ReferenceCount> referenceCounts() const;
e78566595089 initial import
mandel
parents:
diff changeset
820
e78566595089 initial import
mandel
parents:
diff changeset
821 void setEqualsFunctions(const AbstractMetaFunctionList &lst) { m_equals_functions = lst; }
e78566595089 initial import
mandel
parents:
diff changeset
822 AbstractMetaFunctionList equalsFunctions() const { return m_equals_functions; }
e78566595089 initial import
mandel
parents:
diff changeset
823
e78566595089 initial import
mandel
parents:
diff changeset
824 void setNotEqualsFunctions(const AbstractMetaFunctionList &lst) { m_nequals_functions = lst; }
e78566595089 initial import
mandel
parents:
diff changeset
825 AbstractMetaFunctionList notEqualsFunctions() const { return m_nequals_functions; }
e78566595089 initial import
mandel
parents:
diff changeset
826
e78566595089 initial import
mandel
parents:
diff changeset
827 void setLessThanFunctions(const AbstractMetaFunctionList &lst) { m_less_than_functions = lst; }
e78566595089 initial import
mandel
parents:
diff changeset
828 AbstractMetaFunctionList lessThanFunctions() const { return m_less_than_functions; }
e78566595089 initial import
mandel
parents:
diff changeset
829
e78566595089 initial import
mandel
parents:
diff changeset
830 void setGreaterThanFunctions(const AbstractMetaFunctionList &lst) { m_greater_than_functions = lst; }
e78566595089 initial import
mandel
parents:
diff changeset
831 AbstractMetaFunctionList greaterThanFunctions() const { return m_greater_than_functions; }
e78566595089 initial import
mandel
parents:
diff changeset
832
e78566595089 initial import
mandel
parents:
diff changeset
833 void setLessThanEqFunctions(const AbstractMetaFunctionList &lst) { m_less_than_eq_functions = lst; }
e78566595089 initial import
mandel
parents:
diff changeset
834 AbstractMetaFunctionList lessThanEqFunctions() const { return m_less_than_eq_functions; }
e78566595089 initial import
mandel
parents:
diff changeset
835
e78566595089 initial import
mandel
parents:
diff changeset
836 void setGreaterThanEqFunctions(const AbstractMetaFunctionList &lst) { m_greater_than_eq_functions = lst; }
e78566595089 initial import
mandel
parents:
diff changeset
837 AbstractMetaFunctionList greaterThanEqFunctions() const { return m_greater_than_eq_functions; }
e78566595089 initial import
mandel
parents:
diff changeset
838
e78566595089 initial import
mandel
parents:
diff changeset
839 void sortFunctions();
e78566595089 initial import
mandel
parents:
diff changeset
840
e78566595089 initial import
mandel
parents:
diff changeset
841 const AbstractMetaClass *templateBaseClass() const { return m_template_base_class; }
e78566595089 initial import
mandel
parents:
diff changeset
842 void setTemplateBaseClass(const AbstractMetaClass *cls) { m_template_base_class = cls; }
e78566595089 initial import
mandel
parents:
diff changeset
843
e78566595089 initial import
mandel
parents:
diff changeset
844 void setTypeAlias(bool typeAlias) { m_is_type_alias = typeAlias; }
e78566595089 initial import
mandel
parents:
diff changeset
845 bool isTypeAlias() const { return m_is_type_alias; }
e78566595089 initial import
mandel
parents:
diff changeset
846
42
eb3b5bbffc8f CMake: generator is not running multiple times.
SokoL_SD
parents: 1
diff changeset
847 const QStringList &depends() { return m_type_entry->depends(); }
110
136c9ee83ee5 put conversion code in separate functions
eldar
parents: 42
diff changeset
848
136c9ee83ee5 put conversion code in separate functions
eldar
parents: 42
diff changeset
849 bool needsConversionFunc;
1
e78566595089 initial import
mandel
parents:
diff changeset
850 private:
e78566595089 initial import
mandel
parents:
diff changeset
851 uint m_namespace : 1;
e78566595089 initial import
mandel
parents:
diff changeset
852 uint m_qobject : 1;
e78566595089 initial import
mandel
parents:
diff changeset
853 uint m_has_virtuals : 1;
e78566595089 initial import
mandel
parents:
diff changeset
854 uint m_has_nonpublic : 1;
e78566595089 initial import
mandel
parents:
diff changeset
855 uint m_has_virtual_slots : 1;
e78566595089 initial import
mandel
parents:
diff changeset
856 uint m_has_nonprivateconstructor : 1;
e78566595089 initial import
mandel
parents:
diff changeset
857 uint m_functions_fixed : 1;
e78566595089 initial import
mandel
parents:
diff changeset
858 uint m_has_public_destructor : 1;
e78566595089 initial import
mandel
parents:
diff changeset
859 uint m_force_shell_class : 1;
e78566595089 initial import
mandel
parents:
diff changeset
860 uint m_has_hash_function : 1;
e78566595089 initial import
mandel
parents:
diff changeset
861 uint m_has_equals_operator : 1;
e78566595089 initial import
mandel
parents:
diff changeset
862 uint m_has_clone_operator :1;
e78566595089 initial import
mandel
parents:
diff changeset
863 uint m_is_type_alias : 1;
e78566595089 initial import
mandel
parents:
diff changeset
864 uint m_reserved : 19;
e78566595089 initial import
mandel
parents:
diff changeset
865
e78566595089 initial import
mandel
parents:
diff changeset
866 const AbstractMetaClass *m_enclosing_class;
e78566595089 initial import
mandel
parents:
diff changeset
867 AbstractMetaClass *m_base_class;
e78566595089 initial import
mandel
parents:
diff changeset
868 const AbstractMetaClass *m_template_base_class;
e78566595089 initial import
mandel
parents:
diff changeset
869 AbstractMetaFunctionList m_functions;
e78566595089 initial import
mandel
parents:
diff changeset
870 AbstractMetaFieldList m_fields;
e78566595089 initial import
mandel
parents:
diff changeset
871 AbstractMetaEnumList m_enums;
e78566595089 initial import
mandel
parents:
diff changeset
872 AbstractMetaClassList m_interfaces;
e78566595089 initial import
mandel
parents:
diff changeset
873 AbstractMetaClass *m_extracted_interface;
e78566595089 initial import
mandel
parents:
diff changeset
874 AbstractMetaClass *m_primary_interface_implementor;
e78566595089 initial import
mandel
parents:
diff changeset
875 QList<QPropertySpec *> m_property_specs;
e78566595089 initial import
mandel
parents:
diff changeset
876 AbstractMetaFunctionList m_equals_functions;
e78566595089 initial import
mandel
parents:
diff changeset
877 AbstractMetaFunctionList m_nequals_functions;
e78566595089 initial import
mandel
parents:
diff changeset
878
e78566595089 initial import
mandel
parents:
diff changeset
879 AbstractMetaFunctionList m_less_than_functions;
e78566595089 initial import
mandel
parents:
diff changeset
880 AbstractMetaFunctionList m_greater_than_functions;
e78566595089 initial import
mandel
parents:
diff changeset
881 AbstractMetaFunctionList m_less_than_eq_functions;
e78566595089 initial import
mandel
parents:
diff changeset
882 AbstractMetaFunctionList m_greater_than_eq_functions;
e78566595089 initial import
mandel
parents:
diff changeset
883
e78566595089 initial import
mandel
parents:
diff changeset
884 QStringList m_base_class_names;
e78566595089 initial import
mandel
parents:
diff changeset
885 QList<TypeEntry *> m_template_args;
e78566595089 initial import
mandel
parents:
diff changeset
886 ComplexTypeEntry *m_type_entry;
e78566595089 initial import
mandel
parents:
diff changeset
887 FunctionModelItem m_qDebug_stream_function;
e78566595089 initial import
mandel
parents:
diff changeset
888
e78566595089 initial import
mandel
parents:
diff changeset
889 // qtd2 hack
e78566595089 initial import
mandel
parents:
diff changeset
890 friend class DGenerator;
e78566595089 initial import
mandel
parents:
diff changeset
891 };
e78566595089 initial import
mandel
parents:
diff changeset
892
e78566595089 initial import
mandel
parents:
diff changeset
893 class QPropertySpec {
e78566595089 initial import
mandel
parents:
diff changeset
894 public:
e78566595089 initial import
mandel
parents:
diff changeset
895 QPropertySpec(const TypeEntry *type)
e78566595089 initial import
mandel
parents:
diff changeset
896 : m_type(type),
e78566595089 initial import
mandel
parents:
diff changeset
897 m_index(-1)
e78566595089 initial import
mandel
parents:
diff changeset
898 {
e78566595089 initial import
mandel
parents:
diff changeset
899 }
e78566595089 initial import
mandel
parents:
diff changeset
900
e78566595089 initial import
mandel
parents:
diff changeset
901 const TypeEntry *type() const { return m_type; }
e78566595089 initial import
mandel
parents:
diff changeset
902
e78566595089 initial import
mandel
parents:
diff changeset
903 QString name() const { return m_name; }
e78566595089 initial import
mandel
parents:
diff changeset
904 void setName(const QString &name) { m_name = name; }
e78566595089 initial import
mandel
parents:
diff changeset
905
e78566595089 initial import
mandel
parents:
diff changeset
906 QString read() const { return m_read; }
e78566595089 initial import
mandel
parents:
diff changeset
907 void setRead(const QString &read) { m_read = read; }
e78566595089 initial import
mandel
parents:
diff changeset
908
e78566595089 initial import
mandel
parents:
diff changeset
909 QString write() const { return m_write; }
e78566595089 initial import
mandel
parents:
diff changeset
910 void setWrite(const QString &write) { m_write = write; }
e78566595089 initial import
mandel
parents:
diff changeset
911
e78566595089 initial import
mandel
parents:
diff changeset
912 QString designable() const { return m_designable; }
e78566595089 initial import
mandel
parents:
diff changeset
913 void setDesignable(const QString &designable) { m_designable = designable; }
e78566595089 initial import
mandel
parents:
diff changeset
914
e78566595089 initial import
mandel
parents:
diff changeset
915 QString reset() const { return m_reset; }
e78566595089 initial import
mandel
parents:
diff changeset
916 void setReset(const QString &reset) { m_reset = reset; }
e78566595089 initial import
mandel
parents:
diff changeset
917
e78566595089 initial import
mandel
parents:
diff changeset
918 int index() const { return m_index; }
e78566595089 initial import
mandel
parents:
diff changeset
919 void setIndex(int index) { m_index = index; }
e78566595089 initial import
mandel
parents:
diff changeset
920
e78566595089 initial import
mandel
parents:
diff changeset
921 private:
e78566595089 initial import
mandel
parents:
diff changeset
922 QString m_name;
e78566595089 initial import
mandel
parents:
diff changeset
923 QString m_read;
e78566595089 initial import
mandel
parents:
diff changeset
924 QString m_write;
e78566595089 initial import
mandel
parents:
diff changeset
925 QString m_designable;
e78566595089 initial import
mandel
parents:
diff changeset
926 QString m_reset;
e78566595089 initial import
mandel
parents:
diff changeset
927 const TypeEntry *m_type;
e78566595089 initial import
mandel
parents:
diff changeset
928 int m_index;
e78566595089 initial import
mandel
parents:
diff changeset
929 };
e78566595089 initial import
mandel
parents:
diff changeset
930
e78566595089 initial import
mandel
parents:
diff changeset
931 // qtd
e78566595089 initial import
mandel
parents:
diff changeset
932 class ArgumentReplace
e78566595089 initial import
mandel
parents:
diff changeset
933 {
e78566595089 initial import
mandel
parents:
diff changeset
934 private:
e78566595089 initial import
mandel
parents:
diff changeset
935 QHash<QString, QString> data;
e78566595089 initial import
mandel
parents:
diff changeset
936 static ArgumentReplace *m_instance;
e78566595089 initial import
mandel
parents:
diff changeset
937 ArgumentReplace();
e78566595089 initial import
mandel
parents:
diff changeset
938
e78566595089 initial import
mandel
parents:
diff changeset
939 public:
e78566595089 initial import
mandel
parents:
diff changeset
940 static void init();
e78566595089 initial import
mandel
parents:
diff changeset
941 static QString translate(QString arg);
e78566595089 initial import
mandel
parents:
diff changeset
942 };
e78566595089 initial import
mandel
parents:
diff changeset
943
e78566595089 initial import
mandel
parents:
diff changeset
944 inline AbstractMetaFunctionList AbstractMetaClass::allVirtualFunctions() const
e78566595089 initial import
mandel
parents:
diff changeset
945 {
e78566595089 initial import
mandel
parents:
diff changeset
946 return queryFunctions(VirtualFunctions
e78566595089 initial import
mandel
parents:
diff changeset
947 | NotRemovedFromTargetLang);
e78566595089 initial import
mandel
parents:
diff changeset
948 }
e78566595089 initial import
mandel
parents:
diff changeset
949
e78566595089 initial import
mandel
parents:
diff changeset
950 inline AbstractMetaFunctionList AbstractMetaClass::allFinalFunctions() const
e78566595089 initial import
mandel
parents:
diff changeset
951 {
e78566595089 initial import
mandel
parents:
diff changeset
952 return queryFunctions(FinalInTargetLangFunctions
e78566595089 initial import
mandel
parents:
diff changeset
953 | FinalInCppFunctions
e78566595089 initial import
mandel
parents:
diff changeset
954 | NotRemovedFromTargetLang);
e78566595089 initial import
mandel
parents:
diff changeset
955 }
e78566595089 initial import
mandel
parents:
diff changeset
956
e78566595089 initial import
mandel
parents:
diff changeset
957 inline AbstractMetaFunctionList AbstractMetaClass::cppInconsistentFunctions() const
e78566595089 initial import
mandel
parents:
diff changeset
958 {
e78566595089 initial import
mandel
parents:
diff changeset
959 return queryFunctions(Inconsistent
e78566595089 initial import
mandel
parents:
diff changeset
960 | NormalFunctions
e78566595089 initial import
mandel
parents:
diff changeset
961 | Visible
e78566595089 initial import
mandel
parents:
diff changeset
962 | NotRemovedFromTargetLang);
e78566595089 initial import
mandel
parents:
diff changeset
963 }
e78566595089 initial import
mandel
parents:
diff changeset
964
e78566595089 initial import
mandel
parents:
diff changeset
965 inline AbstractMetaFunctionList AbstractMetaClass::cppSignalFunctions() const
e78566595089 initial import
mandel
parents:
diff changeset
966 {
e78566595089 initial import
mandel
parents:
diff changeset
967 return queryFunctions(Signals
e78566595089 initial import
mandel
parents:
diff changeset
968 | Visible
e78566595089 initial import
mandel
parents:
diff changeset
969 | NotRemovedFromTargetLang);
e78566595089 initial import
mandel
parents:
diff changeset
970 }
e78566595089 initial import
mandel
parents:
diff changeset
971
e78566595089 initial import
mandel
parents:
diff changeset
972 #endif // ABSTRACTMETALANG_H