annotate generator/generatorsetd.cpp @ 381:347e4c7a9ba1

make QwtD compile on Windows@
author Eldar Insafutdinov <e.insafutdinov@gmail.com>
date Sun, 11 Jul 2010 01:59:42 +0100
parents ae06da58ec25
children b5773ccab07d
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 "generatorsetd.h"
e78566595089 initial import
mandel
parents:
diff changeset
43 #include "reporthandler.h"
e78566595089 initial import
mandel
parents:
diff changeset
44
e78566595089 initial import
mandel
parents:
diff changeset
45 #include "dgenerator.h"
e78566595089 initial import
mandel
parents:
diff changeset
46 #include "cppheadergenerator.h"
e78566595089 initial import
mandel
parents:
diff changeset
47 #include "cppimplgenerator.h"
e78566595089 initial import
mandel
parents:
diff changeset
48 #include "metainfogenerator.h"
e78566595089 initial import
mandel
parents:
diff changeset
49 #include "classlistgenerator.h"
e78566595089 initial import
mandel
parents:
diff changeset
50 #include "containergenerator.h"
e78566595089 initial import
mandel
parents:
diff changeset
51 #include "qdocgenerator.h"
e78566595089 initial import
mandel
parents:
diff changeset
52 #include "uiconverter.h"
e78566595089 initial import
mandel
parents:
diff changeset
53 #include "jumptable.h"
e78566595089 initial import
mandel
parents:
diff changeset
54
e78566595089 initial import
mandel
parents:
diff changeset
55 #include <QFileInfo>
e78566595089 initial import
mandel
parents:
diff changeset
56
e78566595089 initial import
mandel
parents:
diff changeset
57 GeneratorSet *GeneratorSet::getInstance() {
e78566595089 initial import
mandel
parents:
diff changeset
58 return new GeneratorSetD();
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 dumpMetaDTree(const AbstractMetaClassList &classes);
e78566595089 initial import
mandel
parents:
diff changeset
62
e78566595089 initial import
mandel
parents:
diff changeset
63 GeneratorSetD::GeneratorSetD() :
e78566595089 initial import
mandel
parents:
diff changeset
64 no_d(false),
e78566595089 initial import
mandel
parents:
diff changeset
65 no_cpp_h(false),
e78566595089 initial import
mandel
parents:
diff changeset
66 no_cpp_impl(false),
e78566595089 initial import
mandel
parents:
diff changeset
67 no_metainfo(false),
e78566595089 initial import
mandel
parents:
diff changeset
68 build_class_list(false),
e78566595089 initial import
mandel
parents:
diff changeset
69 build_qdoc_japi(false),
e78566595089 initial import
mandel
parents:
diff changeset
70 docs_enabled(false),
e78566595089 initial import
mandel
parents:
diff changeset
71 do_ui_convert(false),
e78566595089 initial import
mandel
parents:
diff changeset
72 native_jump_table(false),
e78566595089 initial import
mandel
parents:
diff changeset
73 doc_dir("../../main/doc/jdoc")
e78566595089 initial import
mandel
parents:
diff changeset
74 {}
e78566595089 initial import
mandel
parents:
diff changeset
75
e78566595089 initial import
mandel
parents:
diff changeset
76 QString GeneratorSetD::usage() {
e78566595089 initial import
mandel
parents:
diff changeset
77 QString usage =
e78566595089 initial import
mandel
parents:
diff changeset
78 " --no-d \n"
e78566595089 initial import
mandel
parents:
diff changeset
79 " --no-metainfo \n"
e78566595089 initial import
mandel
parents:
diff changeset
80 " --no-cpp-h \n"
e78566595089 initial import
mandel
parents:
diff changeset
81 " --no-cpp-impl \n"
e78566595089 initial import
mandel
parents:
diff changeset
82 " --convert-to-jui=[.ui-file name] \n"
e78566595089 initial import
mandel
parents:
diff changeset
83 " --custom-widgets=[file names] \n";
e78566595089 initial import
mandel
parents:
diff changeset
84
e78566595089 initial import
mandel
parents:
diff changeset
85 return usage;
e78566595089 initial import
mandel
parents:
diff changeset
86 }
e78566595089 initial import
mandel
parents:
diff changeset
87
e78566595089 initial import
mandel
parents:
diff changeset
88 bool GeneratorSetD::readParameters(const QMap<QString, QString> args) {
e78566595089 initial import
mandel
parents:
diff changeset
89 no_d = args.contains("no-d");
e78566595089 initial import
mandel
parents:
diff changeset
90 no_cpp_h = args.contains("no-cpp-h");
e78566595089 initial import
mandel
parents:
diff changeset
91 no_cpp_impl = args.contains("no-cpp-impl");
e78566595089 initial import
mandel
parents:
diff changeset
92 no_metainfo = args.contains("no-metainfo");
e78566595089 initial import
mandel
parents:
diff changeset
93 build_class_list = args.contains("build-class-list");
e78566595089 initial import
mandel
parents:
diff changeset
94 native_jump_table = args.contains("native-jump-table");
e78566595089 initial import
mandel
parents:
diff changeset
95
e78566595089 initial import
mandel
parents:
diff changeset
96 if (args.contains("build-qdoc-japi")) {
e78566595089 initial import
mandel
parents:
diff changeset
97 no_d = true;
e78566595089 initial import
mandel
parents:
diff changeset
98 no_cpp_h = true;
e78566595089 initial import
mandel
parents:
diff changeset
99 no_cpp_impl = true;
e78566595089 initial import
mandel
parents:
diff changeset
100 no_metainfo = true;
e78566595089 initial import
mandel
parents:
diff changeset
101 build_qdoc_japi = true;
e78566595089 initial import
mandel
parents:
diff changeset
102 }
e78566595089 initial import
mandel
parents:
diff changeset
103
e78566595089 initial import
mandel
parents:
diff changeset
104 if (args.contains("jdoc-dir")) {
e78566595089 initial import
mandel
parents:
diff changeset
105 doc_dir = args.value("jdoc-dir");
e78566595089 initial import
mandel
parents:
diff changeset
106 }
e78566595089 initial import
mandel
parents:
diff changeset
107
e78566595089 initial import
mandel
parents:
diff changeset
108 docs_enabled = args.contains("jdoc-enabled");
e78566595089 initial import
mandel
parents:
diff changeset
109
e78566595089 initial import
mandel
parents:
diff changeset
110 if (args.contains("custom-widgets"))
e78566595089 initial import
mandel
parents:
diff changeset
111 custom_widgets = args.value("custom-widgets");
e78566595089 initial import
mandel
parents:
diff changeset
112
e78566595089 initial import
mandel
parents:
diff changeset
113 if (args.contains("convert-to-jui")) {
e78566595089 initial import
mandel
parents:
diff changeset
114 ui_file_name = args.value("convert-to-jui");
e78566595089 initial import
mandel
parents:
diff changeset
115 do_ui_convert = true;
e78566595089 initial import
mandel
parents:
diff changeset
116
e78566595089 initial import
mandel
parents:
diff changeset
117 if (!QFileInfo(ui_file_name).exists()) {
e78566595089 initial import
mandel
parents:
diff changeset
118 printf(".ui file '%s' does not exist\n", qPrintable(ui_file_name));
e78566595089 initial import
mandel
parents:
diff changeset
119 return false;
e78566595089 initial import
mandel
parents:
diff changeset
120 }
e78566595089 initial import
mandel
parents:
diff changeset
121 }
e78566595089 initial import
mandel
parents:
diff changeset
122 return GeneratorSet::readParameters(args);
e78566595089 initial import
mandel
parents:
diff changeset
123 }
e78566595089 initial import
mandel
parents:
diff changeset
124
e78566595089 initial import
mandel
parents:
diff changeset
125 void GeneratorSetD::buildModel(const QString pp_file) {
e78566595089 initial import
mandel
parents:
diff changeset
126 // Building the code inforamation...
e78566595089 initial import
mandel
parents:
diff changeset
127 builder.setFileName(pp_file);
e78566595089 initial import
mandel
parents:
diff changeset
128 builder.build();
e78566595089 initial import
mandel
parents:
diff changeset
129 }
e78566595089 initial import
mandel
parents:
diff changeset
130
e78566595089 initial import
mandel
parents:
diff changeset
131 void GeneratorSetD::dumpObjectTree() {
e78566595089 initial import
mandel
parents:
diff changeset
132 dumpMetaDTree(builder.classes());
e78566595089 initial import
mandel
parents:
diff changeset
133 }
e78566595089 initial import
mandel
parents:
diff changeset
134
e78566595089 initial import
mandel
parents:
diff changeset
135 QString GeneratorSetD::generate() {
e78566595089 initial import
mandel
parents:
diff changeset
136
e78566595089 initial import
mandel
parents:
diff changeset
137 // Ui conversion...
e78566595089 initial import
mandel
parents:
diff changeset
138 if (do_ui_convert) {
e78566595089 initial import
mandel
parents:
diff changeset
139 UiConverter converter;
e78566595089 initial import
mandel
parents:
diff changeset
140 converter.setClasses(builder.classes());
e78566595089 initial import
mandel
parents:
diff changeset
141 converter.convertToJui(ui_file_name, custom_widgets);
e78566595089 initial import
mandel
parents:
diff changeset
142 return 0;
e78566595089 initial import
mandel
parents:
diff changeset
143 } else if (!custom_widgets.isEmpty()) {
e78566595089 initial import
mandel
parents:
diff changeset
144 fprintf(stderr, "NOTE: The --custom-widgets option only has an effect when used with --convert-to-jui");
e78566595089 initial import
mandel
parents:
diff changeset
145 }
e78566595089 initial import
mandel
parents:
diff changeset
146
e78566595089 initial import
mandel
parents:
diff changeset
147 // Code generation
e78566595089 initial import
mandel
parents:
diff changeset
148 QList<Generator *> generators;
e78566595089 initial import
mandel
parents:
diff changeset
149 PriGenerator *priGenerator = new PriGenerator;
167
ae06da58ec25 fixed hacky conversion of arguments when emmitting a signal
eldar
parents: 110
diff changeset
150 ContainerGenerator *cointainerGenerator;
1
e78566595089 initial import
mandel
parents:
diff changeset
151 DGenerator *d_generator = 0;
e78566595089 initial import
mandel
parents:
diff changeset
152 CppHeaderGenerator *cpp_header_generator = 0;
e78566595089 initial import
mandel
parents:
diff changeset
153 CppImplGenerator *cpp_impl_generator = 0;
e78566595089 initial import
mandel
parents:
diff changeset
154 MetaInfoGenerator *metainfo = 0;
e78566595089 initial import
mandel
parents:
diff changeset
155 JumpTablePreprocessor *jumpTablePreprocessor = 0;
e78566595089 initial import
mandel
parents:
diff changeset
156 JumpTableGenerator *jumpTableGenerator = 0;
e78566595089 initial import
mandel
parents:
diff changeset
157
110
136c9ee83ee5 put conversion code in separate functions
eldar
parents: 1
diff changeset
158 ClassFromEntry::construct(builder.classes());
136c9ee83ee5 put conversion code in separate functions
eldar
parents: 1
diff changeset
159
1
e78566595089 initial import
mandel
parents:
diff changeset
160 QStringList contexts;
e78566595089 initial import
mandel
parents:
diff changeset
161 if (build_qdoc_japi) {
e78566595089 initial import
mandel
parents:
diff changeset
162 generators << new QDocGenerator;
e78566595089 initial import
mandel
parents:
diff changeset
163 contexts << "QDocGenerator";
e78566595089 initial import
mandel
parents:
diff changeset
164 }
e78566595089 initial import
mandel
parents:
diff changeset
165
e78566595089 initial import
mandel
parents:
diff changeset
166 if (native_jump_table) {
e78566595089 initial import
mandel
parents:
diff changeset
167 jumpTablePreprocessor = new JumpTablePreprocessor();
e78566595089 initial import
mandel
parents:
diff changeset
168 generators << jumpTablePreprocessor;
e78566595089 initial import
mandel
parents:
diff changeset
169 contexts << "JumpTablePreprocessor";
e78566595089 initial import
mandel
parents:
diff changeset
170 }
e78566595089 initial import
mandel
parents:
diff changeset
171
e78566595089 initial import
mandel
parents:
diff changeset
172 if (!no_d) {
e78566595089 initial import
mandel
parents:
diff changeset
173 d_generator = new DGenerator;
e78566595089 initial import
mandel
parents:
diff changeset
174 d_generator->setDocumentationDirectory(doc_dir);
e78566595089 initial import
mandel
parents:
diff changeset
175 d_generator->setDocumentationEnabled(docs_enabled);
e78566595089 initial import
mandel
parents:
diff changeset
176 d_generator->setNativeJumpTable(native_jump_table);
e78566595089 initial import
mandel
parents:
diff changeset
177 generators << d_generator;
e78566595089 initial import
mandel
parents:
diff changeset
178
e78566595089 initial import
mandel
parents:
diff changeset
179 contexts << "JavaGenerator";
e78566595089 initial import
mandel
parents:
diff changeset
180 }
e78566595089 initial import
mandel
parents:
diff changeset
181
e78566595089 initial import
mandel
parents:
diff changeset
182 if (!no_cpp_h) {
e78566595089 initial import
mandel
parents:
diff changeset
183 cpp_header_generator = new CppHeaderGenerator(priGenerator);
e78566595089 initial import
mandel
parents:
diff changeset
184 generators << cpp_header_generator;
e78566595089 initial import
mandel
parents:
diff changeset
185 contexts << "CppHeaderGenerator";
e78566595089 initial import
mandel
parents:
diff changeset
186 }
e78566595089 initial import
mandel
parents:
diff changeset
187
e78566595089 initial import
mandel
parents:
diff changeset
188 if (!no_cpp_impl) {
e78566595089 initial import
mandel
parents:
diff changeset
189 cpp_impl_generator = new CppImplGenerator(priGenerator);
e78566595089 initial import
mandel
parents:
diff changeset
190 cpp_impl_generator->setNativeJumpTable(native_jump_table);
e78566595089 initial import
mandel
parents:
diff changeset
191 generators << cpp_impl_generator;
e78566595089 initial import
mandel
parents:
diff changeset
192 contexts << "CppImplGenerator";
e78566595089 initial import
mandel
parents:
diff changeset
193 }
e78566595089 initial import
mandel
parents:
diff changeset
194
e78566595089 initial import
mandel
parents:
diff changeset
195 if (native_jump_table) {
e78566595089 initial import
mandel
parents:
diff changeset
196 jumpTableGenerator = new JumpTableGenerator(jumpTablePreprocessor, priGenerator);
e78566595089 initial import
mandel
parents:
diff changeset
197 generators << jumpTableGenerator;
e78566595089 initial import
mandel
parents:
diff changeset
198 contexts << "JumpTableGenerator";
e78566595089 initial import
mandel
parents:
diff changeset
199 }
e78566595089 initial import
mandel
parents:
diff changeset
200
e78566595089 initial import
mandel
parents:
diff changeset
201 if (!no_metainfo) {
e78566595089 initial import
mandel
parents:
diff changeset
202 metainfo = new MetaInfoGenerator(priGenerator);
e78566595089 initial import
mandel
parents:
diff changeset
203 generators << metainfo;
e78566595089 initial import
mandel
parents:
diff changeset
204 contexts << "MetaInfoGenerator";
e78566595089 initial import
mandel
parents:
diff changeset
205 }
e78566595089 initial import
mandel
parents:
diff changeset
206
e78566595089 initial import
mandel
parents:
diff changeset
207 if (build_class_list) {
e78566595089 initial import
mandel
parents:
diff changeset
208 generators << new ClassListGenerator;
e78566595089 initial import
mandel
parents:
diff changeset
209 contexts << "ClassListGenerator";
e78566595089 initial import
mandel
parents:
diff changeset
210 }
e78566595089 initial import
mandel
parents:
diff changeset
211
167
ae06da58ec25 fixed hacky conversion of arguments when emmitting a signal
eldar
parents: 110
diff changeset
212 cointainerGenerator = new ContainerGenerator(cpp_impl_generator);
ae06da58ec25 fixed hacky conversion of arguments when emmitting a signal
eldar
parents: 110
diff changeset
213
ae06da58ec25 fixed hacky conversion of arguments when emmitting a signal
eldar
parents: 110
diff changeset
214
1
e78566595089 initial import
mandel
parents:
diff changeset
215 generators << priGenerator;
e78566595089 initial import
mandel
parents:
diff changeset
216 contexts << "PriGenerator";
e78566595089 initial import
mandel
parents:
diff changeset
217
e78566595089 initial import
mandel
parents:
diff changeset
218 generators << cointainerGenerator;
e78566595089 initial import
mandel
parents:
diff changeset
219 contexts << "cointainerGenerator";
e78566595089 initial import
mandel
parents:
diff changeset
220
e78566595089 initial import
mandel
parents:
diff changeset
221 for (int i=0; i<generators.size(); ++i) {
e78566595089 initial import
mandel
parents:
diff changeset
222 Generator *generator = generators.at(i);
e78566595089 initial import
mandel
parents:
diff changeset
223 ReportHandler::setContext(contexts.at(i));
e78566595089 initial import
mandel
parents:
diff changeset
224
e78566595089 initial import
mandel
parents:
diff changeset
225 generator->setOutputDirectory(outDir);
e78566595089 initial import
mandel
parents:
diff changeset
226 generator->setClasses(builder.classes());
e78566595089 initial import
mandel
parents:
diff changeset
227 if (printStdout)
e78566595089 initial import
mandel
parents:
diff changeset
228 generator->printClasses();
e78566595089 initial import
mandel
parents:
diff changeset
229 else
e78566595089 initial import
mandel
parents:
diff changeset
230 generator->generate();
e78566595089 initial import
mandel
parents:
diff changeset
231 }
e78566595089 initial import
mandel
parents:
diff changeset
232
e78566595089 initial import
mandel
parents:
diff changeset
233 QString res;
e78566595089 initial import
mandel
parents:
diff changeset
234 res = QString("Classes in typesystem: %1\n"
e78566595089 initial import
mandel
parents:
diff changeset
235 "Generated:\n"
e78566595089 initial import
mandel
parents:
diff changeset
236 " - d.........: %2 (%3)\n"
e78566595089 initial import
mandel
parents:
diff changeset
237 " - cpp-impl..: %4 (%5)\n"
e78566595089 initial import
mandel
parents:
diff changeset
238 " - cpp-h.....: %6 (%7)\n"
e78566595089 initial import
mandel
parents:
diff changeset
239 " - meta-info.: %8 (%9)\n"
e78566595089 initial import
mandel
parents:
diff changeset
240 " - pri.......: %10 (%11)\n"
e78566595089 initial import
mandel
parents:
diff changeset
241 )
e78566595089 initial import
mandel
parents:
diff changeset
242 .arg(builder.classes().size())
e78566595089 initial import
mandel
parents:
diff changeset
243 .arg(d_generator ? d_generator->numGenerated() : 0)
e78566595089 initial import
mandel
parents:
diff changeset
244 .arg(d_generator ? d_generator->numGeneratedAndWritten() : 0)
e78566595089 initial import
mandel
parents:
diff changeset
245 .arg(cpp_impl_generator ? cpp_impl_generator->numGenerated() : 0)
e78566595089 initial import
mandel
parents:
diff changeset
246 .arg(cpp_impl_generator ? cpp_impl_generator->numGeneratedAndWritten() : 0)
e78566595089 initial import
mandel
parents:
diff changeset
247 .arg(cpp_header_generator ? cpp_header_generator->numGenerated() : 0)
e78566595089 initial import
mandel
parents:
diff changeset
248 .arg(cpp_header_generator ? cpp_header_generator->numGeneratedAndWritten() : 0)
e78566595089 initial import
mandel
parents:
diff changeset
249 .arg(metainfo ? metainfo->numGenerated() : 0)
e78566595089 initial import
mandel
parents:
diff changeset
250 .arg(metainfo ? metainfo->numGeneratedAndWritten() : 0)
e78566595089 initial import
mandel
parents:
diff changeset
251 .arg(priGenerator->numGenerated())
e78566595089 initial import
mandel
parents:
diff changeset
252 .arg(priGenerator->numGeneratedAndWritten());
e78566595089 initial import
mandel
parents:
diff changeset
253
e78566595089 initial import
mandel
parents:
diff changeset
254 return res;
e78566595089 initial import
mandel
parents:
diff changeset
255 }
e78566595089 initial import
mandel
parents:
diff changeset
256
e78566595089 initial import
mandel
parents:
diff changeset
257 void dumpMetaDAttributes(const AbstractMetaAttributes *attr)
e78566595089 initial import
mandel
parents:
diff changeset
258 {
e78566595089 initial import
mandel
parents:
diff changeset
259 if (attr->isNative()) printf(" native");
e78566595089 initial import
mandel
parents:
diff changeset
260 if (attr->isAbstract()) printf(" abstract");
e78566595089 initial import
mandel
parents:
diff changeset
261 if (attr->isFinalInTargetLang()) printf(" final(d)");
e78566595089 initial import
mandel
parents:
diff changeset
262 if (attr->isFinalInCpp()) printf(" final(cpp)");
e78566595089 initial import
mandel
parents:
diff changeset
263 if (attr->isStatic()) printf(" static");
e78566595089 initial import
mandel
parents:
diff changeset
264 if (attr->isPrivate()) printf(" private");
e78566595089 initial import
mandel
parents:
diff changeset
265 if (attr->isProtected()) printf(" protected");
e78566595089 initial import
mandel
parents:
diff changeset
266 if (attr->isPublic()) printf(" public");
e78566595089 initial import
mandel
parents:
diff changeset
267 if (attr->isFriendly()) printf(" friendly");
e78566595089 initial import
mandel
parents:
diff changeset
268 }
e78566595089 initial import
mandel
parents:
diff changeset
269
e78566595089 initial import
mandel
parents:
diff changeset
270 void dumpMetaDType(const AbstractMetaType *type)
e78566595089 initial import
mandel
parents:
diff changeset
271 {
e78566595089 initial import
mandel
parents:
diff changeset
272 if (!type) {
e78566595089 initial import
mandel
parents:
diff changeset
273 printf("[void]");
e78566595089 initial import
mandel
parents:
diff changeset
274 } else {
e78566595089 initial import
mandel
parents:
diff changeset
275 printf("[type: %s", qPrintable(type->typeEntry()->qualifiedCppName()));
e78566595089 initial import
mandel
parents:
diff changeset
276 if (type->isReference()) printf(" &");
e78566595089 initial import
mandel
parents:
diff changeset
277 int indirections = type->indirections();
e78566595089 initial import
mandel
parents:
diff changeset
278 if (indirections) printf(" %s", qPrintable(QString(indirections, '*')));
e78566595089 initial import
mandel
parents:
diff changeset
279
e78566595089 initial import
mandel
parents:
diff changeset
280 printf(", %s", qPrintable(type->typeEntry()->qualifiedTargetLangName()));
e78566595089 initial import
mandel
parents:
diff changeset
281
e78566595089 initial import
mandel
parents:
diff changeset
282 if (type->isPrimitive()) printf(" primitive");
e78566595089 initial import
mandel
parents:
diff changeset
283 if (type->isEnum()) printf(" enum");
e78566595089 initial import
mandel
parents:
diff changeset
284 if (type->isQObject()) printf(" q_obj");
e78566595089 initial import
mandel
parents:
diff changeset
285 if (type->isNativePointer()) printf(" n_ptr");
e78566595089 initial import
mandel
parents:
diff changeset
286 if (type->isTargetLangString()) printf(" d_string");
e78566595089 initial import
mandel
parents:
diff changeset
287 if (type->isConstant()) printf(" const");
e78566595089 initial import
mandel
parents:
diff changeset
288 printf("]");
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 dumpMetaDArgument(const AbstractMetaArgument *arg)
e78566595089 initial import
mandel
parents:
diff changeset
293 {
e78566595089 initial import
mandel
parents:
diff changeset
294 printf(" ");
e78566595089 initial import
mandel
parents:
diff changeset
295 dumpMetaDType(arg->type());
e78566595089 initial import
mandel
parents:
diff changeset
296 printf(" %s", qPrintable(arg->argumentName()));
e78566595089 initial import
mandel
parents:
diff changeset
297 if (!arg->defaultValueExpression().isEmpty())
e78566595089 initial import
mandel
parents:
diff changeset
298 printf(" = %s", qPrintable(arg->defaultValueExpression()));
e78566595089 initial import
mandel
parents:
diff changeset
299 printf("\n");
e78566595089 initial import
mandel
parents:
diff changeset
300 }
e78566595089 initial import
mandel
parents:
diff changeset
301
e78566595089 initial import
mandel
parents:
diff changeset
302 void dumpMetaDFunction(const AbstractMetaFunction *func)
e78566595089 initial import
mandel
parents:
diff changeset
303 {
e78566595089 initial import
mandel
parents:
diff changeset
304 printf(" %s() - ", qPrintable(func->name()));
e78566595089 initial import
mandel
parents:
diff changeset
305 dumpMetaDType(func->type());
e78566595089 initial import
mandel
parents:
diff changeset
306 dumpMetaDAttributes(func);
e78566595089 initial import
mandel
parents:
diff changeset
307 if (func->isConstant()) printf(" const");
e78566595089 initial import
mandel
parents:
diff changeset
308 printf("\n arguments:\n");
e78566595089 initial import
mandel
parents:
diff changeset
309 foreach (AbstractMetaArgument *arg, func->arguments())
e78566595089 initial import
mandel
parents:
diff changeset
310 dumpMetaDArgument(arg);
e78566595089 initial import
mandel
parents:
diff changeset
311 }
e78566595089 initial import
mandel
parents:
diff changeset
312
e78566595089 initial import
mandel
parents:
diff changeset
313 void dumpMetaDClass(const AbstractMetaClass *cls)
e78566595089 initial import
mandel
parents:
diff changeset
314 {
e78566595089 initial import
mandel
parents:
diff changeset
315 printf("\nclass: %s, package: %s\n", qPrintable(cls->name()), qPrintable(cls->package()));
e78566595089 initial import
mandel
parents:
diff changeset
316 if (cls->hasVirtualFunctions())
e78566595089 initial import
mandel
parents:
diff changeset
317 printf(" shell based\n");
e78566595089 initial import
mandel
parents:
diff changeset
318 printf(" baseclass: %s %s\n", qPrintable(cls->baseClassName()), cls->isQObject() ? "'QObject-type'" : "'not a QObject-type'");
e78566595089 initial import
mandel
parents:
diff changeset
319 printf(" interfaces:");
e78566595089 initial import
mandel
parents:
diff changeset
320 foreach (AbstractMetaClass *iface, cls->interfaces())
e78566595089 initial import
mandel
parents:
diff changeset
321 printf(" %s", qPrintable(iface->name()));
e78566595089 initial import
mandel
parents:
diff changeset
322 printf("\n");
e78566595089 initial import
mandel
parents:
diff changeset
323 printf(" attributes:");
e78566595089 initial import
mandel
parents:
diff changeset
324 dumpMetaDAttributes(cls);
e78566595089 initial import
mandel
parents:
diff changeset
325
e78566595089 initial import
mandel
parents:
diff changeset
326 printf("\n functions:\n");
e78566595089 initial import
mandel
parents:
diff changeset
327 foreach (const AbstractMetaFunction *func, cls->functions())
e78566595089 initial import
mandel
parents:
diff changeset
328 dumpMetaDFunction(func);
e78566595089 initial import
mandel
parents:
diff changeset
329
e78566595089 initial import
mandel
parents:
diff changeset
330 // printf("\n fields:\n");
e78566595089 initial import
mandel
parents:
diff changeset
331 // foreach (const AbstractMetaField *field, cls->fields())
e78566595089 initial import
mandel
parents:
diff changeset
332 // dumpMetaJavaField(field);
e78566595089 initial import
mandel
parents:
diff changeset
333
e78566595089 initial import
mandel
parents:
diff changeset
334 // printf("\n enums:\n");
e78566595089 initial import
mandel
parents:
diff changeset
335 // foreach (const AbstractMetaEnum *e, cls->enums())
e78566595089 initial import
mandel
parents:
diff changeset
336 // dumpMetaJavaEnum(e);
e78566595089 initial import
mandel
parents:
diff changeset
337 }
e78566595089 initial import
mandel
parents:
diff changeset
338
e78566595089 initial import
mandel
parents:
diff changeset
339 void dumpMetaDTree(const AbstractMetaClassList &classes)
e78566595089 initial import
mandel
parents:
diff changeset
340 {
e78566595089 initial import
mandel
parents:
diff changeset
341 foreach (AbstractMetaClass *cls, classes) {
e78566595089 initial import
mandel
parents:
diff changeset
342 dumpMetaDClass(cls);
e78566595089 initial import
mandel
parents:
diff changeset
343 }
e78566595089 initial import
mandel
parents:
diff changeset
344 }
e78566595089 initial import
mandel
parents:
diff changeset
345