annotate generator/cppheadergenerator.cpp @ 282:256ab6cb8e85

Signals look-up andNew syntax for connect. The old one will not work from now on. This will allow for the signals overload. Although changes are done for both D1 and D2 versions, D1 won't work because of compiler bugs. I am tired of waiting for fixes.
author eldar
date Fri, 16 Oct 2009 02:43:59 +0000
parents 34a37904ff77
children 17b5e13364b7 f9559a957be9
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
maxter
parents: 252
diff changeset
200 << "private:" << endl;
1
e78566595089 initial import
mandel
parents:
diff changeset
201 }
e78566595089 initial import
mandel
parents:
diff changeset
202
e78566595089 initial import
mandel
parents:
diff changeset
203
e78566595089 initial import
mandel
parents:
diff changeset
204 s << "public:" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
205 // constructor
e78566595089 initial import
mandel
parents:
diff changeset
206 foreach (const AbstractMetaFunction *function, java_class->functions()) {
e78566595089 initial import
mandel
parents:
diff changeset
207 if (function->isConstructor() && !function->isPrivate())
e78566595089 initial import
mandel
parents:
diff changeset
208 writeFunction(s, function);
e78566595089 initial import
mandel
parents:
diff changeset
209 }
e78566595089 initial import
mandel
parents:
diff changeset
210
e78566595089 initial import
mandel
parents:
diff changeset
211 s << " ~" << shellClassName(java_class) << "();" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
212 s << endl;
e78566595089 initial import
mandel
parents:
diff changeset
213
e78566595089 initial import
mandel
parents:
diff changeset
214 // All functions in original class that should be reimplemented in shell class
e78566595089 initial import
mandel
parents:
diff changeset
215 AbstractMetaFunctionList shell_functions = java_class->functionsInShellClass();
e78566595089 initial import
mandel
parents:
diff changeset
216 foreach (const AbstractMetaFunction *function, shell_functions) {
e78566595089 initial import
mandel
parents:
diff changeset
217 if(notWrappedYet(function))
e78566595089 initial import
mandel
parents:
diff changeset
218 continue;
e78566595089 initial import
mandel
parents:
diff changeset
219 writeFunction(s, function);
e78566595089 initial import
mandel
parents:
diff changeset
220 }
e78566595089 initial import
mandel
parents:
diff changeset
221
e78566595089 initial import
mandel
parents:
diff changeset
222 // Public call throughs for protected functions
e78566595089 initial import
mandel
parents:
diff changeset
223 AbstractMetaFunctionList public_overrides = java_class->publicOverrideFunctions();
e78566595089 initial import
mandel
parents:
diff changeset
224 foreach (const AbstractMetaFunction *function, public_overrides) {
e78566595089 initial import
mandel
parents:
diff changeset
225 if(notWrappedYet(function))
e78566595089 initial import
mandel
parents:
diff changeset
226 continue;
e78566595089 initial import
mandel
parents:
diff changeset
227 writePublicFunctionOverride(s, function);
e78566595089 initial import
mandel
parents:
diff changeset
228 }
e78566595089 initial import
mandel
parents:
diff changeset
229
e78566595089 initial import
mandel
parents:
diff changeset
230 // Override all virtual functions to get the decision on static/virtual call
e78566595089 initial import
mandel
parents:
diff changeset
231 AbstractMetaFunctionList virtual_functions = java_class->virtualOverrideFunctions();
e78566595089 initial import
mandel
parents:
diff changeset
232 foreach (const AbstractMetaFunction *function, virtual_functions) {
e78566595089 initial import
mandel
parents:
diff changeset
233 if(notWrappedYet(function))
e78566595089 initial import
mandel
parents:
diff changeset
234 continue;
e78566595089 initial import
mandel
parents:
diff changeset
235
e78566595089 initial import
mandel
parents:
diff changeset
236 writeVirtualFunctionOverride(s, function);
e78566595089 initial import
mandel
parents:
diff changeset
237 }
e78566595089 initial import
mandel
parents:
diff changeset
238
e78566595089 initial import
mandel
parents:
diff changeset
239 // Field accessors
e78566595089 initial import
mandel
parents:
diff changeset
240 foreach (const AbstractMetaField *field, java_class->fields()) {
e78566595089 initial import
mandel
parents:
diff changeset
241 if (field->isProtected())
e78566595089 initial import
mandel
parents:
diff changeset
242 writeFieldAccessors(s, field);
e78566595089 initial import
mandel
parents:
diff changeset
243 }
e78566595089 initial import
mandel
parents:
diff changeset
244 /* qtd
e78566595089 initial import
mandel
parents:
diff changeset
245 writeVariablesSection(s, java_class);
e78566595089 initial import
mandel
parents:
diff changeset
246 */
e78566595089 initial import
mandel
parents:
diff changeset
247 writeInjectedCode(s, java_class);
e78566595089 initial import
mandel
parents:
diff changeset
248
e78566595089 initial import
mandel
parents:
diff changeset
249 s << "};" << endl << endl
e78566595089 initial import
mandel
parents:
diff changeset
250 << "#endif // " << include_block << endl;
e78566595089 initial import
mandel
parents:
diff changeset
251
238
1349940724eb Generate a classes list for cmake.
SokoL_SD
parents: 105
diff changeset
252 priGenerator->addHeader(java_class->package(), fileNameForClass(java_class));
1349940724eb Generate a classes list for cmake.
SokoL_SD
parents: 105
diff changeset
253 priGenerator->addClass(java_class->package(), java_class->name());
1
e78566595089 initial import
mandel
parents:
diff changeset
254 }
e78566595089 initial import
mandel
parents:
diff changeset
255
e78566595089 initial import
mandel
parents:
diff changeset
256
e78566595089 initial import
mandel
parents:
diff changeset
257 /*!
e78566595089 initial import
mandel
parents:
diff changeset
258 Writes out declarations of virtual C++ functions so that they
e78566595089 initial import
mandel
parents:
diff changeset
259 can be reimplemented from the java side.
e78566595089 initial import
mandel
parents:
diff changeset
260 */
e78566595089 initial import
mandel
parents:
diff changeset
261 void CppHeaderGenerator::writeFunction(QTextStream &s, const AbstractMetaFunction *java_function)
e78566595089 initial import
mandel
parents:
diff changeset
262 {
e78566595089 initial import
mandel
parents:
diff changeset
263 if (java_function->isModifiedRemoved(TypeSystem::ShellCode))
e78566595089 initial import
mandel
parents:
diff changeset
264 return;
e78566595089 initial import
mandel
parents:
diff changeset
265
e78566595089 initial import
mandel
parents:
diff changeset
266 s << " ";
e78566595089 initial import
mandel
parents:
diff changeset
267 writeFunctionSignature(s, java_function, 0, QString(), Option(OriginalName | ShowStatic));
e78566595089 initial import
mandel
parents:
diff changeset
268 s << ";" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
269 }
e78566595089 initial import
mandel
parents:
diff changeset
270
e78566595089 initial import
mandel
parents:
diff changeset
271 void CppHeaderGenerator::writePublicFunctionOverride(QTextStream &s,
e78566595089 initial import
mandel
parents:
diff changeset
272 const AbstractMetaFunction *java_function)
e78566595089 initial import
mandel
parents:
diff changeset
273 {
e78566595089 initial import
mandel
parents:
diff changeset
274 s << " ";
e78566595089 initial import
mandel
parents:
diff changeset
275 writeFunctionSignature(s, java_function, 0, "__public_", Option(EnumAsInts | ShowStatic | UnderscoreSpaces));
e78566595089 initial import
mandel
parents:
diff changeset
276 s << ";" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
277 }
e78566595089 initial import
mandel
parents:
diff changeset
278
e78566595089 initial import
mandel
parents:
diff changeset
279
e78566595089 initial import
mandel
parents:
diff changeset
280 void CppHeaderGenerator::writeVirtualFunctionOverride(QTextStream &s,
e78566595089 initial import
mandel
parents:
diff changeset
281 const AbstractMetaFunction *java_function)
e78566595089 initial import
mandel
parents:
diff changeset
282 {
e78566595089 initial import
mandel
parents:
diff changeset
283 if (java_function->isModifiedRemoved(TypeSystem::NativeCode))
e78566595089 initial import
mandel
parents:
diff changeset
284 return;
e78566595089 initial import
mandel
parents:
diff changeset
285
e78566595089 initial import
mandel
parents:
diff changeset
286 s << " ";
21
e747af2e6b46 temporary(?) fix for dropsite example
eldar
parents: 1
diff changeset
287 writeFunctionSignature(s, java_function, 0, "__override_", Option(EnumAsInts | ShowStatic | UnderscoreSpaces), QString(), QStringList() << "bool static_call");
1
e78566595089 initial import
mandel
parents:
diff changeset
288 s << ";" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
289 }
e78566595089 initial import
mandel
parents:
diff changeset
290
e78566595089 initial import
mandel
parents:
diff changeset
291
e78566595089 initial import
mandel
parents:
diff changeset
292 void CppHeaderGenerator::writeForwardDeclareSection(QTextStream &s, const AbstractMetaClass *)
e78566595089 initial import
mandel
parents:
diff changeset
293 {
e78566595089 initial import
mandel
parents:
diff changeset
294 s << endl
e78566595089 initial import
mandel
parents:
diff changeset
295 << "class QtJambiFunctionTable;" << endl
e78566595089 initial import
mandel
parents:
diff changeset
296 << "class QtJambiLink;" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
297 }
e78566595089 initial import
mandel
parents:
diff changeset
298
e78566595089 initial import
mandel
parents:
diff changeset
299
e78566595089 initial import
mandel
parents:
diff changeset
300 void CppHeaderGenerator::writeVariablesSection(QTextStream &s, const AbstractMetaClass *)
e78566595089 initial import
mandel
parents:
diff changeset
301 {
e78566595089 initial import
mandel
parents:
diff changeset
302 s << endl
e78566595089 initial import
mandel
parents:
diff changeset
303 << " QtJambiFunctionTable *m_vtable;" << endl
e78566595089 initial import
mandel
parents:
diff changeset
304 << " QtJambiLink *m_link;" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
305 }
e78566595089 initial import
mandel
parents:
diff changeset
306
e78566595089 initial import
mandel
parents:
diff changeset
307 void CppHeaderGenerator::writeInjectedCode(QTextStream &s, const AbstractMetaClass *java_class)
e78566595089 initial import
mandel
parents:
diff changeset
308 {
e78566595089 initial import
mandel
parents:
diff changeset
309 CodeSnipList code_snips = java_class->typeEntry()->codeSnips();
e78566595089 initial import
mandel
parents:
diff changeset
310 foreach (const CodeSnip &cs, code_snips) {
e78566595089 initial import
mandel
parents:
diff changeset
311 if (cs.language == TypeSystem::ShellDeclaration) {
e78566595089 initial import
mandel
parents:
diff changeset
312 s << cs.code() << endl;
e78566595089 initial import
mandel
parents:
diff changeset
313 }
e78566595089 initial import
mandel
parents:
diff changeset
314 }
e78566595089 initial import
mandel
parents:
diff changeset
315 }