annotate generator/qdocgenerator.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 e78566595089
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 #include "qdocgenerator.h"
e78566595089 initial import
mandel
parents:
diff changeset
43
e78566595089 initial import
mandel
parents:
diff changeset
44 #include "reporthandler.h"
e78566595089 initial import
mandel
parents:
diff changeset
45 #include "typesystem.h"
e78566595089 initial import
mandel
parents:
diff changeset
46
e78566595089 initial import
mandel
parents:
diff changeset
47 #include <QtCore/QDir>
e78566595089 initial import
mandel
parents:
diff changeset
48
e78566595089 initial import
mandel
parents:
diff changeset
49 QDocGenerator::QDocGenerator() { }
e78566595089 initial import
mandel
parents:
diff changeset
50
e78566595089 initial import
mandel
parents:
diff changeset
51 QString QDocGenerator::subDirectoryForClass(const AbstractMetaClass *) const
e78566595089 initial import
mandel
parents:
diff changeset
52 {
e78566595089 initial import
mandel
parents:
diff changeset
53 return "doc/japi";
e78566595089 initial import
mandel
parents:
diff changeset
54 }
e78566595089 initial import
mandel
parents:
diff changeset
55
e78566595089 initial import
mandel
parents:
diff changeset
56 QString QDocGenerator::fileNameForClass(const AbstractMetaClass *) const
e78566595089 initial import
mandel
parents:
diff changeset
57 {
e78566595089 initial import
mandel
parents:
diff changeset
58 return "qdoc.japi";
e78566595089 initial import
mandel
parents:
diff changeset
59 }
e78566595089 initial import
mandel
parents:
diff changeset
60
e78566595089 initial import
mandel
parents:
diff changeset
61 void QDocGenerator::generate()
e78566595089 initial import
mandel
parents:
diff changeset
62 {
e78566595089 initial import
mandel
parents:
diff changeset
63 QDir dir(outputDirectory() + "/" + subDirectoryForClass(0));
e78566595089 initial import
mandel
parents:
diff changeset
64 dir.mkpath(dir.absolutePath());
e78566595089 initial import
mandel
parents:
diff changeset
65
e78566595089 initial import
mandel
parents:
diff changeset
66 QFile f(dir.absoluteFilePath(fileNameForClass(0)));
e78566595089 initial import
mandel
parents:
diff changeset
67 if (!f.open(QIODevice::WriteOnly)) {
e78566595089 initial import
mandel
parents:
diff changeset
68 ReportHandler::warning(QString("failed to open file '%1' for writing")
e78566595089 initial import
mandel
parents:
diff changeset
69 .arg(f.fileName()));
e78566595089 initial import
mandel
parents:
diff changeset
70 return;
e78566595089 initial import
mandel
parents:
diff changeset
71 }
e78566595089 initial import
mandel
parents:
diff changeset
72
e78566595089 initial import
mandel
parents:
diff changeset
73 {
e78566595089 initial import
mandel
parents:
diff changeset
74 QTextStream s(&f);
e78566595089 initial import
mandel
parents:
diff changeset
75 s << "<japi>" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
76
e78566595089 initial import
mandel
parents:
diff changeset
77 AbstractMetaClassList clazzes = classes();
e78566595089 initial import
mandel
parents:
diff changeset
78 foreach (AbstractMetaClass *cls, clazzes) {
e78566595089 initial import
mandel
parents:
diff changeset
79 if (shouldGenerate(cls)) {
e78566595089 initial import
mandel
parents:
diff changeset
80 write(s, cls);
e78566595089 initial import
mandel
parents:
diff changeset
81 }
e78566595089 initial import
mandel
parents:
diff changeset
82 }
e78566595089 initial import
mandel
parents:
diff changeset
83
e78566595089 initial import
mandel
parents:
diff changeset
84 s << "</japi>" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
85 }
e78566595089 initial import
mandel
parents:
diff changeset
86 }
e78566595089 initial import
mandel
parents:
diff changeset
87
e78566595089 initial import
mandel
parents:
diff changeset
88 // copy-paste from linguist/shared/metatranslator.cpp
e78566595089 initial import
mandel
parents:
diff changeset
89 static QString numericEntity( int ch )
e78566595089 initial import
mandel
parents:
diff changeset
90 {
e78566595089 initial import
mandel
parents:
diff changeset
91 return QString( ch <= 0x20 ? "<byte value=\"x%1\"/>" : "&#x%1;" )
e78566595089 initial import
mandel
parents:
diff changeset
92 .arg( ch, 0, 16 );
e78566595089 initial import
mandel
parents:
diff changeset
93 }
e78566595089 initial import
mandel
parents:
diff changeset
94
e78566595089 initial import
mandel
parents:
diff changeset
95 static QString protect( const QByteArray& str )
e78566595089 initial import
mandel
parents:
diff changeset
96 {
e78566595089 initial import
mandel
parents:
diff changeset
97 QString result;
e78566595089 initial import
mandel
parents:
diff changeset
98 int len = (int) str.length();
e78566595089 initial import
mandel
parents:
diff changeset
99 for ( int k = 0; k < len; k++ ) {
e78566595089 initial import
mandel
parents:
diff changeset
100 switch( str[k] ) {
e78566595089 initial import
mandel
parents:
diff changeset
101 case '\"':
e78566595089 initial import
mandel
parents:
diff changeset
102 result += QString( "&quot;" );
e78566595089 initial import
mandel
parents:
diff changeset
103 break;
e78566595089 initial import
mandel
parents:
diff changeset
104 case '&':
e78566595089 initial import
mandel
parents:
diff changeset
105 result += QString( "&amp;" );
e78566595089 initial import
mandel
parents:
diff changeset
106 break;
e78566595089 initial import
mandel
parents:
diff changeset
107 case '>':
e78566595089 initial import
mandel
parents:
diff changeset
108 result += QString( "&gt;" );
e78566595089 initial import
mandel
parents:
diff changeset
109 break;
e78566595089 initial import
mandel
parents:
diff changeset
110 case '<':
e78566595089 initial import
mandel
parents:
diff changeset
111 result += QString( "&lt;" );
e78566595089 initial import
mandel
parents:
diff changeset
112 break;
e78566595089 initial import
mandel
parents:
diff changeset
113 case '\'':
e78566595089 initial import
mandel
parents:
diff changeset
114 result += QString( "&apos;" );
e78566595089 initial import
mandel
parents:
diff changeset
115 break;
e78566595089 initial import
mandel
parents:
diff changeset
116 default:
e78566595089 initial import
mandel
parents:
diff changeset
117 if ( (uchar) str[k] < 0x20 && str[k] != '\n' )
e78566595089 initial import
mandel
parents:
diff changeset
118 result += numericEntity( (uchar) str[k] );
e78566595089 initial import
mandel
parents:
diff changeset
119 else
e78566595089 initial import
mandel
parents:
diff changeset
120 result += str[k];
e78566595089 initial import
mandel
parents:
diff changeset
121 }
e78566595089 initial import
mandel
parents:
diff changeset
122 }
e78566595089 initial import
mandel
parents:
diff changeset
123 return result;
e78566595089 initial import
mandel
parents:
diff changeset
124 }
e78566595089 initial import
mandel
parents:
diff changeset
125
e78566595089 initial import
mandel
parents:
diff changeset
126
e78566595089 initial import
mandel
parents:
diff changeset
127 void QDocGenerator::write(QTextStream &s, const AbstractMetaFunction *java_function)
e78566595089 initial import
mandel
parents:
diff changeset
128 {
e78566595089 initial import
mandel
parents:
diff changeset
129 AbstractMetaArgumentList arguments = java_function->arguments();
e78566595089 initial import
mandel
parents:
diff changeset
130 int argument_count = arguments.size();
e78566595089 initial import
mandel
parents:
diff changeset
131
e78566595089 initial import
mandel
parents:
diff changeset
132 int overload_count = 0;
e78566595089 initial import
mandel
parents:
diff changeset
133
e78566595089 initial import
mandel
parents:
diff changeset
134 for (int i=0; i<argument_count; ++i) {
e78566595089 initial import
mandel
parents:
diff changeset
135 if (!arguments.at(i)->defaultValueExpression().isEmpty())
e78566595089 initial import
mandel
parents:
diff changeset
136 ++overload_count;
e78566595089 initial import
mandel
parents:
diff changeset
137 }
e78566595089 initial import
mandel
parents:
diff changeset
138
e78566595089 initial import
mandel
parents:
diff changeset
139 for (int i=0; i<=overload_count; ++i) {
e78566595089 initial import
mandel
parents:
diff changeset
140 writeOverload(s, java_function, argument_count - i);
e78566595089 initial import
mandel
parents:
diff changeset
141 }
e78566595089 initial import
mandel
parents:
diff changeset
142 }
e78566595089 initial import
mandel
parents:
diff changeset
143
e78566595089 initial import
mandel
parents:
diff changeset
144 void QDocGenerator::writeOverload(QTextStream &s,
e78566595089 initial import
mandel
parents:
diff changeset
145 const AbstractMetaFunction *java_function,
e78566595089 initial import
mandel
parents:
diff changeset
146 int arg_count)
e78566595089 initial import
mandel
parents:
diff changeset
147 {
e78566595089 initial import
mandel
parents:
diff changeset
148 if (java_function->isModifiedRemoved(TypeSystem::TargetLangCode))
e78566595089 initial import
mandel
parents:
diff changeset
149 return;
e78566595089 initial import
mandel
parents:
diff changeset
150
e78566595089 initial import
mandel
parents:
diff changeset
151 uint included_attributes = NoBlockedSlot;
e78566595089 initial import
mandel
parents:
diff changeset
152 uint excluded_attributes = 0;
e78566595089 initial import
mandel
parents:
diff changeset
153 setupForFunction(java_function, &included_attributes, &excluded_attributes);
e78566595089 initial import
mandel
parents:
diff changeset
154
e78566595089 initial import
mandel
parents:
diff changeset
155 if (arg_count < java_function->arguments().size()) {
e78566595089 initial import
mandel
parents:
diff changeset
156 // see DGenerator::writeFunctionOverloads()
e78566595089 initial import
mandel
parents:
diff changeset
157 if (!java_function->isConstructor())
e78566595089 initial import
mandel
parents:
diff changeset
158 included_attributes |= AbstractMetaAttributes::Final;
e78566595089 initial import
mandel
parents:
diff changeset
159 excluded_attributes |= AbstractMetaAttributes::Abstract | AbstractMetaAttributes::Native;
e78566595089 initial import
mandel
parents:
diff changeset
160 }
e78566595089 initial import
mandel
parents:
diff changeset
161
e78566595089 initial import
mandel
parents:
diff changeset
162 QString signature = functionSignature(java_function,
e78566595089 initial import
mandel
parents:
diff changeset
163 included_attributes,
e78566595089 initial import
mandel
parents:
diff changeset
164 excluded_attributes,
e78566595089 initial import
mandel
parents:
diff changeset
165 NoOption,
e78566595089 initial import
mandel
parents:
diff changeset
166 arg_count);
e78566595089 initial import
mandel
parents:
diff changeset
167
e78566595089 initial import
mandel
parents:
diff changeset
168 s << "<method java=\"" << protect(signature.toUtf8()) << "\"" << endl
e78566595089 initial import
mandel
parents:
diff changeset
169 << " cpp=\"" << protect(java_function->signature().toUtf8()) << "\"" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
170
e78566595089 initial import
mandel
parents:
diff changeset
171 FunctionModificationList mods = java_function->modifications(java_function->implementingClass());
e78566595089 initial import
mandel
parents:
diff changeset
172 QList<ArgumentModification> argumentMods;
e78566595089 initial import
mandel
parents:
diff changeset
173 foreach (const FunctionModification &m, mods) {
e78566595089 initial import
mandel
parents:
diff changeset
174 if (!m.association.isEmpty())
e78566595089 initial import
mandel
parents:
diff changeset
175 s << " association=\"" << m.association << "\"" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
176 if (m.modifiers & Modification::AccessModifierMask)
e78566595089 initial import
mandel
parents:
diff changeset
177 s << " access-change=\"" << m.accessModifierString() << "\"" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
178 if (m.modifiers & Modification::Rename)
e78566595089 initial import
mandel
parents:
diff changeset
179 s << " renamed=\"" << m.renamedToName << "\"" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
180 if (m.modifiers & (Modification::FinalMask)) {
e78566595089 initial import
mandel
parents:
diff changeset
181 s << " final=\"" << ((m.modifiers & Modification::Final) ? "final" : "non-final")
e78566595089 initial import
mandel
parents:
diff changeset
182 << "\"" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
183 }
e78566595089 initial import
mandel
parents:
diff changeset
184 if (m.modifiers & Modification::Deprecated)
e78566595089 initial import
mandel
parents:
diff changeset
185 s << " deprecated=\"yes\"" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
186 if (m.removal)
e78566595089 initial import
mandel
parents:
diff changeset
187 s << " removal=\"" << m.removal << "\"" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
188
e78566595089 initial import
mandel
parents:
diff changeset
189 argumentMods << m.argument_mods;
e78566595089 initial import
mandel
parents:
diff changeset
190 }
e78566595089 initial import
mandel
parents:
diff changeset
191
e78566595089 initial import
mandel
parents:
diff changeset
192 AbstractMetaArgumentList arguments = java_function->arguments();
e78566595089 initial import
mandel
parents:
diff changeset
193 bool wroteOwnershipStolen = false;
e78566595089 initial import
mandel
parents:
diff changeset
194 foreach (AbstractMetaArgument *argument, arguments) {
e78566595089 initial import
mandel
parents:
diff changeset
195 if (java_function->disabledGarbageCollection(java_function->implementingClass(),
e78566595089 initial import
mandel
parents:
diff changeset
196 argument->argumentIndex() + 1)) {
e78566595089 initial import
mandel
parents:
diff changeset
197 if (!wroteOwnershipStolen) {
e78566595089 initial import
mandel
parents:
diff changeset
198 s << endl << " steals-ownership-of=\"";
e78566595089 initial import
mandel
parents:
diff changeset
199 wroteOwnershipStolen = true;
e78566595089 initial import
mandel
parents:
diff changeset
200 } else {
e78566595089 initial import
mandel
parents:
diff changeset
201 s << ",";
e78566595089 initial import
mandel
parents:
diff changeset
202 }
e78566595089 initial import
mandel
parents:
diff changeset
203 s << protect(argument->argumentName().toUtf8());
e78566595089 initial import
mandel
parents:
diff changeset
204 }
e78566595089 initial import
mandel
parents:
diff changeset
205 }
e78566595089 initial import
mandel
parents:
diff changeset
206 if (wroteOwnershipStolen)
e78566595089 initial import
mandel
parents:
diff changeset
207 s << "\"";
e78566595089 initial import
mandel
parents:
diff changeset
208
e78566595089 initial import
mandel
parents:
diff changeset
209 s << ">" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
210
e78566595089 initial import
mandel
parents:
diff changeset
211 if (argumentMods.size()) {
e78566595089 initial import
mandel
parents:
diff changeset
212
e78566595089 initial import
mandel
parents:
diff changeset
213 foreach (const ArgumentModification &m, argumentMods) {
e78566595089 initial import
mandel
parents:
diff changeset
214 s << " <argument index=\"" << m.index << "\"" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
215 if (m.removed_default_expression)
e78566595089 initial import
mandel
parents:
diff changeset
216 s << " remove-default-expression=\"yes\"" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
217 if (m.removed)
e78566595089 initial import
mandel
parents:
diff changeset
218 s << " removed=\"yes\"" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
219 if (m.no_null_pointers)
e78566595089 initial import
mandel
parents:
diff changeset
220 s << " no-null=\"yes\"" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
221 if (!m.modified_type.isEmpty())
e78566595089 initial import
mandel
parents:
diff changeset
222 s << " modified-type=\"" << protect(m.modified_type.toLatin1()) << "\"" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
223 if (!m.replaced_default_expression.isEmpty()) {
e78566595089 initial import
mandel
parents:
diff changeset
224 s << " default-expression=\"" << m.replaced_default_expression
e78566595089 initial import
mandel
parents:
diff changeset
225 << "\"" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
226 }
e78566595089 initial import
mandel
parents:
diff changeset
227 if (!m.referenceCounts.isEmpty())
e78566595089 initial import
mandel
parents:
diff changeset
228 s << " reference-counted=\"...\"" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
229 s << "/>" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
230 }
e78566595089 initial import
mandel
parents:
diff changeset
231 }
e78566595089 initial import
mandel
parents:
diff changeset
232
e78566595089 initial import
mandel
parents:
diff changeset
233 s << "</method>" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
234 }
e78566595089 initial import
mandel
parents:
diff changeset
235
e78566595089 initial import
mandel
parents:
diff changeset
236 void QDocGenerator::write(QTextStream &s, const AbstractMetaEnumValue *java_enum_value)
e78566595089 initial import
mandel
parents:
diff changeset
237 {
e78566595089 initial import
mandel
parents:
diff changeset
238 s << "<enum-value java=\"" << protect(java_enum_value->name().toUtf8()) << "\"" << endl
e78566595089 initial import
mandel
parents:
diff changeset
239 << " cpp=\"" << protect(java_enum_value->name().toUtf8()) << "\"" << endl
e78566595089 initial import
mandel
parents:
diff changeset
240 << " value=\"" << java_enum_value->value() << "\"/>" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
241 }
e78566595089 initial import
mandel
parents:
diff changeset
242
e78566595089 initial import
mandel
parents:
diff changeset
243 void QDocGenerator::write(QTextStream &s, const AbstractMetaEnum *java_enum)
e78566595089 initial import
mandel
parents:
diff changeset
244 {
e78566595089 initial import
mandel
parents:
diff changeset
245 s << "<enum java=\"" << protect(java_enum->name().toUtf8()) << "\"" << endl
e78566595089 initial import
mandel
parents:
diff changeset
246 << " cpp=\"" << protect(java_enum->name().toUtf8()) << "\"" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
247
e78566595089 initial import
mandel
parents:
diff changeset
248 if (java_enum->typeEntry()->flags()) {
e78566595089 initial import
mandel
parents:
diff changeset
249 s << " flags=\"" << protect(java_enum->typeEntry()->flags()->targetLangName().toUtf8())
e78566595089 initial import
mandel
parents:
diff changeset
250 << "\"" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
251 }
e78566595089 initial import
mandel
parents:
diff changeset
252
e78566595089 initial import
mandel
parents:
diff changeset
253 s << " >" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
254 AbstractMetaEnumValueList values = java_enum->values();
e78566595089 initial import
mandel
parents:
diff changeset
255 foreach (AbstractMetaEnumValue *value, values) {
e78566595089 initial import
mandel
parents:
diff changeset
256 write(s, value);
e78566595089 initial import
mandel
parents:
diff changeset
257 }
e78566595089 initial import
mandel
parents:
diff changeset
258 s << "</enum>" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
259 }
e78566595089 initial import
mandel
parents:
diff changeset
260
e78566595089 initial import
mandel
parents:
diff changeset
261 void QDocGenerator::writeSignal(QTextStream &s, const AbstractMetaFunction *java_function)
e78566595089 initial import
mandel
parents:
diff changeset
262 {
e78566595089 initial import
mandel
parents:
diff changeset
263 s << "<signal java=\""
e78566595089 initial import
mandel
parents:
diff changeset
264 << protect(java_function->targetLangSignature().toUtf8()) << "\" cpp=\""
e78566595089 initial import
mandel
parents:
diff changeset
265 << protect(java_function->signature().toUtf8()) << "\"/>" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
266 }
e78566595089 initial import
mandel
parents:
diff changeset
267
e78566595089 initial import
mandel
parents:
diff changeset
268 void QDocGenerator::write(QTextStream &s, const AbstractMetaField *java_field)
e78566595089 initial import
mandel
parents:
diff changeset
269 {
e78566595089 initial import
mandel
parents:
diff changeset
270 uint included_attributes = NoBlockedSlot;
e78566595089 initial import
mandel
parents:
diff changeset
271 uint excluded_attributes = 0;
e78566595089 initial import
mandel
parents:
diff changeset
272 setupForFunction(java_field->getter(), &included_attributes, &excluded_attributes);
e78566595089 initial import
mandel
parents:
diff changeset
273 s << "<variablegetter java=\"" << protect(functionSignature(java_field->getter(), included_attributes, excluded_attributes).toUtf8())
e78566595089 initial import
mandel
parents:
diff changeset
274 << "\"" << endl
e78566595089 initial import
mandel
parents:
diff changeset
275 << " cpp=\"" << protect(java_field->name().toUtf8()) << "\" />" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
276
e78566595089 initial import
mandel
parents:
diff changeset
277 included_attributes = NoBlockedSlot;
e78566595089 initial import
mandel
parents:
diff changeset
278 excluded_attributes = 0;
e78566595089 initial import
mandel
parents:
diff changeset
279 setupForFunction(java_field->setter(), &included_attributes, &excluded_attributes);
e78566595089 initial import
mandel
parents:
diff changeset
280 s << "<variablesetter java=\"" << protect(functionSignature(java_field->setter(), included_attributes, excluded_attributes).toUtf8())
e78566595089 initial import
mandel
parents:
diff changeset
281 << "\"" << endl
e78566595089 initial import
mandel
parents:
diff changeset
282 << " cpp=\"" << protect(java_field->name().toUtf8()) << "\" />" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
283 }
e78566595089 initial import
mandel
parents:
diff changeset
284
e78566595089 initial import
mandel
parents:
diff changeset
285 void QDocGenerator::write(QTextStream &s, const AbstractMetaClass *java_class)
e78566595089 initial import
mandel
parents:
diff changeset
286 {
e78566595089 initial import
mandel
parents:
diff changeset
287 s << "<class" << endl
e78566595089 initial import
mandel
parents:
diff changeset
288 << " java=\"" << protect(java_class->name().toUtf8()) << "\"" << endl
e78566595089 initial import
mandel
parents:
diff changeset
289 << " cpp=\"" << protect(java_class->typeEntry()->qualifiedCppName().toUtf8()) << "\"" << endl
e78566595089 initial import
mandel
parents:
diff changeset
290 << " java-extends=\"" << protect(java_class->baseClass() ? java_class->baseClass()->name().toUtf8() : "") << "\"" << endl
e78566595089 initial import
mandel
parents:
diff changeset
291 << " package=\"" << protect(java_class->package().toUtf8()) << "\"" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
292
e78566595089 initial import
mandel
parents:
diff changeset
293 AbstractMetaClassList interfaces = java_class->interfaces();
e78566595089 initial import
mandel
parents:
diff changeset
294 if (interfaces.count() > 0) {
e78566595089 initial import
mandel
parents:
diff changeset
295 s << " javaimplements=\"";
e78566595089 initial import
mandel
parents:
diff changeset
296 for (int i=0; i<interfaces.count(); ++i) {
e78566595089 initial import
mandel
parents:
diff changeset
297 const AbstractMetaClass *interfaze = interfaces.at(i);
e78566595089 initial import
mandel
parents:
diff changeset
298 if (i > 0)
e78566595089 initial import
mandel
parents:
diff changeset
299 s << ",";
e78566595089 initial import
mandel
parents:
diff changeset
300 s << protect(interfaze->name().toUtf8());
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 }
e78566595089 initial import
mandel
parents:
diff changeset
304
e78566595089 initial import
mandel
parents:
diff changeset
305 s << " type=\"";
e78566595089 initial import
mandel
parents:
diff changeset
306 if (java_class->isInterface())
e78566595089 initial import
mandel
parents:
diff changeset
307 s << "interface";
e78566595089 initial import
mandel
parents:
diff changeset
308 else if (java_class->typeEntry()->isValue())
e78566595089 initial import
mandel
parents:
diff changeset
309 s << "value";
e78566595089 initial import
mandel
parents:
diff changeset
310 else
e78566595089 initial import
mandel
parents:
diff changeset
311 s << "object";
e78566595089 initial import
mandel
parents:
diff changeset
312 s << "\">" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
313
e78566595089 initial import
mandel
parents:
diff changeset
314 // Write signals
e78566595089 initial import
mandel
parents:
diff changeset
315 AbstractMetaFunctionList sigs = java_class->queryFunctions(AbstractMetaClass::Signals);
e78566595089 initial import
mandel
parents:
diff changeset
316 foreach (AbstractMetaFunction *f, sigs)
e78566595089 initial import
mandel
parents:
diff changeset
317 writeSignal(s, f);
e78566595089 initial import
mandel
parents:
diff changeset
318
e78566595089 initial import
mandel
parents:
diff changeset
319 // Write functions
e78566595089 initial import
mandel
parents:
diff changeset
320 AbstractMetaFunctionList functions = java_class->functionsInTargetLang();
e78566595089 initial import
mandel
parents:
diff changeset
321 foreach (AbstractMetaFunction *f, functions) {
e78566595089 initial import
mandel
parents:
diff changeset
322 write(s, f);
e78566595089 initial import
mandel
parents:
diff changeset
323 }
e78566595089 initial import
mandel
parents:
diff changeset
324
e78566595089 initial import
mandel
parents:
diff changeset
325 // Write enums
e78566595089 initial import
mandel
parents:
diff changeset
326 AbstractMetaEnumList enums = java_class->enums();
e78566595089 initial import
mandel
parents:
diff changeset
327 foreach (AbstractMetaEnum *e, enums) {
e78566595089 initial import
mandel
parents:
diff changeset
328 write(s, e);
e78566595089 initial import
mandel
parents:
diff changeset
329 }
e78566595089 initial import
mandel
parents:
diff changeset
330
e78566595089 initial import
mandel
parents:
diff changeset
331 // Write setters and getters
e78566595089 initial import
mandel
parents:
diff changeset
332 AbstractMetaFieldList fields = java_class->fields();
e78566595089 initial import
mandel
parents:
diff changeset
333 foreach (AbstractMetaField *f, fields) {
e78566595089 initial import
mandel
parents:
diff changeset
334 write(s, f);
e78566595089 initial import
mandel
parents:
diff changeset
335 }
e78566595089 initial import
mandel
parents:
diff changeset
336
e78566595089 initial import
mandel
parents:
diff changeset
337 s << "</class>" << endl;
e78566595089 initial import
mandel
parents:
diff changeset
338 }