From 574c34466abb3a35e4b155908e7282cc47c7ded9 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 10 Mar 2021 14:34:37 +0100 Subject: shiboken6: Port class FileOut to use exceptions Complements f7901b0b29e831a3799bd7fc39dbdf5e67271ae8. Change-Id: I1d04ffd8f4b28c095b2def08075068dcdebba099 Reviewed-by: Christian Tismer --- sources/shiboken6/ApiExtractor/fileout.cpp | 49 ++++++++-------------- sources/shiboken6/ApiExtractor/fileout.h | 7 ++-- sources/shiboken6/generator/generator.cpp | 3 +- .../shiboken6/generator/qtdoc/qtdocgenerator.cpp | 4 +- .../shiboken6/generator/shiboken/cppgenerator.cpp | 3 +- .../generator/shiboken/headergenerator.cpp | 15 +++---- .../shiboken6/generator/shiboken/headergenerator.h | 2 +- 7 files changed, 38 insertions(+), 45 deletions(-) (limited to 'sources') diff --git a/sources/shiboken6/ApiExtractor/fileout.cpp b/sources/shiboken6/ApiExtractor/fileout.cpp index 3c00e3903..f9d0116c7 100644 --- a/sources/shiboken6/ApiExtractor/fileout.cpp +++ b/sources/shiboken6/ApiExtractor/fileout.cpp @@ -29,6 +29,7 @@ #include "fileout.h" #include "messages.h" #include "reporthandler.h" +#include "exception.h" #include #include @@ -60,8 +61,7 @@ FileOut::FileOut(QString n) : FileOut::~FileOut() { - if (!m_isDone) - done(); + Q_ASSERT(m_isDone); } static QList lcsLength(const QByteArrayList &a, const QByteArrayList &b) @@ -172,56 +172,41 @@ static void diff(const QByteArrayList &a, const QByteArrayList &b) FileOut::State FileOut::done() { - QString errorMessage; - const State result = done(&errorMessage); - if (result == Failure) - qCWarning(lcShiboken, "%s", qPrintable(errorMessage)); - return result; -} - -FileOut::State FileOut::done(QString *errorMessage) -{ - Q_ASSERT(!m_isDone); - if (m_name.isEmpty()) - return Failure; + if (m_isDone) + return Success; - m_isDone = true; bool fileEqual = false; QFile fileRead(m_name); QFileInfo info(fileRead); stream.flush(); QByteArray original; if (info.exists() && (m_diff || (info.size() == m_buffer.size()))) { - if (!fileRead.open(QIODevice::ReadOnly)) { - *errorMessage = msgCannotOpenForReading(fileRead); - return Failure; - } + if (!fileRead.open(QIODevice::ReadOnly)) + throw Exception(msgCannotOpenForReading(fileRead)); original = fileRead.readAll(); fileRead.close(); fileEqual = (original == m_buffer); } - if (fileEqual) + if (fileEqual) { + m_isDone = true; return Unchanged; + } if (!FileOut::m_dryRun) { QDir dir(info.absolutePath()); if (!dir.mkpath(dir.absolutePath())) { - *errorMessage = QStringLiteral("unable to create directory '%1'") - .arg(QDir::toNativeSeparators(dir.absolutePath())); - return Failure; + const QString message = QStringLiteral("Unable to create directory '%1'") + .arg(QDir::toNativeSeparators(dir.absolutePath())); + throw Exception(message); } QFile fileWrite(m_name); - if (!fileWrite.open(QIODevice::WriteOnly)) { - *errorMessage = msgCannotOpenForWriting(fileWrite); - return Failure; - } - if (fileWrite.write(m_buffer) == -1 || !fileWrite.flush()) { - *errorMessage = msgWriteFailed(fileWrite, m_buffer.size()); - return Failure; - } + if (!fileWrite.open(QIODevice::WriteOnly)) + throw Exception(msgCannotOpenForWriting(fileWrite)); + if (fileWrite.write(m_buffer) == -1 || !fileWrite.flush()) + throw Exception(msgWriteFailed(fileWrite, m_buffer.size())); } if (m_diff) { std::printf("%sFile: %s%s\n", colorInfo, qPrintable(m_name), colorReset); @@ -229,5 +214,7 @@ FileOut::State FileOut::done(QString *errorMessage) std::printf("\n"); } + m_isDone = true; + return Success; } diff --git a/sources/shiboken6/ApiExtractor/fileout.h b/sources/shiboken6/ApiExtractor/fileout.h index 233752227..5b5f33578 100644 --- a/sources/shiboken6/ApiExtractor/fileout.h +++ b/sources/shiboken6/ApiExtractor/fileout.h @@ -31,6 +31,8 @@ #include "textstream.h" +class Exception; + QT_FORWARD_DECLARE_CLASS(QFile) class FileOut @@ -39,15 +41,14 @@ class FileOut public: Q_DISABLE_COPY(FileOut) - enum State { Failure, Unchanged, Success }; + enum State { Unchanged, Success }; explicit FileOut(QString name); ~FileOut(); QString filePath() const { return m_name; } - State done(); - State done(QString *errorMessage); + State done() noexcept(false); TextStream stream; diff --git a/sources/shiboken6/generator/generator.cpp b/sources/shiboken6/generator/generator.cpp index 1988c63f6..a50666252 100644 --- a/sources/shiboken6/generator/generator.cpp +++ b/sources/shiboken6/generator/generator.cpp @@ -428,7 +428,8 @@ bool Generator::generateFileForContext(const GeneratorContext &context) generateClass(fileOut.stream, context); - return fileOut.done() != FileOut::Failure; + fileOut.done(); + return true; } QString Generator::getFileNameBaseForSmartPointer(const AbstractMetaType &smartPointerType, diff --git a/sources/shiboken6/generator/qtdoc/qtdocgenerator.cpp b/sources/shiboken6/generator/qtdoc/qtdocgenerator.cpp index d1de31cef..9e3cfea9e 100644 --- a/sources/shiboken6/generator/qtdoc/qtdocgenerator.cpp +++ b/sources/shiboken6/generator/qtdoc/qtdocgenerator.cpp @@ -884,6 +884,7 @@ void QtDocGenerator::writeModuleDocumentation() s << moduleDoc.detailed(); } } + output.done(); } } @@ -1060,7 +1061,8 @@ bool QtDocGenerator::convertToRst(const QString &sourceFileName, FileOut targetFile(targetFileName); QtXmlToSphinx x(this, m_parameters, doc, context); targetFile.stream << x; - return targetFile.done(errorMessage) != FileOut::Failure; + targetFile.done(); + return true; } // QtXmlToSphinxDocGeneratorInterface diff --git a/sources/shiboken6/generator/shiboken/cppgenerator.cpp b/sources/shiboken6/generator/shiboken/cppgenerator.cpp index 97804d439..0f136c45b 100644 --- a/sources/shiboken6/generator/shiboken/cppgenerator.cpp +++ b/sources/shiboken6/generator/shiboken/cppgenerator.cpp @@ -6387,7 +6387,8 @@ bool CppGenerator::finishGeneration() << "return PyInit_Shiboken();\n" << outdent << "}\n"; } - return file.done() != FileOut::Failure; + file.done(); + return true; } static ArgumentOwner getArgumentOwner(const AbstractMetaFunctionCPtr &func, int argIndex) diff --git a/sources/shiboken6/generator/shiboken/headergenerator.cpp b/sources/shiboken6/generator/shiboken/headergenerator.cpp index 98f457e99..2b9074fd8 100644 --- a/sources/shiboken6/generator/shiboken/headergenerator.cpp +++ b/sources/shiboken6/generator/shiboken/headergenerator.cpp @@ -631,15 +631,16 @@ bool HeaderGenerator::finishGeneration() << "} // namespace Shiboken\n\n" << "#endif // " << includeShield << "\n\n"; - if (file.done() == FileOut::Failure) - return false; + file.done(); - return !hasPrivateClasses() - || writePrivateHeader(moduleHeaderDir, includeShield, - privateIncludes, privateTypeFunctions.toString()); + if (hasPrivateClasses()) { + writePrivateHeader(moduleHeaderDir, includeShield, + privateIncludes, privateTypeFunctions.toString()); + } + return true; } -bool HeaderGenerator::writePrivateHeader(const QString &moduleHeaderDir, +void HeaderGenerator::writePrivateHeader(const QString &moduleHeaderDir, const QString &publicIncludeShield, const QSet &privateIncludes, const QString &privateTypeFunctions) @@ -674,7 +675,7 @@ bool HeaderGenerator::writePrivateHeader(const QString &moduleHeaderDir, ps << "QT_WARNING_POP\n"; ps << "#endif\n"; - return privateFile.done() != FileOut::Failure; + privateFile.done(); } void HeaderGenerator::writeProtectedEnumSurrogate(TextStream &s, const AbstractMetaEnum &cppEnum) const diff --git a/sources/shiboken6/generator/shiboken/headergenerator.h b/sources/shiboken6/generator/shiboken/headergenerator.h index 03ac15138..3d64158e7 100644 --- a/sources/shiboken6/generator/shiboken/headergenerator.h +++ b/sources/shiboken6/generator/shiboken/headergenerator.h @@ -65,7 +65,7 @@ private: void writeMemberFunctionWrapper(TextStream &s, const AbstractMetaFunctionCPtr &func, const QString &postfix = {}) const; - bool writePrivateHeader(const QString &moduleHeaderDir, + void writePrivateHeader(const QString &moduleHeaderDir, const QString &publicIncludeShield, const QSet &privateIncludes, const QString &privateTypeFunctions); -- cgit v1.2.3