annotate generator/abstractmetalang.h @ 363:3b0545d4d479

Fixed enums in designated interfaces
author Max Samukha <maxter@maxter.com>
date Thu, 10 Jun 2010 00:57:32 +0300
parents 9784459f0750
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
e78566595089 initial import
mandel
parents:
diff changeset
1 /****************************************************************************
e78566595089 initial import
mandel
parents:
diff changeset
2 **
e78566595089 initial import
mandel
parents:
diff changeset
3 ** Copyright (C) 1992-2008 Nokia. All rights reserved.
e78566595089 initial import
mandel
parents:
diff changeset
4 **
e78566595089 initial import
mandel
parents:
diff changeset
5 ** This file is part of Qt Jambi.
e78566595089 initial import
mandel
parents:
diff changeset
6 **
e78566595089 initial import
mandel
parents:
diff changeset
7 ** * Commercial Usage
e78566595089 initial import
mandel
parents:
diff changeset
8 * Licensees holding valid Qt Commercial licenses may use this file in
e78566595089 initial import
mandel
parents:
diff changeset
9 * accordance with the Qt Commercial License Agreement provided with the
e78566595089 initial import
mandel
parents:
diff changeset
10 * Software or, alternatively, in accordance with the terms contained in
e78566595089 initial import
mandel
parents:
diff changeset
11 * a written agreement between you and Nokia.
e78566595089 initial import
mandel
parents:
diff changeset
12 *
e78566595089 initial import
mandel
parents:
diff changeset
13 *
e78566595089 initial import
mandel
parents:
diff changeset
14 * GNU General Public License Usage
e78566595089 initial import
mandel
parents:
diff changeset
15 * Alternatively, this file may be used under the terms of the GNU
e78566595089 initial import
mandel
parents:
diff changeset
16 * General Public License versions 2.0 or 3.0 as published by the Free
e78566595089 initial import
mandel
parents:
diff changeset
17 * Software Foundation and appearing in the file LICENSE.GPL included in
e78566595089 initial import
mandel
parents:
diff changeset
18 * the packaging of this file. Please review the following information
e78566595089 initial import
mandel
parents:
diff changeset
19 * to ensure GNU General Public Licensing requirements will be met:
e78566595089 initial import
mandel
parents:
diff changeset
20 * http://www.fsf.org/licensing/licenses/info/GPLv2.html and
e78566595089 initial import
mandel
parents:
diff changeset
21 * http://www.gnu.org/copyleft/gpl.html. In addition, as a special
e78566595089 initial import
mandel
parents:
diff changeset
22 * exception, Nokia gives you certain additional rights. These rights
e78566595089 initial import
mandel
parents:
diff changeset
23 * are described in the Nokia Qt GPL Exception version 1.2, included in
e78566595089 initial import
mandel
parents:
diff changeset
24 * the file GPL_EXCEPTION.txt in this package.
e78566595089 initial import
mandel
parents:
diff changeset
25 *
e78566595089 initial import
mandel
parents:
diff changeset
26 * Qt for Windows(R) Licensees
e78566595089 initial import
mandel
parents:
diff changeset
27 * As a special exception, Nokia, as the sole copyright holder for Qt
e78566595089 initial import
mandel
parents:
diff changeset
28 * Designer, grants users of the Qt/Eclipse Integration plug-in the
e78566595089 initial import
mandel
parents:
diff changeset
29 * right for the Qt/Eclipse Integration to link to functionality
e78566595089 initial import
mandel
parents:
diff changeset
30 * provided by Qt Designer and its related libraries.
e78566595089 initial import
mandel
parents:
diff changeset
31 *
e78566595089 initial import
mandel
parents:
diff changeset
32 *
e78566595089 initial import
mandel
parents:
diff changeset
33 * If you are unsure which license is appropriate for your use, please
e78566595089 initial import
mandel
parents:
diff changeset
34 * contact the sales department at qt-sales@nokia.com.
e78566595089 initial import
mandel
parents:
diff changeset
35
e78566595089 initial import
mandel
parents:
diff changeset
36 **
e78566595089 initial import
mandel
parents:
diff changeset
37 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
e78566595089 initial import
mandel
parents:
diff changeset
38 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
e78566595089 initial import
mandel
parents:
diff changeset
39 **
e78566595089 initial import
mandel
parents:
diff changeset
40 ****************************************************************************/
e78566595089 initial import
mandel
parents:
diff changeset
41
e78566595089 initial import
mandel
parents:
diff changeset
42 #ifndef 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,
357
9784459f0750 An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
398 GlobalScopeFunction,
1
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,
326
baaf74652f4c treat const and non-const functions as separate
eldar1@eldar1-laptop
parents: 304
diff changeset
409 EqualConstness = 0x00000080,
1
e78566595089 initial import
mandel
parents:
diff changeset
410
e78566595089 initial import
mandel
parents:
diff changeset
411 NameLessThan = 0x00001000,
e78566595089 initial import
mandel
parents:
diff changeset
412
326
baaf74652f4c treat const and non-const functions as separate
eldar1@eldar1-laptop
parents: 304
diff changeset
413 PrettySimilar = EqualName | EqualArguments | EqualConstness,
1
e78566595089 initial import
mandel
parents:
diff changeset
414 Equal = 0x0000001f,
e78566595089 initial import
mandel
parents:
diff changeset
415 NotEqual = 0x00001000
e78566595089 initial import
mandel
parents:
diff changeset
416 };
e78566595089 initial import
mandel
parents:
diff changeset
417
357
9784459f0750 An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
418 enum Option
9784459f0750 An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
419 {
9784459f0750 An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
420 NoOptions = 0,
9784459f0750 An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
421 DeclaringClass = 0x01,
9784459f0750 An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
422 NoExternNamespace = 0x02
9784459f0750 An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
423 };
9784459f0750 An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
424
9784459f0750 An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
425 typedef QFlags<Option> Options;
9784459f0750 An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
426
1
e78566595089 initial import
mandel
parents:
diff changeset
427 AbstractMetaFunction()
e78566595089 initial import
mandel
parents:
diff changeset
428 : m_function_type(NormalFunction),
e78566595089 initial import
mandel
parents:
diff changeset
429 m_type(0),
e78566595089 initial import
mandel
parents:
diff changeset
430 m_class(0),
e78566595089 initial import
mandel
parents:
diff changeset
431 m_implementing_class(0),
e78566595089 initial import
mandel
parents:
diff changeset
432 m_declaring_class(0),
e78566595089 initial import
mandel
parents:
diff changeset
433 m_interface_class(0),
e78566595089 initial import
mandel
parents:
diff changeset
434 m_property_spec(0),
e78566595089 initial import
mandel
parents:
diff changeset
435 m_constant(false),
e78566595089 initial import
mandel
parents:
diff changeset
436 m_invalid(false),
e78566595089 initial import
mandel
parents:
diff changeset
437 m_jumptable_id(-1),
e78566595089 initial import
mandel
parents:
diff changeset
438 // qtd
e78566595089 initial import
mandel
parents:
diff changeset
439 m_store_result(0)
e78566595089 initial import
mandel
parents:
diff changeset
440 {
e78566595089 initial import
mandel
parents:
diff changeset
441 }
e78566595089 initial import
mandel
parents:
diff changeset
442
e78566595089 initial import
mandel
parents:
diff changeset
443 ~AbstractMetaFunction();
e78566595089 initial import
mandel
parents:
diff changeset
444
e78566595089 initial import
mandel
parents:
diff changeset
445 QString name() const { return m_name; }
e78566595089 initial import
mandel
parents:
diff changeset
446 void setName(const QString &name) { m_name = name; }
e78566595089 initial import
mandel
parents:
diff changeset
447
e78566595089 initial import
mandel
parents:
diff changeset
448 QString originalName() const { return m_original_name.isEmpty() ? name() : m_original_name; }
e78566595089 initial import
mandel
parents:
diff changeset
449 void setOriginalName(const QString &name) { m_original_name = name; }
e78566595089 initial import
mandel
parents:
diff changeset
450
e78566595089 initial import
mandel
parents:
diff changeset
451 QString modifiedName() const;
e78566595089 initial import
mandel
parents:
diff changeset
452
288
f9559a957be9 new signals and slots implementation
eldar
parents: 110
diff changeset
453 QString minimalSignature(int reduce = 0) const;
1
e78566595089 initial import
mandel
parents:
diff changeset
454 QStringList possibleIntrospectionCompatibleSignatures() const;
e78566595089 initial import
mandel
parents:
diff changeset
455
357
9784459f0750 An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents: 354
diff changeset
456 QString marshalledName(Options options = NoOptions) const;
1
e78566595089 initial import
mandel
parents:
diff changeset
457
e78566595089 initial import
mandel
parents:
diff changeset
458 // true if one or more of the arguments are of QtJambiObject subclasses
e78566595089 initial import
mandel
parents:
diff changeset
459 bool argumentsHaveNativeId() const
e78566595089 initial import
mandel
parents:
diff changeset
460 {
e78566595089 initial import
mandel
parents:
diff changeset
461 foreach (const AbstractMetaArgument *arg, m_arguments) {
e78566595089 initial import
mandel
parents:
diff changeset
462 if (arg->type()->hasNativeId())
e78566595089 initial import
mandel
parents:
diff changeset
463 return true;
e78566595089 initial import
mandel
parents:
diff changeset
464 }
e78566595089 initial import
mandel
parents:
diff changeset
465
e78566595089 initial import
mandel
parents:
diff changeset
466 return false;
e78566595089 initial import
mandel
parents:
diff changeset
467 }
e78566595089 initial import
mandel
parents:
diff changeset
468
e78566595089 initial import
mandel
parents:
diff changeset
469 bool isModifiedRemoved(int types = TypeSystem::All) const;
e78566595089 initial import
mandel
parents:
diff changeset
470
e78566595089 initial import
mandel
parents:
diff changeset
471 AbstractMetaType *type() const { return m_type; }
e78566595089 initial import
mandel
parents:
diff changeset
472 void setType(AbstractMetaType *type) { m_type = type; }
e78566595089 initial import
mandel
parents:
diff changeset
473
e78566595089 initial import
mandel
parents:
diff changeset
474 // The class that has this function as a member.
e78566595089 initial import
mandel
parents:
diff changeset
475 const AbstractMetaClass *ownerClass() const { return m_class; }
e78566595089 initial import
mandel
parents:
diff changeset
476 void setOwnerClass(const AbstractMetaClass *cls) { m_class = cls; }
e78566595089 initial import
mandel
parents:
diff changeset
477
e78566595089 initial import
mandel
parents:
diff changeset
478 // The first class in a hierarchy that declares the function
e78566595089 initial import
mandel
parents:
diff changeset
479 const AbstractMetaClass *declaringClass() const { return m_declaring_class; }
e78566595089 initial import
mandel
parents:
diff changeset
480 void setDeclaringClass(const AbstractMetaClass *cls) { m_declaring_class = cls; }
e78566595089 initial import
mandel
parents:
diff changeset
481
e78566595089 initial import
mandel
parents:
diff changeset
482 // The class that actually implements this function
e78566595089 initial import
mandel
parents:
diff changeset
483 const AbstractMetaClass *implementingClass() const { return m_implementing_class; }
e78566595089 initial import
mandel
parents:
diff changeset
484 void setImplementingClass(const AbstractMetaClass *cls) { m_implementing_class = cls; }
e78566595089 initial import
mandel
parents:
diff changeset
485
e78566595089 initial import
mandel
parents:
diff changeset
486 bool needsCallThrough() const;
e78566595089 initial import
mandel
parents:
diff changeset
487
e78566595089 initial import
mandel
parents:
diff changeset
488 AbstractMetaArgumentList arguments() const { return m_arguments; }
e78566595089 initial import
mandel
parents:
diff changeset
489 void setArguments(const AbstractMetaArgumentList &arguments) { m_arguments = arguments; }
e78566595089 initial import
mandel
parents:
diff changeset
490 void addArgument(AbstractMetaArgument *argument) { m_arguments << argument; }
e78566595089 initial import
mandel
parents:
diff changeset
491 int actualMinimumArgumentCount() const;
e78566595089 initial import
mandel
parents:
diff changeset
492
e78566595089 initial import
mandel
parents:
diff changeset
493 void setInvalid(bool on) { m_invalid = on; }
e78566595089 initial import
mandel
parents:
diff changeset
494 bool isInvalid() const { return m_invalid; }
e78566595089 initial import
mandel
parents:
diff changeset
495 bool isDeprecated() const;
e78566595089 initial import
mandel
parents:
diff changeset
496 bool isDestructor() const { return functionType() == DestructorFunction; }
e78566595089 initial import
mandel
parents:
diff changeset
497 bool isConstructor() const { return functionType() == ConstructorFunction; }
e78566595089 initial import
mandel
parents:
diff changeset
498 bool isNormal() const { return functionType() == NormalFunction || isSlot() || isInGlobalScope(); }
e78566595089 initial import
mandel
parents:
diff changeset
499 bool isInGlobalScope() const { return functionType() == GlobalScopeFunction; }
e78566595089 initial import
mandel
parents:
diff changeset
500 bool isSignal() const { return functionType() == SignalFunction; }
e78566595089 initial import
mandel
parents:
diff changeset
501 bool isSlot() const { return functionType() == SlotFunction; }
e78566595089 initial import
mandel
parents:
diff changeset
502 bool isEmptyFunction() const { return functionType() == EmptyFunction; }
e78566595089 initial import
mandel
parents:
diff changeset
503 FunctionType functionType() const { return m_function_type; }
e78566595089 initial import
mandel
parents:
diff changeset
504 void setFunctionType(FunctionType type) { m_function_type = type; }
e78566595089 initial import
mandel
parents:
diff changeset
505
e78566595089 initial import
mandel
parents:
diff changeset
506 QStringList introspectionCompatibleSignatures(const QStringList &resolvedArguments = QStringList()) const;
e78566595089 initial import
mandel
parents:
diff changeset
507 QString signature() const;
e78566595089 initial import
mandel
parents:
diff changeset
508 QString targetLangSignature(bool minimal = false) const;
e78566595089 initial import
mandel
parents:
diff changeset
509 bool shouldReturnThisObject() const { return QLatin1String("this") == argumentReplaced(0); }
e78566595089 initial import
mandel
parents:
diff changeset
510
e78566595089 initial import
mandel
parents:
diff changeset
511 bool isConstant() const { return m_constant; }
e78566595089 initial import
mandel
parents:
diff changeset
512 void setConstant(bool constant) { m_constant = constant; }
e78566595089 initial import
mandel
parents:
diff changeset
513
e78566595089 initial import
mandel
parents:
diff changeset
514 QString toString() const { return m_name; }
e78566595089 initial import
mandel
parents:
diff changeset
515
e78566595089 initial import
mandel
parents:
diff changeset
516 uint compareTo(const AbstractMetaFunction *other) const;
e78566595089 initial import
mandel
parents:
diff changeset
517
e78566595089 initial import
mandel
parents:
diff changeset
518 bool operator <(const AbstractMetaFunction &a) const;
e78566595089 initial import
mandel
parents:
diff changeset
519
e78566595089 initial import
mandel
parents:
diff changeset
520 AbstractMetaFunction *copy() const;
e78566595089 initial import
mandel
parents:
diff changeset
521
e78566595089 initial import
mandel
parents:
diff changeset
522 QString replacedDefaultExpression(const AbstractMetaClass *cls, int idx) const;
e78566595089 initial import
mandel
parents:
diff changeset
523 bool removedDefaultExpression(const AbstractMetaClass *cls, int idx) const;
e78566595089 initial import
mandel
parents:
diff changeset
524 QString conversionRule(TypeSystem::Language language, int idx) const;
e78566595089 initial import
mandel
parents:
diff changeset
525 QList<ReferenceCount> referenceCounts(const AbstractMetaClass *cls, int idx = -2) const;
e78566595089 initial import
mandel
parents:
diff changeset
526
e78566595089 initial import
mandel
parents:
diff changeset
527 bool nullPointersDisabled(const AbstractMetaClass *cls = 0, int argument_idx = 0) const;
e78566595089 initial import
mandel
parents:
diff changeset
528 QString nullPointerDefaultValue(const AbstractMetaClass *cls = 0, int argument_idx = 0) const;
e78566595089 initial import
mandel
parents:
diff changeset
529
e78566595089 initial import
mandel
parents:
diff changeset
530 bool resetObjectAfterUse(int argument_idx) const;
e78566595089 initial import
mandel
parents:
diff changeset
531
e78566595089 initial import
mandel
parents:
diff changeset
532 // Returns whether garbage collection is disabled for the argument in any context
e78566595089 initial import
mandel
parents:
diff changeset
533 bool disabledGarbageCollection(const AbstractMetaClass *cls, int key) const;
e78566595089 initial import
mandel
parents:
diff changeset
534
e78566595089 initial import
mandel
parents:
diff changeset
535 // Returns the ownership rules for the given argument in the given context
e78566595089 initial import
mandel
parents:
diff changeset
536 TypeSystem::Ownership ownership(const AbstractMetaClass *cls, TypeSystem::Language language, int idx) const;
e78566595089 initial import
mandel
parents:
diff changeset
537
e78566595089 initial import
mandel
parents:
diff changeset
538 bool isVirtualSlot() const;
e78566595089 initial import
mandel
parents:
diff changeset
539
e78566595089 initial import
mandel
parents:
diff changeset
540 QString typeReplaced(int argument_index) const;
e78566595089 initial import
mandel
parents:
diff changeset
541 bool isRemovedFromAllLanguages(const AbstractMetaClass *) const;
e78566595089 initial import
mandel
parents:
diff changeset
542 bool isRemovedFrom(const AbstractMetaClass *, TypeSystem::Language language) const;
e78566595089 initial import
mandel
parents:
diff changeset
543 bool argumentRemoved(int) const;
e78566595089 initial import
mandel
parents:
diff changeset
544
e78566595089 initial import
mandel
parents:
diff changeset
545 QString argumentReplaced(int key) const;
e78566595089 initial import
mandel
parents:
diff changeset
546 bool needsSuppressUncheckedWarning() const;
e78566595089 initial import
mandel
parents:
diff changeset
547
e78566595089 initial import
mandel
parents:
diff changeset
548 bool hasModifications(const AbstractMetaClass *implementor) const;
e78566595089 initial import
mandel
parents:
diff changeset
549 FunctionModificationList modifications(const AbstractMetaClass *implementor) const;
e78566595089 initial import
mandel
parents:
diff changeset
550
e78566595089 initial import
mandel
parents:
diff changeset
551 // If this function stems from an interface, this returns the
e78566595089 initial import
mandel
parents:
diff changeset
552 // interface that declares it.
e78566595089 initial import
mandel
parents:
diff changeset
553 const AbstractMetaClass *interfaceClass() const { return m_interface_class; }
e78566595089 initial import
mandel
parents:
diff changeset
554 void setInterfaceClass(const AbstractMetaClass *cl) { m_interface_class = cl; }
e78566595089 initial import
mandel
parents:
diff changeset
555
e78566595089 initial import
mandel
parents:
diff changeset
556 void setPropertySpec(QPropertySpec *spec) { m_property_spec = spec; }
e78566595089 initial import
mandel
parents:
diff changeset
557 QPropertySpec *propertySpec() const { return m_property_spec; }
e78566595089 initial import
mandel
parents:
diff changeset
558
e78566595089 initial import
mandel
parents:
diff changeset
559 int jumpTableId() const { return m_jumptable_id; }
e78566595089 initial import
mandel
parents:
diff changeset
560 void setJumpTableId(int id) { m_jumptable_id = id; }
e78566595089 initial import
mandel
parents:
diff changeset
561
e78566595089 initial import
mandel
parents:
diff changeset
562 // qtd
e78566595089 initial import
mandel
parents:
diff changeset
563 bool storeResult() const;
e78566595089 initial import
mandel
parents:
diff changeset
564 void checkStoreResult();
e78566595089 initial import
mandel
parents:
diff changeset
565
e78566595089 initial import
mandel
parents:
diff changeset
566 private:
e78566595089 initial import
mandel
parents:
diff changeset
567 int m_store_result;
e78566595089 initial import
mandel
parents:
diff changeset
568
e78566595089 initial import
mandel
parents:
diff changeset
569 private:
e78566595089 initial import
mandel
parents:
diff changeset
570 QString m_name;
e78566595089 initial import
mandel
parents:
diff changeset
571 QString m_original_name;
e78566595089 initial import
mandel
parents:
diff changeset
572 mutable QString m_cached_minimal_signature;
e78566595089 initial import
mandel
parents:
diff changeset
573 mutable QString m_cached_modified_name;
e78566595089 initial import
mandel
parents:
diff changeset
574
e78566595089 initial import
mandel
parents:
diff changeset
575 FunctionType m_function_type;
e78566595089 initial import
mandel
parents:
diff changeset
576 AbstractMetaType *m_type;
e78566595089 initial import
mandel
parents:
diff changeset
577 const AbstractMetaClass *m_class;
e78566595089 initial import
mandel
parents:
diff changeset
578 const AbstractMetaClass *m_implementing_class;
e78566595089 initial import
mandel
parents:
diff changeset
579 const AbstractMetaClass *m_declaring_class;
e78566595089 initial import
mandel
parents:
diff changeset
580 const AbstractMetaClass *m_interface_class;
e78566595089 initial import
mandel
parents:
diff changeset
581 QPropertySpec *m_property_spec;
e78566595089 initial import
mandel
parents:
diff changeset
582 AbstractMetaArgumentList m_arguments;
e78566595089 initial import
mandel
parents:
diff changeset
583 uint m_constant : 1;
e78566595089 initial import
mandel
parents:
diff changeset
584 uint m_invalid : 1;
e78566595089 initial import
mandel
parents:
diff changeset
585 int m_jumptable_id;
e78566595089 initial import
mandel
parents:
diff changeset
586 };
e78566595089 initial import
mandel
parents:
diff changeset
587
e78566595089 initial import
mandel
parents:
diff changeset
588
e78566595089 initial import
mandel
parents:
diff changeset
589 class AbstractMetaEnumValue
e78566595089 initial import
mandel
parents:
diff changeset
590 {
e78566595089 initial import
mandel
parents:
diff changeset
591 public:
e78566595089 initial import
mandel
parents:
diff changeset
592 AbstractMetaEnumValue()
e78566595089 initial import
mandel
parents:
diff changeset
593 : m_value_set(false), m_value(0)
e78566595089 initial import
mandel
parents:
diff changeset
594 {
e78566595089 initial import
mandel
parents:
diff changeset
595 }
e78566595089 initial import
mandel
parents:
diff changeset
596
e78566595089 initial import
mandel
parents:
diff changeset
597 int value() const { return m_value; }
e78566595089 initial import
mandel
parents:
diff changeset
598 void setValue(int value) { m_value_set = true; m_value = value; }
e78566595089 initial import
mandel
parents:
diff changeset
599
e78566595089 initial import
mandel
parents:
diff changeset
600 QString stringValue() const { return m_string_value; }
e78566595089 initial import
mandel
parents:
diff changeset
601 void setStringValue(const QString &v) { m_string_value = v; }
e78566595089 initial import
mandel
parents:
diff changeset
602
e78566595089 initial import
mandel
parents:
diff changeset
603 QString name() const { return m_name; }
e78566595089 initial import
mandel
parents:
diff changeset
604 void setName(const QString &name) { m_name = name; }
e78566595089 initial import
mandel
parents:
diff changeset
605
e78566595089 initial import
mandel
parents:
diff changeset
606 bool isValueSet() const { return m_value_set; }
e78566595089 initial import
mandel
parents:
diff changeset
607
e78566595089 initial import
mandel
parents:
diff changeset
608 private:
e78566595089 initial import
mandel
parents:
diff changeset
609 QString m_name;
e78566595089 initial import
mandel
parents:
diff changeset
610 QString m_string_value;
e78566595089 initial import
mandel
parents:
diff changeset
611
e78566595089 initial import
mandel
parents:
diff changeset
612 bool m_value_set;
e78566595089 initial import
mandel
parents:
diff changeset
613 int m_value;
e78566595089 initial import
mandel
parents:
diff changeset
614 };
e78566595089 initial import
mandel
parents:
diff changeset
615
e78566595089 initial import
mandel
parents:
diff changeset
616
e78566595089 initial import
mandel
parents:
diff changeset
617 class AbstractMetaEnumValueList : public QList<AbstractMetaEnumValue *>
e78566595089 initial import
mandel
parents:
diff changeset
618 {
e78566595089 initial import
mandel
parents:
diff changeset
619 public:
e78566595089 initial import
mandel
parents:
diff changeset
620 AbstractMetaEnumValue *find(const QString &name) const;
e78566595089 initial import
mandel
parents:
diff changeset
621 };
e78566595089 initial import
mandel
parents:
diff changeset
622
e78566595089 initial import
mandel
parents:
diff changeset
623 class AbstractMetaEnum : public AbstractMetaAttributes
e78566595089 initial import
mandel
parents:
diff changeset
624 {
e78566595089 initial import
mandel
parents:
diff changeset
625 public:
e78566595089 initial import
mandel
parents:
diff changeset
626 AbstractMetaEnum() : m_type_entry(0), m_class(0), m_has_qenums_declaration(false) {}
e78566595089 initial import
mandel
parents:
diff changeset
627
e78566595089 initial import
mandel
parents:
diff changeset
628 AbstractMetaEnumValueList values() const { return m_enum_values; }
e78566595089 initial import
mandel
parents:
diff changeset
629 void addEnumValue(AbstractMetaEnumValue *enumValue) { m_enum_values << enumValue; }
e78566595089 initial import
mandel
parents:
diff changeset
630
e78566595089 initial import
mandel
parents:
diff changeset
631 QString name() const { return m_type_entry->targetLangName(); }
e78566595089 initial import
mandel
parents:
diff changeset
632 QString qualifier() const { return m_type_entry->javaQualifier(); }
e78566595089 initial import
mandel
parents:
diff changeset
633 QString package() const { return m_type_entry->javaPackage(); }
e78566595089 initial import
mandel
parents:
diff changeset
634 QString fullName() const { return package() + "." + qualifier() + "." + name(); }
e78566595089 initial import
mandel
parents:
diff changeset
635
e78566595089 initial import
mandel
parents:
diff changeset
636 // Has the enum been declared inside a Q_ENUMS() macro in its enclosing class?
e78566595089 initial import
mandel
parents:
diff changeset
637 void setHasQEnumsDeclaration(bool on) { m_has_qenums_declaration = on; }
e78566595089 initial import
mandel
parents:
diff changeset
638 bool hasQEnumsDeclaration() const { return m_has_qenums_declaration; }
e78566595089 initial import
mandel
parents:
diff changeset
639
e78566595089 initial import
mandel
parents:
diff changeset
640 EnumTypeEntry *typeEntry() const { return m_type_entry; }
e78566595089 initial import
mandel
parents:
diff changeset
641 void setTypeEntry(EnumTypeEntry *entry) { m_type_entry = entry; }
e78566595089 initial import
mandel
parents:
diff changeset
642
e78566595089 initial import
mandel
parents:
diff changeset
643 AbstractMetaClass *enclosingClass() const { return m_class; }
e78566595089 initial import
mandel
parents:
diff changeset
644 void setEnclosingClass(AbstractMetaClass *c) { m_class = c; }
e78566595089 initial import
mandel
parents:
diff changeset
645
e78566595089 initial import
mandel
parents:
diff changeset
646 private:
e78566595089 initial import
mandel
parents:
diff changeset
647 AbstractMetaEnumValueList m_enum_values;
e78566595089 initial import
mandel
parents:
diff changeset
648 EnumTypeEntry *m_type_entry;
e78566595089 initial import
mandel
parents:
diff changeset
649 AbstractMetaClass *m_class;
e78566595089 initial import
mandel
parents:
diff changeset
650
e78566595089 initial import
mandel
parents:
diff changeset
651 uint m_has_qenums_declaration : 1;
e78566595089 initial import
mandel
parents:
diff changeset
652 uint m_reserved : 31;
e78566595089 initial import
mandel
parents:
diff changeset
653 };
e78566595089 initial import
mandel
parents:
diff changeset
654
e78566595089 initial import
mandel
parents:
diff changeset
655 typedef QList<AbstractMetaEnum *> AbstractMetaEnumList;
e78566595089 initial import
mandel
parents:
diff changeset
656
e78566595089 initial import
mandel
parents:
diff changeset
657 class AbstractMetaClass : public AbstractMetaAttributes
e78566595089 initial import
mandel
parents:
diff changeset
658 {
e78566595089 initial import
mandel
parents:
diff changeset
659 public:
e78566595089 initial import
mandel
parents:
diff changeset
660 enum FunctionQueryOption {
e78566595089 initial import
mandel
parents:
diff changeset
661 Constructors = 0x000001, // Only constructors
e78566595089 initial import
mandel
parents:
diff changeset
662 //Destructors = 0x000002, // Only destructors. Not included in class.
e78566595089 initial import
mandel
parents:
diff changeset
663 VirtualFunctions = 0x000004, // Only virtual functions (virtual in both TargetLang and C++)
e78566595089 initial import
mandel
parents:
diff changeset
664 FinalInTargetLangFunctions = 0x000008, // Only functions that are non-virtual in TargetLang
e78566595089 initial import
mandel
parents:
diff changeset
665 FinalInCppFunctions = 0x000010, // Only functions that are non-virtual in C++
e78566595089 initial import
mandel
parents:
diff changeset
666 ClassImplements = 0x000020, // Only functions implemented by the current class
e78566595089 initial import
mandel
parents:
diff changeset
667 Inconsistent = 0x000040, // Only inconsistent functions (inconsistent virtualness in TargetLang/C++)
e78566595089 initial import
mandel
parents:
diff changeset
668 StaticFunctions = 0x000080, // Only static functions
e78566595089 initial import
mandel
parents:
diff changeset
669 Signals = 0x000100, // Only signals
e78566595089 initial import
mandel
parents:
diff changeset
670 NormalFunctions = 0x000200, // Only functions that aren't signals
e78566595089 initial import
mandel
parents:
diff changeset
671 Visible = 0x000400, // Only public and protected functions
e78566595089 initial import
mandel
parents:
diff changeset
672 ForcedShellFunctions = 0x000800, // Only functions that are overridden to be implemented in the shell class
e78566595089 initial import
mandel
parents:
diff changeset
673 WasPublic = 0x001000, // Only functions that were originally public
e78566595089 initial import
mandel
parents:
diff changeset
674 WasProtected = 0x002000, // Only functions that were originally protected
e78566595089 initial import
mandel
parents:
diff changeset
675 NonStaticFunctions = 0x004000, // No static functions
e78566595089 initial import
mandel
parents:
diff changeset
676 Empty = 0x008000, // Empty overrides of abstract functions
e78566595089 initial import
mandel
parents:
diff changeset
677 Invisible = 0x010000, // Only private functions
e78566595089 initial import
mandel
parents:
diff changeset
678 VirtualInCppFunctions = 0x020000, // Only functions that are virtual in C++
e78566595089 initial import
mandel
parents:
diff changeset
679 NonEmptyFunctions = 0x040000, // Only functions with JNI implementations
e78566595089 initial import
mandel
parents:
diff changeset
680 VirtualInTargetLangFunctions = 0x080000, // Only functions which are virtual in TargetLang
e78566595089 initial import
mandel
parents:
diff changeset
681 AbstractFunctions = 0x100000, // Only abstract functions
e78566595089 initial import
mandel
parents:
diff changeset
682 WasVisible = 0x200000, // Only functions that were public or protected in the original code
e78566595089 initial import
mandel
parents:
diff changeset
683 NotRemovedFromTargetLang = 0x400000, // Only functions that have not been removed from TargetLang
e78566595089 initial import
mandel
parents:
diff changeset
684 NotRemovedFromShell = 0x800000, // Only functions that have not been removed from the shell class
e78566595089 initial import
mandel
parents:
diff changeset
685 VirtualSlots = 0x1000000 // Only functions that are set as virtual slots in the type system
e78566595089 initial import
mandel
parents:
diff changeset
686 };
e78566595089 initial import
mandel
parents:
diff changeset
687
e78566595089 initial import
mandel
parents:
diff changeset
688 AbstractMetaClass()
e78566595089 initial import
mandel
parents:
diff changeset
689 : m_namespace(false),
e78566595089 initial import
mandel
parents:
diff changeset
690 m_qobject(false),
e78566595089 initial import
mandel
parents:
diff changeset
691 m_has_virtuals(false),
e78566595089 initial import
mandel
parents:
diff changeset
692 m_has_nonpublic(false),
e78566595089 initial import
mandel
parents:
diff changeset
693 m_has_virtual_slots(false),
e78566595089 initial import
mandel
parents:
diff changeset
694 m_has_nonprivateconstructor(false),
e78566595089 initial import
mandel
parents:
diff changeset
695 m_functions_fixed(false),
e78566595089 initial import
mandel
parents:
diff changeset
696 m_has_public_destructor(true),
e78566595089 initial import
mandel
parents:
diff changeset
697 m_force_shell_class(false),
e78566595089 initial import
mandel
parents:
diff changeset
698 m_has_hash_function(false),
e78566595089 initial import
mandel
parents:
diff changeset
699 m_has_equals_operator(false),
e78566595089 initial import
mandel
parents:
diff changeset
700 m_has_clone_operator(false),
354
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
701 m_has_virtual_destructor(false),
1
e78566595089 initial import
mandel
parents:
diff changeset
702 m_is_type_alias(false),
e78566595089 initial import
mandel
parents:
diff changeset
703 m_enclosing_class(0),
e78566595089 initial import
mandel
parents:
diff changeset
704 m_base_class(0),
e78566595089 initial import
mandel
parents:
diff changeset
705 m_template_base_class(0),
e78566595089 initial import
mandel
parents:
diff changeset
706 m_extracted_interface(0),
e78566595089 initial import
mandel
parents:
diff changeset
707 m_primary_interface_implementor(0),
e78566595089 initial import
mandel
parents:
diff changeset
708 m_type_entry(0),
110
136c9ee83ee5 put conversion code in separate functions
eldar
parents: 42
diff changeset
709 m_qDebug_stream_function(0),
136c9ee83ee5 put conversion code in separate functions
eldar
parents: 42
diff changeset
710 needsConversionFunc(false)
1
e78566595089 initial import
mandel
parents:
diff changeset
711 {
e78566595089 initial import
mandel
parents:
diff changeset
712 }
e78566595089 initial import
mandel
parents:
diff changeset
713
e78566595089 initial import
mandel
parents:
diff changeset
714 virtual ~AbstractMetaClass();
e78566595089 initial import
mandel
parents:
diff changeset
715
e78566595089 initial import
mandel
parents:
diff changeset
716 AbstractMetaClass *extractInterface();
e78566595089 initial import
mandel
parents:
diff changeset
717 void fixFunctions();
e78566595089 initial import
mandel
parents:
diff changeset
718
e78566595089 initial import
mandel
parents:
diff changeset
719 AbstractMetaFunctionList functions() const { return m_functions; }
e78566595089 initial import
mandel
parents:
diff changeset
720 void setFunctions(const AbstractMetaFunctionList &functions);
e78566595089 initial import
mandel
parents:
diff changeset
721 void addFunction(AbstractMetaFunction *function);
e78566595089 initial import
mandel
parents:
diff changeset
722 bool hasFunction(const AbstractMetaFunction *f) const;
e78566595089 initial import
mandel
parents:
diff changeset
723 bool hasFunction(const QString &str) const;
e78566595089 initial import
mandel
parents:
diff changeset
724 bool hasSignal(const AbstractMetaFunction *f) const;
e78566595089 initial import
mandel
parents:
diff changeset
725
e78566595089 initial import
mandel
parents:
diff changeset
726 bool hasConstructors() const;
293
8627891e4556 QList updates
eldar
parents: 288
diff changeset
727 AbstractMetaFunction *copyConstructor() const;
1
e78566595089 initial import
mandel
parents:
diff changeset
728
e78566595089 initial import
mandel
parents:
diff changeset
729 void addDefaultConstructor();
e78566595089 initial import
mandel
parents:
diff changeset
730
e78566595089 initial import
mandel
parents:
diff changeset
731 bool hasNonPrivateConstructor() const { return m_has_nonprivateconstructor; }
e78566595089 initial import
mandel
parents:
diff changeset
732 void setHasNonPrivateConstructor(bool on) { m_has_nonprivateconstructor = on; }
e78566595089 initial import
mandel
parents:
diff changeset
733 bool hasPublicDestructor() const { return m_has_public_destructor; }
e78566595089 initial import
mandel
parents:
diff changeset
734 void setHasPublicDestructor(bool on) { m_has_public_destructor = on; }
e78566595089 initial import
mandel
parents:
diff changeset
735
e78566595089 initial import
mandel
parents:
diff changeset
736 AbstractMetaFunctionList queryFunctionsByName(const QString &name) const;
e78566595089 initial import
mandel
parents:
diff changeset
737 AbstractMetaFunctionList queryFunctions(uint query) const;
e78566595089 initial import
mandel
parents:
diff changeset
738 inline AbstractMetaFunctionList allVirtualFunctions() const;
e78566595089 initial import
mandel
parents:
diff changeset
739 inline AbstractMetaFunctionList allFinalFunctions() const;
e78566595089 initial import
mandel
parents:
diff changeset
740 AbstractMetaFunctionList functionsInTargetLang() const;
e78566595089 initial import
mandel
parents:
diff changeset
741 AbstractMetaFunctionList functionsInShellClass() const;
e78566595089 initial import
mandel
parents:
diff changeset
742 inline AbstractMetaFunctionList cppInconsistentFunctions() const;
e78566595089 initial import
mandel
parents:
diff changeset
743 inline AbstractMetaFunctionList cppSignalFunctions() const;
e78566595089 initial import
mandel
parents:
diff changeset
744 AbstractMetaFunctionList publicOverrideFunctions() const;
e78566595089 initial import
mandel
parents:
diff changeset
745 AbstractMetaFunctionList virtualOverrideFunctions() const;
e78566595089 initial import
mandel
parents:
diff changeset
746 AbstractMetaFunctionList virtualFunctions() const;
e78566595089 initial import
mandel
parents:
diff changeset
747 AbstractMetaFunctionList nonVirtualShellFunctions() const;
e78566595089 initial import
mandel
parents:
diff changeset
748
e78566595089 initial import
mandel
parents:
diff changeset
749 AbstractMetaFieldList fields() const { return m_fields; }
e78566595089 initial import
mandel
parents:
diff changeset
750 void setFields(const AbstractMetaFieldList &fields) { m_fields = fields; }
e78566595089 initial import
mandel
parents:
diff changeset
751 void addField(AbstractMetaField *field) { m_fields << field; }
e78566595089 initial import
mandel
parents:
diff changeset
752
e78566595089 initial import
mandel
parents:
diff changeset
753 AbstractMetaEnumList enums() const { return m_enums; }
e78566595089 initial import
mandel
parents:
diff changeset
754 void setEnums(const AbstractMetaEnumList &enums) { m_enums = enums; }
e78566595089 initial import
mandel
parents:
diff changeset
755 void addEnum(AbstractMetaEnum *e) { m_enums << e; }
e78566595089 initial import
mandel
parents:
diff changeset
756
e78566595089 initial import
mandel
parents:
diff changeset
757 AbstractMetaEnum *findEnum(const QString &enumName);
e78566595089 initial import
mandel
parents:
diff changeset
758 AbstractMetaEnum *findEnumForValue(const QString &enumName);
e78566595089 initial import
mandel
parents:
diff changeset
759 AbstractMetaEnumValue *findEnumValue(const QString &enumName, AbstractMetaEnum *meta_enum);
e78566595089 initial import
mandel
parents:
diff changeset
760
e78566595089 initial import
mandel
parents:
diff changeset
761 AbstractMetaClassList interfaces() const { return m_interfaces; }
e78566595089 initial import
mandel
parents:
diff changeset
762 void addInterface(AbstractMetaClass *interface);
e78566595089 initial import
mandel
parents:
diff changeset
763 void setInterfaces(const AbstractMetaClassList &interface);
e78566595089 initial import
mandel
parents:
diff changeset
764
e78566595089 initial import
mandel
parents:
diff changeset
765 QString fullName() const { return package() + "." + name(); }
e78566595089 initial import
mandel
parents:
diff changeset
766 QString name() const;
e78566595089 initial import
mandel
parents:
diff changeset
767
e78566595089 initial import
mandel
parents:
diff changeset
768 QString baseClassName() const { return m_base_class ? m_base_class->name() : QString(); }
e78566595089 initial import
mandel
parents:
diff changeset
769
e78566595089 initial import
mandel
parents:
diff changeset
770 AbstractMetaClass *baseClass() const { return m_base_class; }
e78566595089 initial import
mandel
parents:
diff changeset
771 void setBaseClass(AbstractMetaClass *base_class) { m_base_class = base_class; }
e78566595089 initial import
mandel
parents:
diff changeset
772
e78566595089 initial import
mandel
parents:
diff changeset
773 const AbstractMetaClass *enclosingClass() const { return m_enclosing_class; }
e78566595089 initial import
mandel
parents:
diff changeset
774 void setEnclosingClass(AbstractMetaClass *cl) { m_enclosing_class = cl; }
e78566595089 initial import
mandel
parents:
diff changeset
775
e78566595089 initial import
mandel
parents:
diff changeset
776 QString package() const { return m_type_entry->javaPackage(); }
e78566595089 initial import
mandel
parents:
diff changeset
777 bool isInterface() const { return m_type_entry->isInterface(); }
e78566595089 initial import
mandel
parents:
diff changeset
778 bool isNamespace() const { return m_type_entry->isNamespace(); }
e78566595089 initial import
mandel
parents:
diff changeset
779 bool isQObject() const { return m_type_entry->isQObject(); }
e78566595089 initial import
mandel
parents:
diff changeset
780 bool isQtNamespace() const { return isNamespace() && name() == "Qt"; }
e78566595089 initial import
mandel
parents:
diff changeset
781 QString qualifiedCppName() const { return m_type_entry->qualifiedCppName(); }
e78566595089 initial import
mandel
parents:
diff changeset
782
e78566595089 initial import
mandel
parents:
diff changeset
783 bool hasInconsistentFunctions() const;
e78566595089 initial import
mandel
parents:
diff changeset
784 bool hasSignals() const;
e78566595089 initial import
mandel
parents:
diff changeset
785 bool inheritsFrom(const AbstractMetaClass *other) const;
e78566595089 initial import
mandel
parents:
diff changeset
786
e78566595089 initial import
mandel
parents:
diff changeset
787 void setForceShellClass(bool on) { m_force_shell_class = on; }
e78566595089 initial import
mandel
parents:
diff changeset
788 bool generateShellClass() const;
e78566595089 initial import
mandel
parents:
diff changeset
789
e78566595089 initial import
mandel
parents:
diff changeset
790 bool hasVirtualSlots() const { return m_has_virtual_slots; }
e78566595089 initial import
mandel
parents:
diff changeset
791 bool hasVirtualFunctions() const { return !isFinal() && m_has_virtuals; }
e78566595089 initial import
mandel
parents:
diff changeset
792 bool hasProtectedFunctions() const;
e78566595089 initial import
mandel
parents:
diff changeset
793
354
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
794 // returns true if this class or its base classes have a
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
795 // virtual destructor
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
796 bool hasVirtualDestructor() const { return m_has_virtual_destructor
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
797 || m_base_class && m_base_class->hasVirtualDestructor(); }
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
798
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
799 const AbstractMetaClass* destructorBase() const
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
800 {
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
801 const AbstractMetaClass* ret = this;
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
802 for (const AbstractMetaClass* base = this->m_base_class; base; base = base->m_base_class) {
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
803 if (base->m_has_virtual_destructor)
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
804 ret = base;
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
805 }
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
806 return ret;
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
807 }
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
808
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
809 bool isDestructorBase() const
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
810 {
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
811 return this == destructorBase();
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
812 }
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
813
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
814 const AbstractMetaClass* polymorphicBase() const
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
815 {
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
816 const AbstractMetaClass *ret = 0;
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
817
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
818 for (const AbstractMetaClass *base = this; base; base = base->baseClass()) {
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
819 if (base->m_has_virtuals || base->m_has_virtual_destructor)
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
820 ret = base;
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
821 }
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
822
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
823 return ret;
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
824 }
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
825
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
826
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
827
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
828 bool isPolymorphic() const
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
829 {
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
830 for (const AbstractMetaClass *base = this; base; base = base->baseClass()) {
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
831 if (base->m_has_virtuals || base->m_has_virtual_destructor)
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
832 return true;
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
833 }
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
834 return false;
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
835 }
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
836
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
837 bool setHasVirtualDestructor(bool value) { m_has_virtual_destructor = value; }
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
838
1
e78566595089 initial import
mandel
parents:
diff changeset
839 QList<TypeEntry *> templateArguments() const { return m_template_args; }
e78566595089 initial import
mandel
parents:
diff changeset
840 void setTemplateArguments(const QList<TypeEntry *> &args) { m_template_args = args; }
e78566595089 initial import
mandel
parents:
diff changeset
841
e78566595089 initial import
mandel
parents:
diff changeset
842 bool hasFieldAccessors() const;
e78566595089 initial import
mandel
parents:
diff changeset
843
e78566595089 initial import
mandel
parents:
diff changeset
844 // only valid during metajavabuilder's run
e78566595089 initial import
mandel
parents:
diff changeset
845 QStringList baseClassNames() const { return m_base_class_names; }
e78566595089 initial import
mandel
parents:
diff changeset
846 void setBaseClassNames(const QStringList &names) { m_base_class_names = names; }
e78566595089 initial import
mandel
parents:
diff changeset
847
e78566595089 initial import
mandel
parents:
diff changeset
848 AbstractMetaClass *primaryInterfaceImplementor() const { return m_primary_interface_implementor; }
e78566595089 initial import
mandel
parents:
diff changeset
849 void setPrimaryInterfaceImplementor(AbstractMetaClass *cl) { m_primary_interface_implementor = cl; }
e78566595089 initial import
mandel
parents:
diff changeset
850
e78566595089 initial import
mandel
parents:
diff changeset
851 const ComplexTypeEntry *typeEntry() const { return m_type_entry; }
e78566595089 initial import
mandel
parents:
diff changeset
852 ComplexTypeEntry *typeEntry() { return m_type_entry; }
e78566595089 initial import
mandel
parents:
diff changeset
853 void setTypeEntry(ComplexTypeEntry *type) { m_type_entry = type; }
e78566595089 initial import
mandel
parents:
diff changeset
854
e78566595089 initial import
mandel
parents:
diff changeset
855 void setHasHashFunction(bool on) { m_has_hash_function = on; }
e78566595089 initial import
mandel
parents:
diff changeset
856 bool hasHashFunction() const { return m_has_hash_function; }
e78566595089 initial import
mandel
parents:
diff changeset
857
e78566595089 initial import
mandel
parents:
diff changeset
858 void setToStringCapability(FunctionModelItem fun) { m_qDebug_stream_function= fun; }
e78566595089 initial import
mandel
parents:
diff changeset
859 FunctionModelItem hasToStringCapability() const { return m_qDebug_stream_function; }
e78566595089 initial import
mandel
parents:
diff changeset
860
e78566595089 initial import
mandel
parents:
diff changeset
861 virtual bool hasDefaultToStringFunction() const;
e78566595089 initial import
mandel
parents:
diff changeset
862
e78566595089 initial import
mandel
parents:
diff changeset
863 void setHasEqualsOperator(bool on) { m_has_equals_operator = on; }
e78566595089 initial import
mandel
parents:
diff changeset
864 bool hasEqualsOperator() const { return m_has_equals_operator; }
e78566595089 initial import
mandel
parents:
diff changeset
865
e78566595089 initial import
mandel
parents:
diff changeset
866 void setHasCloneOperator(bool on) { m_has_clone_operator = on; }
e78566595089 initial import
mandel
parents:
diff changeset
867 bool hasCloneOperator() const { return m_has_clone_operator; }
e78566595089 initial import
mandel
parents:
diff changeset
868
e78566595089 initial import
mandel
parents:
diff changeset
869 void addPropertySpec(QPropertySpec *spec) { m_property_specs << spec; }
e78566595089 initial import
mandel
parents:
diff changeset
870 QList<QPropertySpec *> propertySpecs() const { return m_property_specs; }
e78566595089 initial import
mandel
parents:
diff changeset
871
e78566595089 initial import
mandel
parents:
diff changeset
872 QPropertySpec *propertySpecForRead(const QString &name) const;
e78566595089 initial import
mandel
parents:
diff changeset
873 QPropertySpec *propertySpecForWrite(const QString &name) const;
e78566595089 initial import
mandel
parents:
diff changeset
874 QPropertySpec *propertySpecForReset(const QString &name) const;
e78566595089 initial import
mandel
parents:
diff changeset
875
e78566595089 initial import
mandel
parents:
diff changeset
876 QList<ReferenceCount> referenceCounts() const;
e78566595089 initial import
mandel
parents:
diff changeset
877
e78566595089 initial import
mandel
parents:
diff changeset
878 void setEqualsFunctions(const AbstractMetaFunctionList &lst) { m_equals_functions = lst; }
e78566595089 initial import
mandel
parents:
diff changeset
879 AbstractMetaFunctionList equalsFunctions() const { return m_equals_functions; }
e78566595089 initial import
mandel
parents:
diff changeset
880
e78566595089 initial import
mandel
parents:
diff changeset
881 void setNotEqualsFunctions(const AbstractMetaFunctionList &lst) { m_nequals_functions = lst; }
e78566595089 initial import
mandel
parents:
diff changeset
882 AbstractMetaFunctionList notEqualsFunctions() const { return m_nequals_functions; }
e78566595089 initial import
mandel
parents:
diff changeset
883
e78566595089 initial import
mandel
parents:
diff changeset
884 void setLessThanFunctions(const AbstractMetaFunctionList &lst) { m_less_than_functions = lst; }
e78566595089 initial import
mandel
parents:
diff changeset
885 AbstractMetaFunctionList lessThanFunctions() const { return m_less_than_functions; }
e78566595089 initial import
mandel
parents:
diff changeset
886
e78566595089 initial import
mandel
parents:
diff changeset
887 void setGreaterThanFunctions(const AbstractMetaFunctionList &lst) { m_greater_than_functions = lst; }
e78566595089 initial import
mandel
parents:
diff changeset
888 AbstractMetaFunctionList greaterThanFunctions() const { return m_greater_than_functions; }
e78566595089 initial import
mandel
parents:
diff changeset
889
e78566595089 initial import
mandel
parents:
diff changeset
890 void setLessThanEqFunctions(const AbstractMetaFunctionList &lst) { m_less_than_eq_functions = lst; }
e78566595089 initial import
mandel
parents:
diff changeset
891 AbstractMetaFunctionList lessThanEqFunctions() const { return m_less_than_eq_functions; }
e78566595089 initial import
mandel
parents:
diff changeset
892
e78566595089 initial import
mandel
parents:
diff changeset
893 void setGreaterThanEqFunctions(const AbstractMetaFunctionList &lst) { m_greater_than_eq_functions = lst; }
e78566595089 initial import
mandel
parents:
diff changeset
894 AbstractMetaFunctionList greaterThanEqFunctions() const { return m_greater_than_eq_functions; }
e78566595089 initial import
mandel
parents:
diff changeset
895
e78566595089 initial import
mandel
parents:
diff changeset
896 void sortFunctions();
e78566595089 initial import
mandel
parents:
diff changeset
897
e78566595089 initial import
mandel
parents:
diff changeset
898 const AbstractMetaClass *templateBaseClass() const { return m_template_base_class; }
e78566595089 initial import
mandel
parents:
diff changeset
899 void setTemplateBaseClass(const AbstractMetaClass *cls) { m_template_base_class = cls; }
e78566595089 initial import
mandel
parents:
diff changeset
900
e78566595089 initial import
mandel
parents:
diff changeset
901 void setTypeAlias(bool typeAlias) { m_is_type_alias = typeAlias; }
e78566595089 initial import
mandel
parents:
diff changeset
902 bool isTypeAlias() const { return m_is_type_alias; }
e78566595089 initial import
mandel
parents:
diff changeset
903
42
eb3b5bbffc8f CMake: generator is not running multiple times.
SokoL_SD
parents: 1
diff changeset
904 const QStringList &depends() { return m_type_entry->depends(); }
304
04b52676b45f fixed compiling all packages
eldar_ins@eldar-laptop
parents: 298
diff changeset
905 AbstractMetaFunctionList allFunctions() const { return m_functions; }
110
136c9ee83ee5 put conversion code in separate functions
eldar
parents: 42
diff changeset
906
136c9ee83ee5 put conversion code in separate functions
eldar
parents: 42
diff changeset
907 bool needsConversionFunc;
1
e78566595089 initial import
mandel
parents:
diff changeset
908 private:
e78566595089 initial import
mandel
parents:
diff changeset
909 uint m_namespace : 1;
e78566595089 initial import
mandel
parents:
diff changeset
910 uint m_qobject : 1;
e78566595089 initial import
mandel
parents:
diff changeset
911 uint m_has_virtuals : 1;
e78566595089 initial import
mandel
parents:
diff changeset
912 uint m_has_nonpublic : 1;
e78566595089 initial import
mandel
parents:
diff changeset
913 uint m_has_virtual_slots : 1;
e78566595089 initial import
mandel
parents:
diff changeset
914 uint m_has_nonprivateconstructor : 1;
e78566595089 initial import
mandel
parents:
diff changeset
915 uint m_functions_fixed : 1;
e78566595089 initial import
mandel
parents:
diff changeset
916 uint m_has_public_destructor : 1;
e78566595089 initial import
mandel
parents:
diff changeset
917 uint m_force_shell_class : 1;
e78566595089 initial import
mandel
parents:
diff changeset
918 uint m_has_hash_function : 1;
e78566595089 initial import
mandel
parents:
diff changeset
919 uint m_has_equals_operator : 1;
e78566595089 initial import
mandel
parents:
diff changeset
920 uint m_has_clone_operator :1;
e78566595089 initial import
mandel
parents:
diff changeset
921 uint m_is_type_alias : 1;
354
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
922 uint m_has_virtual_destructor : 1;
18bd68f586c6 removed superfluous destructors
Max Samukha <maxter@spambox.com>
parents: 326
diff changeset
923 uint m_reserved : 18;
1
e78566595089 initial import
mandel
parents:
diff changeset
924
e78566595089 initial import
mandel
parents:
diff changeset
925 const AbstractMetaClass *m_enclosing_class;
e78566595089 initial import
mandel
parents:
diff changeset
926 AbstractMetaClass *m_base_class;
e78566595089 initial import
mandel
parents:
diff changeset
927 const AbstractMetaClass *m_template_base_class;
e78566595089 initial import
mandel
parents:
diff changeset
928 AbstractMetaFunctionList m_functions;
e78566595089 initial import
mandel
parents:
diff changeset
929 AbstractMetaFieldList m_fields;
e78566595089 initial import
mandel
parents:
diff changeset
930 AbstractMetaEnumList m_enums;
e78566595089 initial import
mandel
parents:
diff changeset
931 AbstractMetaClassList m_interfaces;
e78566595089 initial import
mandel
parents:
diff changeset
932 AbstractMetaClass *m_extracted_interface;
e78566595089 initial import
mandel
parents:
diff changeset
933 AbstractMetaClass *m_primary_interface_implementor;
e78566595089 initial import
mandel
parents:
diff changeset
934 QList<QPropertySpec *> m_property_specs;
e78566595089 initial import
mandel
parents:
diff changeset
935 AbstractMetaFunctionList m_equals_functions;
e78566595089 initial import
mandel
parents:
diff changeset
936 AbstractMetaFunctionList m_nequals_functions;
e78566595089 initial import
mandel
parents:
diff changeset
937
e78566595089 initial import
mandel
parents:
diff changeset
938 AbstractMetaFunctionList m_less_than_functions;
e78566595089 initial import
mandel
parents:
diff changeset
939 AbstractMetaFunctionList m_greater_than_functions;
e78566595089 initial import
mandel
parents:
diff changeset
940 AbstractMetaFunctionList m_less_than_eq_functions;
e78566595089 initial import
mandel
parents:
diff changeset
941 AbstractMetaFunctionList m_greater_than_eq_functions;
e78566595089 initial import
mandel
parents:
diff changeset
942
e78566595089 initial import
mandel
parents:
diff changeset
943 QStringList m_base_class_names;
e78566595089 initial import
mandel
parents:
diff changeset
944 QList<TypeEntry *> m_template_args;
e78566595089 initial import
mandel
parents:
diff changeset
945 ComplexTypeEntry *m_type_entry;
e78566595089 initial import
mandel
parents:
diff changeset
946 FunctionModelItem m_qDebug_stream_function;
e78566595089 initial import
mandel
parents:
diff changeset
947
e78566595089 initial import
mandel
parents:
diff changeset
948 // qtd2 hack
e78566595089 initial import
mandel
parents:
diff changeset
949 friend class DGenerator;
e78566595089 initial import
mandel
parents:
diff changeset
950 };
e78566595089 initial import
mandel
parents:
diff changeset
951
e78566595089 initial import
mandel
parents:
diff changeset
952 class QPropertySpec {
e78566595089 initial import
mandel
parents:
diff changeset
953 public:
e78566595089 initial import
mandel
parents:
diff changeset
954 QPropertySpec(const TypeEntry *type)
e78566595089 initial import
mandel
parents:
diff changeset
955 : m_type(type),
e78566595089 initial import
mandel
parents:
diff changeset
956 m_index(-1)
e78566595089 initial import
mandel
parents:
diff changeset
957 {
e78566595089 initial import
mandel
parents:
diff changeset
958 }
e78566595089 initial import
mandel
parents:
diff changeset
959
e78566595089 initial import
mandel
parents:
diff changeset
960 const TypeEntry *type() const { return m_type; }
e78566595089 initial import
mandel
parents:
diff changeset
961
e78566595089 initial import
mandel
parents:
diff changeset
962 QString name() const { return m_name; }
e78566595089 initial import
mandel
parents:
diff changeset
963 void setName(const QString &name) { m_name = name; }
e78566595089 initial import
mandel
parents:
diff changeset
964
e78566595089 initial import
mandel
parents:
diff changeset
965 QString read() const { return m_read; }
e78566595089 initial import
mandel
parents:
diff changeset
966 void setRead(const QString &read) { m_read = read; }
e78566595089 initial import
mandel
parents:
diff changeset
967
e78566595089 initial import
mandel
parents:
diff changeset
968 QString write() const { return m_write; }
e78566595089 initial import
mandel
parents:
diff changeset
969 void setWrite(const QString &write) { m_write = write; }
e78566595089 initial import
mandel
parents:
diff changeset
970
e78566595089 initial import
mandel
parents:
diff changeset
971 QString designable() const { return m_designable; }
e78566595089 initial import
mandel
parents:
diff changeset
972 void setDesignable(const QString &designable) { m_designable = designable; }
e78566595089 initial import
mandel
parents:
diff changeset
973
e78566595089 initial import
mandel
parents:
diff changeset
974 QString reset() const { return m_reset; }
e78566595089 initial import
mandel
parents:
diff changeset
975 void setReset(const QString &reset) { m_reset = reset; }
e78566595089 initial import
mandel
parents:
diff changeset
976
e78566595089 initial import
mandel
parents:
diff changeset
977 int index() const { return m_index; }
e78566595089 initial import
mandel
parents:
diff changeset
978 void setIndex(int index) { m_index = index; }
e78566595089 initial import
mandel
parents:
diff changeset
979
e78566595089 initial import
mandel
parents:
diff changeset
980 private:
e78566595089 initial import
mandel
parents:
diff changeset
981 QString m_name;
e78566595089 initial import
mandel
parents:
diff changeset
982 QString m_read;
e78566595089 initial import
mandel
parents:
diff changeset
983 QString m_write;
e78566595089 initial import
mandel
parents:
diff changeset
984 QString m_designable;
e78566595089 initial import
mandel
parents:
diff changeset
985 QString m_reset;
e78566595089 initial import
mandel
parents:
diff changeset
986 const TypeEntry *m_type;
e78566595089 initial import
mandel
parents:
diff changeset
987 int m_index;
e78566595089 initial import
mandel
parents:
diff changeset
988 };
e78566595089 initial import
mandel
parents:
diff changeset
989
e78566595089 initial import
mandel
parents:
diff changeset
990 // qtd
e78566595089 initial import
mandel
parents:
diff changeset
991 class ArgumentReplace
e78566595089 initial import
mandel
parents:
diff changeset
992 {
e78566595089 initial import
mandel
parents:
diff changeset
993 private:
e78566595089 initial import
mandel
parents:
diff changeset
994 QHash<QString, QString> data;
e78566595089 initial import
mandel
parents:
diff changeset
995 static ArgumentReplace *m_instance;
e78566595089 initial import
mandel
parents:
diff changeset
996 ArgumentReplace();
e78566595089 initial import
mandel
parents:
diff changeset
997
e78566595089 initial import
mandel
parents:
diff changeset
998 public:
e78566595089 initial import
mandel
parents:
diff changeset
999 static void init();
e78566595089 initial import
mandel
parents:
diff changeset
1000 static QString translate(QString arg);
e78566595089 initial import
mandel
parents:
diff changeset
1001 };
e78566595089 initial import
mandel
parents:
diff changeset
1002
e78566595089 initial import
mandel
parents:
diff changeset
1003 inline AbstractMetaFunctionList AbstractMetaClass::allVirtualFunctions() const
e78566595089 initial import
mandel
parents:
diff changeset
1004 {
e78566595089 initial import
mandel
parents:
diff changeset
1005 return queryFunctions(VirtualFunctions
e78566595089 initial import
mandel
parents:
diff changeset
1006 | NotRemovedFromTargetLang);
e78566595089 initial import
mandel
parents:
diff changeset
1007 }
e78566595089 initial import
mandel
parents:
diff changeset
1008
e78566595089 initial import
mandel
parents:
diff changeset
1009 inline AbstractMetaFunctionList AbstractMetaClass::allFinalFunctions() const
e78566595089 initial import
mandel
parents:
diff changeset
1010 {
e78566595089 initial import
mandel
parents:
diff changeset
1011 return queryFunctions(FinalInTargetLangFunctions
e78566595089 initial import
mandel
parents:
diff changeset
1012 | FinalInCppFunctions
e78566595089 initial import
mandel
parents:
diff changeset
1013 | NotRemovedFromTargetLang);
e78566595089 initial import
mandel
parents:
diff changeset
1014 }
e78566595089 initial import
mandel
parents:
diff changeset
1015
e78566595089 initial import
mandel
parents:
diff changeset
1016 inline AbstractMetaFunctionList AbstractMetaClass::cppInconsistentFunctions() const
e78566595089 initial import
mandel
parents:
diff changeset
1017 {
e78566595089 initial import
mandel
parents:
diff changeset
1018 return queryFunctions(Inconsistent
e78566595089 initial import
mandel
parents:
diff changeset
1019 | NormalFunctions
e78566595089 initial import
mandel
parents:
diff changeset
1020 | Visible
e78566595089 initial import
mandel
parents:
diff changeset
1021 | NotRemovedFromTargetLang);
e78566595089 initial import
mandel
parents:
diff changeset
1022 }
e78566595089 initial import
mandel
parents:
diff changeset
1023
e78566595089 initial import
mandel
parents:
diff changeset
1024 inline AbstractMetaFunctionList AbstractMetaClass::cppSignalFunctions() const
e78566595089 initial import
mandel
parents:
diff changeset
1025 {
e78566595089 initial import
mandel
parents:
diff changeset
1026 return queryFunctions(Signals
e78566595089 initial import
mandel
parents:
diff changeset
1027 | Visible
e78566595089 initial import
mandel
parents:
diff changeset
1028 | NotRemovedFromTargetLang);
e78566595089 initial import
mandel
parents:
diff changeset
1029 }
e78566595089 initial import
mandel
parents:
diff changeset
1030
298
adae77fdc1ea Native QList implementation is now used throughout QtD
eldar
parents: 293
diff changeset
1031 inline bool isNativeContainer(AbstractMetaType *argumentType)
adae77fdc1ea Native QList implementation is now used throughout QtD
eldar
parents: 293
diff changeset
1032 {
adae77fdc1ea Native QList implementation is now used throughout QtD
eldar
parents: 293
diff changeset
1033 if (argumentType && argumentType->isContainer())
adae77fdc1ea Native QList implementation is now used throughout QtD
eldar
parents: 293
diff changeset
1034 if (((const ContainerTypeEntry *)argumentType->typeEntry())->isQList())
adae77fdc1ea Native QList implementation is now used throughout QtD
eldar
parents: 293
diff changeset
1035 return true;
adae77fdc1ea Native QList implementation is now used throughout QtD
eldar
parents: 293
diff changeset
1036 return false;
adae77fdc1ea Native QList implementation is now used throughout QtD
eldar
parents: 293
diff changeset
1037 }
adae77fdc1ea Native QList implementation is now used throughout QtD
eldar
parents: 293
diff changeset
1038
1
e78566595089 initial import
mandel
parents:
diff changeset
1039 #endif // ABSTRACTMETALANG_H