annotate generator/cppheadergenerator.cpp @ 303:98b211f3ee34 signals

fix for #19
author eldar_ins@eldar-laptop
date Sat, 12 Dec 2009 16:01:55 +0500
parents f9559a957be9
children 08c1ca7975ab
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 #include "cppheadergenerator.h"
e78566595089 initial import
mandel
parents:
diff changeset
43
e78566595089 initial import
mandel
parents:
diff changeset
44 #include <QtCore/QDir>
e78566595089 initial import
mandel
parents:
diff changeset
45
e78566595089 initial import
mandel
parents:
diff changeset
46 #include <qdebug.h>
e78566595089 initial import
mandel
parents:
diff changeset
47
e78566595089 initial import
mandel
parents:
diff changeset
48 QString CppHeaderGenerator::fileNameForClass(const AbstractMetaClass *java_class) const
e78566595089 initial import
mandel
parents:
diff changeset
49 {
e78566595089 initial import
mandel
parents:
diff changeset
50 return QString("%1_shell.h").arg(java_class->name());
e78566595089 initial import
mandel
parents:
diff changeset
51 }
e78566595089 initial import
mandel
parents:
diff changeset
52
e78566595089 initial import
mandel
parents:
diff changeset
53 void CppHeaderGenerator::writeFieldAccessors(QTextStream &s, const AbstractMetaField *java_field)
e78566595089 initial import
mandel
parents:
diff changeset
54 {
e78566595089 initial import
mandel
parents:
diff changeset
55 Q_ASSERT(java_field->isProtected());
e78566595089 initial import
mandel
parents:
diff changeset
56
e78566595089 initial import
mandel
parents:
diff changeset
57 const AbstractMetaFunction *setter = java_field->setter();
e78566595089 initial import
mandel
parents:
diff changeset
58 const AbstractMetaFunction *getter = java_field->getter();
e78566595089 initial import
mandel
parents:
diff changeset
59
e78566595089 initial import
mandel
parents:
diff changeset
60 // qtd2
e78566595089 initial import
mandel
parents:
diff changeset
61 if(notWrappedYet(getter))
e78566595089 initial import
mandel
parents:
diff changeset
62 return;
e78566595089 initial import
mandel
parents:
diff changeset
63
e78566595089 initial import
mandel
parents:
diff changeset
64 if (getter->isModifiedRemoved(TypeSystem::ShellCode))
e78566595089 initial import
mandel
parents:
diff changeset
65 return;
e78566595089 initial import
mandel
parents:
diff changeset
66
e78566595089 initial import
mandel
parents:
diff changeset
67 s << " ";
e78566595089 initial import
mandel
parents:
diff changeset
68 writeFunctionSignature(s, getter, 0, QString(), Option(ShowStatic));
e78566595089 initial import
mandel
parents:
diff changeset
69 s << ";" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
70
e78566595089 initial import
mandel
parents:
diff changeset
71 // qtd2
e78566595089 initial import
mandel
parents:
diff changeset
72 if(notWrappedYet(setter))
e78566595089 initial import
mandel
parents:
diff changeset
73 return;
e78566595089 initial import
mandel
parents:
diff changeset
74
e78566595089 initial import
mandel
parents:
diff changeset
75 if (!java_field->type()->isConstant()) {
e78566595089 initial import
mandel
parents:
diff changeset
76 if (setter->isModifiedRemoved(TypeSystem::ShellCode))
e78566595089 initial import
mandel
parents:
diff changeset
77 return;
e78566595089 initial import
mandel
parents:
diff changeset
78
e78566595089 initial import
mandel
parents:
diff changeset
79 s << " ";
e78566595089 initial import
mandel
parents:
diff changeset
80 writeFunctionSignature(s, setter, 0, QString(), Option(ShowStatic));
e78566595089 initial import
mandel
parents:
diff changeset
81 s << ";" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
82 }
e78566595089 initial import
mandel
parents:
diff changeset
83 }
e78566595089 initial import
mandel
parents:
diff changeset
84
e78566595089 initial import
mandel
parents:
diff changeset
85 void CppHeaderGenerator::writeSignalWrapper(QTextStream &s, const AbstractMetaFunction *signal)
e78566595089 initial import
mandel
parents:
diff changeset
86 {
e78566595089 initial import
mandel
parents:
diff changeset
87 s << " ";
e78566595089 initial import
mandel
parents:
diff changeset
88 writeFunctionSignature(s, signal, 0, signalWrapperPrefix(),
e78566595089 initial import
mandel
parents:
diff changeset
89 Option(NormalizeAndFixTypeSignature | OriginalName | OriginalTypeDescription | IncludeDefaultExpression));
e78566595089 initial import
mandel
parents:
diff changeset
90 s << ";" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
91 }
e78566595089 initial import
mandel
parents:
diff changeset
92
e78566595089 initial import
mandel
parents:
diff changeset
93 void CppHeaderGenerator::writeSignalWrappers(QTextStream &s, const AbstractMetaClass *java_class)
e78566595089 initial import
mandel
parents:
diff changeset
94 {
e78566595089 initial import
mandel
parents:
diff changeset
95 AbstractMetaFunctionList signal_funcs = signalFunctions(java_class);
e78566595089 initial import
mandel
parents:
diff changeset
96 if (signal_funcs.size() > 0) {
e78566595089 initial import
mandel
parents:
diff changeset
97 s << endl << "public slots:" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
98 foreach (const AbstractMetaFunction *signal, signal_funcs) {
e78566595089 initial import
mandel
parents:
diff changeset
99 writeSignalWrapper(s, signal);
e78566595089 initial import
mandel
parents:
diff changeset
100 }
e78566595089 initial import
mandel
parents:
diff changeset
101 }
e78566595089 initial import
mandel
parents:
diff changeset
102 }
e78566595089 initial import
mandel
parents:
diff changeset
103
e78566595089 initial import
mandel
parents:
diff changeset
104 void CppHeaderGenerator::writeWrapperClass(QTextStream &s, const AbstractMetaClass *java_class)
e78566595089 initial import
mandel
parents:
diff changeset
105 {
e78566595089 initial import
mandel
parents:
diff changeset
106 AbstractMetaFunctionList signal_functions =
e78566595089 initial import
mandel
parents:
diff changeset
107 java_class->queryFunctions(AbstractMetaClass::Signals | AbstractMetaClass::Visible | AbstractMetaClass::NotRemovedFromTargetLang);
e78566595089 initial import
mandel
parents:
diff changeset
108 if (signal_functions.size() == 0)
e78566595089 initial import
mandel
parents:
diff changeset
109 return ;
e78566595089 initial import
mandel
parents:
diff changeset
110
e78566595089 initial import
mandel
parents:
diff changeset
111 s << "class QtJambi_SignalWrapper_" << java_class->name() << ": public QObject" << endl
e78566595089 initial import
mandel
parents:
diff changeset
112 << "{" << endl
e78566595089 initial import
mandel
parents:
diff changeset
113 << " Q_OBJECT" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
114 writeSignalWrappers(s, java_class);
e78566595089 initial import
mandel
parents:
diff changeset
115 s << endl << "public:" << endl
e78566595089 initial import
mandel
parents:
diff changeset
116 << " QtJambiSignalInfo m_signals[" << signal_functions.size() << "];" << endl
e78566595089 initial import
mandel
parents:
diff changeset
117 << " QtJambiLink *link;" << endl
e78566595089 initial import
mandel
parents:
diff changeset
118 << "};" << endl << endl;
e78566595089 initial import
mandel
parents:
diff changeset
119 }
e78566595089 initial import
mandel
parents:
diff changeset
120
e78566595089 initial import
mandel
parents:
diff changeset
121 void CppHeaderGenerator::write(QTextStream &s, const AbstractMetaClass *java_class)
e78566595089 initial import
mandel
parents:
diff changeset
122 {
e78566595089 initial import
mandel
parents:
diff changeset
123 QString include_block = java_class->name().toUpper() + "_SHELL_H";
e78566595089 initial import
mandel
parents:
diff changeset
124
e78566595089 initial import
mandel
parents:
diff changeset
125 s << "#ifndef " << include_block << endl
e78566595089 initial import
mandel
parents:
diff changeset
126 << "#define " << include_block << endl << endl
e78566595089 initial import
mandel
parents:
diff changeset
127 // << "#include <qtjambi_core.h>" << endl
e78566595089 initial import
mandel
parents:
diff changeset
128 << "#include <QtCore/QHash>" << endl
e78566595089 initial import
mandel
parents:
diff changeset
129 << "#include <QObjectEntity.h>" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
130
e78566595089 initial import
mandel
parents:
diff changeset
131 Include inc = java_class->typeEntry()->include();
e78566595089 initial import
mandel
parents:
diff changeset
132 s << "#include ";
e78566595089 initial import
mandel
parents:
diff changeset
133 if (inc.type == Include::IncludePath)
e78566595089 initial import
mandel
parents:
diff changeset
134 s << "<";
e78566595089 initial import
mandel
parents:
diff changeset
135 else
e78566595089 initial import
mandel
parents:
diff changeset
136 s << "\"";
e78566595089 initial import
mandel
parents:
diff changeset
137 s << inc.name;
e78566595089 initial import
mandel
parents:
diff changeset
138 if (inc.type == Include::IncludePath)
e78566595089 initial import
mandel
parents:
diff changeset
139 s << ">";
e78566595089 initial import
mandel
parents:
diff changeset
140 else
e78566595089 initial import
mandel
parents:
diff changeset
141 s << "\"";
e78566595089 initial import
mandel
parents:
diff changeset
142 s << endl << endl;
e78566595089 initial import
mandel
parents:
diff changeset
143
e78566595089 initial import
mandel
parents:
diff changeset
144 IncludeList list = java_class->typeEntry()->extraIncludes();
e78566595089 initial import
mandel
parents:
diff changeset
145 qSort(list.begin(), list.end());
e78566595089 initial import
mandel
parents:
diff changeset
146 foreach (const Include &inc, list) {
e78566595089 initial import
mandel
parents:
diff changeset
147 if (inc.type == Include::TargetLangImport)
e78566595089 initial import
mandel
parents:
diff changeset
148 continue;
e78566595089 initial import
mandel
parents:
diff changeset
149
e78566595089 initial import
mandel
parents:
diff changeset
150 s << "#include ";
e78566595089 initial import
mandel
parents:
diff changeset
151 if (inc.type == Include::LocalPath)
e78566595089 initial import
mandel
parents:
diff changeset
152 s << "\"";
e78566595089 initial import
mandel
parents:
diff changeset
153 else
e78566595089 initial import
mandel
parents:
diff changeset
154 s << "<";
e78566595089 initial import
mandel
parents:
diff changeset
155
e78566595089 initial import
mandel
parents:
diff changeset
156 s << inc.name;
e78566595089 initial import
mandel
parents:
diff changeset
157
e78566595089 initial import
mandel
parents:
diff changeset
158 if (inc.type == Include::LocalPath)
e78566595089 initial import
mandel
parents:
diff changeset
159 s << "\"";
e78566595089 initial import
mandel
parents:
diff changeset
160 else
e78566595089 initial import
mandel
parents:
diff changeset
161 s << ">";
e78566595089 initial import
mandel
parents:
diff changeset
162
e78566595089 initial import
mandel
parents:
diff changeset
163 s << endl;
e78566595089 initial import
mandel
parents:
diff changeset
164 }
e78566595089 initial import
mandel
parents:
diff changeset
165
e78566595089 initial import
mandel
parents:
diff changeset
166 /* qtd writeForwardDeclareSection(s, java_class);
e78566595089 initial import
mandel
parents:
diff changeset
167
e78566595089 initial import
mandel
parents:
diff changeset
168 writeWrapperClass(s, java_class);
e78566595089 initial import
mandel
parents:
diff changeset
169 */
e78566595089 initial import
mandel
parents:
diff changeset
170 s << endl;
238
1349940724eb Generate a classes list for cmake.
SokoL_SD
parents: 105
diff changeset
171
1
e78566595089 initial import
mandel
parents:
diff changeset
172
e78566595089 initial import
mandel
parents:
diff changeset
173 if (!java_class->generateShellClass()) {
e78566595089 initial import
mandel
parents:
diff changeset
174 s << "#endif" << endl << endl;
238
1349940724eb Generate a classes list for cmake.
SokoL_SD
parents: 105
diff changeset
175 priGenerator->addHeader(java_class->package(), fileNameForClass(java_class));
1
e78566595089 initial import
mandel
parents:
diff changeset
176 return ;
e78566595089 initial import
mandel
parents:
diff changeset
177 }
e78566595089 initial import
mandel
parents:
diff changeset
178
e78566595089 initial import
mandel
parents:
diff changeset
179 s << "class " << shellClassName(java_class)
e78566595089 initial import
mandel
parents:
diff changeset
180 << " : public " << java_class->qualifiedCppName();
254
maxter
parents: 252
diff changeset
181 if (java_class->isQObject())
maxter
parents: 252
diff changeset
182 s << ", public QtD_QObjectEntity";
maxter
parents: 252
diff changeset
183 else if(java_class->hasVirtualFunctions())
maxter
parents: 252
diff changeset
184 s << ", public QtD_Entity";
1
e78566595089 initial import
mandel
parents:
diff changeset
185 s << endl << "{" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
186
e78566595089 initial import
mandel
parents:
diff changeset
187 if (java_class->isQObject()) {
e78566595089 initial import
mandel
parents:
diff changeset
188 s << "public:" << endl
254
maxter
parents: 252
diff changeset
189 << " Q_OBJECT_CHECK" << endl
1
e78566595089 initial import
mandel
parents:
diff changeset
190 // << " mutable const QMetaObject *m_meta_object;" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
191
e78566595089 initial import
mandel
parents:
diff changeset
192 /* if (java_class->hasVirtualSlots()) {
e78566595089 initial import
mandel
parents:
diff changeset
193 s << " mutable QHash<int,int> m_map;" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
194 }
e78566595089 initial import
mandel
parents:
diff changeset
195 */
105
3aa118a9ae71 each QObject now has associated child QObject for handling signals. fixes #15
eldar
parents: 21
diff changeset
196 // s << " const QMetaObject *metaObject() const;" << endl
1
e78566595089 initial import
mandel
parents:
diff changeset
197 // << " void *qt_metacast(const char *);" << endl
254
maxter
parents: 252
diff changeset
198 // << " QT_TR_FUNCTIONS" << end
maxter
parents: 252
diff changeset
199 << " virtual int qt_metacall(QMetaObject::Call, int, void **);" << endl
288
f9559a957be9 new signals and slots implementation
eldar
parents: 254
diff changeset
200 << " int __override_qt_metacall(QMetaObject::Call _c, int _id, void **_a);" << endl
303
98b211f3ee34 fix for #19
eldar_ins@eldar-laptop
parents: 288
diff changeset
201 << " virtual const QMetaObject *metaObject() const;" << endl
288
f9559a957be9 new signals and slots implementation
eldar
parents: 254
diff changeset
202
254
maxter
parents: 252
diff changeset
203 << "private:" << endl;
1
e78566595089 initial import
mandel
parents:
diff changeset
204 }
e78566595089 initial import
mandel
parents:
diff changeset
205
e78566595089 initial import
mandel
parents:
diff changeset
206
e78566595089 initial import
mandel
parents:
diff changeset
207 s << "public:" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
208 // constructor
e78566595089 initial import
mandel
parents:
diff changeset
209 foreach (const AbstractMetaFunction *function, java_class->functions()) {
e78566595089 initial import
mandel
parents:
diff changeset
210 if (function->isConstructor() && !function->isPrivate())
e78566595089 initial import
mandel
parents:
diff changeset
211 writeFunction(s, function);
e78566595089 initial import
mandel
parents:
diff changeset
212 }
e78566595089 initial import
mandel
parents:
diff changeset
213
e78566595089 initial import
mandel
parents:
diff changeset
214 s << " ~" << shellClassName(java_class) << "();" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
215 s << endl;
e78566595089 initial import
mandel
parents:
diff changeset
216
e78566595089 initial import
mandel
parents:
diff changeset
217 // All functions in original class that should be reimplemented in shell class
e78566595089 initial import
mandel
parents:
diff changeset
218 AbstractMetaFunctionList shell_functions = java_class->functionsInShellClass();
e78566595089 initial import
mandel
parents:
diff changeset
219 foreach (const AbstractMetaFunction *function, shell_functions) {
e78566595089 initial import
mandel
parents:
diff changeset
220 if(notWrappedYet(function))
e78566595089 initial import
mandel
parents:
diff changeset
221 continue;
e78566595089 initial import
mandel
parents:
diff changeset
222 writeFunction(s, function);
e78566595089 initial import
mandel
parents:
diff changeset
223 }
e78566595089 initial import
mandel
parents:
diff changeset
224
e78566595089 initial import
mandel
parents:
diff changeset
225 // Public call throughs for protected functions
e78566595089 initial import
mandel
parents:
diff changeset
226 AbstractMetaFunctionList public_overrides = java_class->publicOverrideFunctions();
e78566595089 initial import
mandel
parents:
diff changeset
227 foreach (const AbstractMetaFunction *function, public_overrides) {
e78566595089 initial import
mandel
parents:
diff changeset
228 if(notWrappedYet(function))
e78566595089 initial import
mandel
parents:
diff changeset
229 continue;
e78566595089 initial import
mandel
parents:
diff changeset
230 writePublicFunctionOverride(s, function);
e78566595089 initial import
mandel
parents:
diff changeset
231 }
e78566595089 initial import
mandel
parents:
diff changeset
232
e78566595089 initial import
mandel
parents:
diff changeset
233 // Override all virtual functions to get the decision on static/virtual call
e78566595089 initial import
mandel
parents:
diff changeset
234 AbstractMetaFunctionList virtual_functions = java_class->virtualOverrideFunctions();
e78566595089 initial import
mandel
parents:
diff changeset
235 foreach (const AbstractMetaFunction *function, virtual_functions) {
e78566595089 initial import
mandel
parents:
diff changeset
236 if(notWrappedYet(function))
e78566595089 initial import
mandel
parents:
diff changeset
237 continue;
e78566595089 initial import
mandel
parents:
diff changeset
238
e78566595089 initial import
mandel
parents:
diff changeset
239 writeVirtualFunctionOverride(s, function);
e78566595089 initial import
mandel
parents:
diff changeset
240 }
e78566595089 initial import
mandel
parents:
diff changeset
241
e78566595089 initial import
mandel
parents:
diff changeset
242 // Field accessors
e78566595089 initial import
mandel
parents:
diff changeset
243 foreach (const AbstractMetaField *field, java_class->fields()) {
e78566595089 initial import
mandel
parents:
diff changeset
244 if (field->isProtected())
e78566595089 initial import
mandel
parents:
diff changeset
245 writeFieldAccessors(s, field);
e78566595089 initial import
mandel
parents:
diff changeset
246 }
e78566595089 initial import
mandel
parents:
diff changeset
247 /* qtd
e78566595089 initial import
mandel
parents:
diff changeset
248 writeVariablesSection(s, java_class);
e78566595089 initial import
mandel
parents:
diff changeset
249 */
e78566595089 initial import
mandel
parents:
diff changeset
250 writeInjectedCode(s, java_class);
e78566595089 initial import
mandel
parents:
diff changeset
251
e78566595089 initial import
mandel
parents:
diff changeset
252 s << "};" << endl << endl
e78566595089 initial import
mandel
parents:
diff changeset
253 << "#endif // " << include_block << endl;
e78566595089 initial import
mandel
parents:
diff changeset
254
238
1349940724eb Generate a classes list for cmake.
SokoL_SD
parents: 105
diff changeset
255 priGenerator->addHeader(java_class->package(), fileNameForClass(java_class));
1349940724eb Generate a classes list for cmake.
SokoL_SD
parents: 105
diff changeset
256 priGenerator->addClass(java_class->package(), java_class->name());
1
e78566595089 initial import
mandel
parents:
diff changeset
257 }
e78566595089 initial import
mandel
parents:
diff changeset
258
e78566595089 initial import
mandel
parents:
diff changeset
259
e78566595089 initial import
mandel
parents:
diff changeset
260 /*!
e78566595089 initial import
mandel
parents:
diff changeset
261 Writes out declarations of virtual C++ functions so that they
e78566595089 initial import
mandel
parents:
diff changeset
262 can be reimplemented from the java side.
e78566595089 initial import
mandel
parents:
diff changeset
263 */
e78566595089 initial import
mandel
parents:
diff changeset
264 void CppHeaderGenerator::writeFunction(QTextStream &s, const AbstractMetaFunction *java_function)
e78566595089 initial import
mandel
parents:
diff changeset
265 {
e78566595089 initial import
mandel
parents:
diff changeset
266 if (java_function->isModifiedRemoved(TypeSystem::ShellCode))
e78566595089 initial import
mandel
parents:
diff changeset
267 return;
e78566595089 initial import
mandel
parents:
diff changeset
268
e78566595089 initial import
mandel
parents:
diff changeset
269 s << " ";
e78566595089 initial import
mandel
parents:
diff changeset
270 writeFunctionSignature(s, java_function, 0, QString(), Option(OriginalName | ShowStatic));
e78566595089 initial import
mandel
parents:
diff changeset
271 s << ";" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
272 }
e78566595089 initial import
mandel
parents:
diff changeset
273
e78566595089 initial import
mandel
parents:
diff changeset
274 void CppHeaderGenerator::writePublicFunctionOverride(QTextStream &s,
e78566595089 initial import
mandel
parents:
diff changeset
275 const AbstractMetaFunction *java_function)
e78566595089 initial import
mandel
parents:
diff changeset
276 {
e78566595089 initial import
mandel
parents:
diff changeset
277 s << " ";
e78566595089 initial import
mandel
parents:
diff changeset
278 writeFunctionSignature(s, java_function, 0, "__public_", Option(EnumAsInts | ShowStatic | UnderscoreSpaces));
e78566595089 initial import
mandel
parents:
diff changeset
279 s << ";" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
280 }
e78566595089 initial import
mandel
parents:
diff changeset
281
e78566595089 initial import
mandel
parents:
diff changeset
282
e78566595089 initial import
mandel
parents:
diff changeset
283 void CppHeaderGenerator::writeVirtualFunctionOverride(QTextStream &s,
e78566595089 initial import
mandel
parents:
diff changeset
284 const AbstractMetaFunction *java_function)
e78566595089 initial import
mandel
parents:
diff changeset
285 {
e78566595089 initial import
mandel
parents:
diff changeset
286 if (java_function->isModifiedRemoved(TypeSystem::NativeCode))
e78566595089 initial import
mandel
parents:
diff changeset
287 return;
e78566595089 initial import
mandel
parents:
diff changeset
288
e78566595089 initial import
mandel
parents:
diff changeset
289 s << " ";
21
e747af2e6b46 temporary(?) fix for dropsite example
eldar
parents: 1
diff changeset
290 writeFunctionSignature(s, java_function, 0, "__override_", Option(EnumAsInts | ShowStatic | UnderscoreSpaces), QString(), QStringList() << "bool static_call");
1
e78566595089 initial import
mandel
parents:
diff changeset
291 s << ";" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
292 }
e78566595089 initial import
mandel
parents:
diff changeset
293
e78566595089 initial import
mandel
parents:
diff changeset
294
e78566595089 initial import
mandel
parents:
diff changeset
295 void CppHeaderGenerator::writeForwardDeclareSection(QTextStream &s, const AbstractMetaClass *)
e78566595089 initial import
mandel
parents:
diff changeset
296 {
e78566595089 initial import
mandel
parents:
diff changeset
297 s << endl
e78566595089 initial import
mandel
parents:
diff changeset
298 << "class QtJambiFunctionTable;" << endl
e78566595089 initial import
mandel
parents:
diff changeset
299 << "class QtJambiLink;" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
300 }
e78566595089 initial import
mandel
parents:
diff changeset
301
e78566595089 initial import
mandel
parents:
diff changeset
302
e78566595089 initial import
mandel
parents:
diff changeset
303 void CppHeaderGenerator::writeVariablesSection(QTextStream &s, const AbstractMetaClass *)
e78566595089 initial import
mandel
parents:
diff changeset
304 {
e78566595089 initial import
mandel
parents:
diff changeset
305 s << endl
e78566595089 initial import
mandel
parents:
diff changeset
306 << " QtJambiFunctionTable *m_vtable;" << endl
e78566595089 initial import
mandel
parents:
diff changeset
307 << " QtJambiLink *m_link;" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
308 }
e78566595089 initial import
mandel
parents:
diff changeset
309
e78566595089 initial import
mandel
parents:
diff changeset
310 void CppHeaderGenerator::writeInjectedCode(QTextStream &s, const AbstractMetaClass *java_class)
e78566595089 initial import
mandel
parents:
diff changeset
311 {
e78566595089 initial import
mandel
parents:
diff changeset
312 CodeSnipList code_snips = java_class->typeEntry()->codeSnips();
e78566595089 initial import
mandel
parents:
diff changeset
313 foreach (const CodeSnip &cs, code_snips) {
e78566595089 initial import
mandel
parents:
diff changeset
314 if (cs.language == TypeSystem::ShellDeclaration) {
e78566595089 initial import
mandel
parents:
diff changeset
315 s << cs.code() << endl;
e78566595089 initial import
mandel
parents:
diff changeset
316 }
e78566595089 initial import
mandel
parents:
diff changeset
317 }
e78566595089 initial import
mandel
parents:
diff changeset
318 }