aboutsummaryrefslogtreecommitdiffstats
path: root/sources
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2021-03-10 14:34:37 +0100
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2021-06-21 11:21:58 +0200
commit574c34466abb3a35e4b155908e7282cc47c7ded9 (patch)
treeab80cb585212dc064011746d5d42f78c1f4d8165 /sources
parent2e573af438e440bb2041370d99b2a2e0147ea65d (diff)
shiboken6: Port class FileOut to use exceptions
Complements f7901b0b29e831a3799bd7fc39dbdf5e67271ae8. Change-Id: I1d04ffd8f4b28c095b2def08075068dcdebba099 Reviewed-by: Christian Tismer <tismer@stackless.com>
Diffstat (limited to 'sources')
-rw-r--r--sources/shiboken6/ApiExtractor/fileout.cpp49
-rw-r--r--sources/shiboken6/ApiExtractor/fileout.h7
-rw-r--r--sources/shiboken6/generator/generator.cpp3
-rw-r--r--sources/shiboken6/generator/qtdoc/qtdocgenerator.cpp4
-rw-r--r--sources/shiboken6/generator/shiboken/cppgenerator.cpp3
-rw-r--r--sources/shiboken6/generator/shiboken/headergenerator.cpp15
-rw-r--r--sources/shiboken6/generator/shiboken/headergenerator.h2
7 files changed, 38 insertions, 45 deletions
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 <QtCore/QFileInfo>
#include <QtCore/QDir>
@@ -60,8 +61,7 @@ FileOut::FileOut(QString n) :
FileOut::~FileOut()
{
- if (!m_isDone)
- done();
+ Q_ASSERT(m_isDone);
}
static QList<int> 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<Include> &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<Include> &privateIncludes,
const QString &privateTypeFunctions);