diff options
Diffstat (limited to 'generator/generator.cpp')
-rw-r--r-- | generator/generator.cpp | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/generator/generator.cpp b/generator/generator.cpp new file mode 100644 index 0000000..570fcc9 --- /dev/null +++ b/generator/generator.cpp @@ -0,0 +1,123 @@ +/**************************************************************************** +** +** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved. +** +** This file is part of the Qt Script Generator project on Trolltech Labs. +** +** This file may be used under the terms of the GNU General Public +** License version 2.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of +** this file. Please review the following information to ensure GNU +** General Public Licensing requirements will be met: +** http://www.trolltech.com/products/qt/opensource.html +** +** If you are unsure which license is appropriate for your use, please +** review the following information: +** http://www.trolltech.com/products/qt/licensing.html or contact the +** sales department at sales@trolltech.com. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +****************************************************************************/ + +#include "generator.h" +#include "reporthandler.h" +#include "fileout.h" + +#include <QDir> +#include <QFile> +#include <QFileInfo> + +Generator::Generator() +{ + m_num_generated = 0; + m_num_generated_written = 0; + m_out_dir = "."; +} + +void Generator::generate() +{ + if (m_classes.size() == 0) { + ReportHandler::warning(QString("%1: no java classes, skipping") + .arg(metaObject()->className())); + return; + } + + + foreach (AbstractMetaClass *cls, m_classes) { + if (!shouldGenerate(cls)) + continue; + + QString fileName = fileNameForClass(cls); + ReportHandler::debugSparse(QString("generating: %1").arg(fileName)); + + FileOut fileOut(outputDirectory() + "/" + subDirectoryForClass(cls) + "/" + fileName); + write(fileOut.stream, cls); + + if( fileOut.done() ) + ++m_num_generated_written; + ++m_num_generated; + } +} + + +void Generator::printClasses() +{ + QTextStream s(stdout); + + AbstractMetaClassList classes = m_classes; + qSort(classes); + + foreach (AbstractMetaClass *cls, classes) { + if (!shouldGenerate(cls)) + continue; + write(s, cls); + s << endl << endl; + } +} + +void Generator::verifyDirectoryFor(const QFile &file) +{ + QDir dir = QFileInfo(file).dir(); + if (!dir.exists()) { + if (!dir.mkpath(dir.absolutePath())) + ReportHandler::warning(QString("unable to create directory '%1'") + .arg(dir.absolutePath())); + } +} + +QString Generator::subDirectoryForClass(const AbstractMetaClass *) const +{ + Q_ASSERT(false); + return QString(); +} + +QString Generator::fileNameForClass(const AbstractMetaClass *) const +{ + Q_ASSERT(false); + return QString(); +} + +void Generator::write(QTextStream &, const AbstractMetaClass *) +{ + Q_ASSERT(false); +} + +bool Generator::hasDefaultConstructor(const AbstractMetaType *type) +{ + QString full_name = type->typeEntry()->qualifiedTargetLangName(); + QString class_name = type->typeEntry()->targetLangName(); + + foreach (const AbstractMetaClass *java_class, m_classes) { + if (java_class->typeEntry()->qualifiedTargetLangName() == full_name) { + AbstractMetaFunctionList functions = java_class->functions(); + foreach (const AbstractMetaFunction *function, functions) { + if (function->arguments().size() == 0 && function->name() == class_name) + return true; + } + return false; + } + } + return false; +} |