annotate generator/qdocgenerator.cpp @ 363:3b0545d4d479

Fixed enums in designated interfaces
author Max Samukha <maxter@maxter.com>
date Thu, 10 Jun 2010 00:57:32 +0300
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 }