diff --git a/src/libs/utils/fileutils.cpp b/src/libs/utils/fileutils.cpp index 5685fd111fa..12825fcb9ee 100644 --- a/src/libs/utils/fileutils.cpp +++ b/src/libs/utils/fileutils.cpp @@ -82,21 +82,12 @@ FileSaverBase::FileSaverBase() FileSaverBase::~FileSaverBase() = default; -bool FileSaverBase::finalize() +Result<> FileSaverBase::finalize() { m_file->close(); setResult(m_file->error() == QFile::NoError); m_file.reset(); - return m_result.has_value(); -} - -bool FileSaverBase::finalize(QString *errStr) -{ - if (finalize()) - return true; - if (errStr) - *errStr = errorString(); - return false; + return m_result; } #ifdef QT_GUI_LIB @@ -223,7 +214,7 @@ FileSaver::FileSaver(const FilePath &filePath, QIODevice::OpenMode mode) } } -bool FileSaver::finalize() +Result<> FileSaver::finalize() { if (!m_isSafe) return FileSaverBase::finalize(); @@ -236,7 +227,7 @@ bool FileSaver::finalize() setResult(sf->commit()); } m_file.reset(); - return m_result.has_value(); + return m_result; } TempFileSaver::TempFileSaver(const QString &templ) diff --git a/src/libs/utils/fileutils.h b/src/libs/utils/fileutils.h index 212092593e4..16bface0bc6 100644 --- a/src/libs/utils/fileutils.h +++ b/src/libs/utils/fileutils.h @@ -6,9 +6,7 @@ #include "utils_global.h" #include "filepath.h" - -#include -#include +#include "result.h" #ifdef QT_WIDGETS_LIB #include @@ -161,8 +159,7 @@ public: FilePath filePath() const { return m_filePath; } bool hasError() const { return !m_result; } QString errorString() const { return m_result.error(); } - virtual bool finalize(); - bool finalize(QString *errStr); + virtual Utils::Result<> finalize(); #ifdef QT_GUI_LIB bool finalize(QWidget *parent); #endif @@ -191,7 +188,7 @@ public: // QIODevice::WriteOnly is implicit explicit FileSaver(const FilePath &filePath, QIODevice::OpenMode mode = QIODevice::NotOpen); - bool finalize() override; + Utils::Result<> finalize() override; using FileSaverBase::finalize; private: diff --git a/src/libs/utils/textfileformat.cpp b/src/libs/utils/textfileformat.cpp index e363b275c43..2834c5f1781 100644 --- a/src/libs/utils/textfileformat.cpp +++ b/src/libs/utils/textfileformat.cpp @@ -351,12 +351,11 @@ Result<> TextFileFormat::writeFile(const FilePath &filePath, QString plainText) saver.write(m_codec->fromUnicode(plainText)); } - QString errorString; - const bool ok = saver.finalize(&errorString); + const Result<> result = saver.finalize(); if (debug) qDebug().nospace() << Q_FUNC_INFO << filePath << ' ' << *this << ' ' << plainText.size() - << " bytes, returns " << ok; - return ok ? ResultOk : ResultError(errorString); + << " bytes, returns " << result.has_value(); + return result; } } // namespace Utils diff --git a/src/plugins/bineditor/bineditorplugin.cpp b/src/plugins/bineditor/bineditorplugin.cpp index 39a653c79ca..008f568de9d 100644 --- a/src/plugins/bineditor/bineditorplugin.cpp +++ b/src/plugins/bineditor/bineditorplugin.cpp @@ -658,9 +658,8 @@ Result<> BinEditorDocument::save(const FilePath &oldFilePath, const FilePath &ne saver.setResult(output->resize(size)); } - QString errorString; - if (!saver.finalize(&errorString)) - return ResultError(errorString); + if (const Result<> res = saver.finalize(); !res) + return res; setModified(false); return ResultOk; diff --git a/src/plugins/coreplugin/dialogs/shortcutsettings.cpp b/src/plugins/coreplugin/dialogs/shortcutsettings.cpp index db960368e7d..3a311683bea 100644 --- a/src/plugins/coreplugin/dialogs/shortcutsettings.cpp +++ b/src/plugins/coreplugin/dialogs/shortcutsettings.cpp @@ -192,7 +192,7 @@ bool CommandsFile::exportCommands(const QList &items) if (!saver.setResult(&w)) qWarning() << saver.errorString(); } - return saver.finalize(); + return saver.finalize().has_value(); } static int translateModifiers(Qt::KeyboardModifiers state, const QString &text) diff --git a/src/plugins/coreplugin/externaltool.cpp b/src/plugins/coreplugin/externaltool.cpp index bb616292021..9f3031d1e03 100644 --- a/src/plugins/coreplugin/externaltool.cpp +++ b/src/plugins/coreplugin/externaltool.cpp @@ -459,10 +459,10 @@ static QString stringForOutputHandling(ExternalTool::OutputHandling handling) return QString(); } -bool ExternalTool::save(QString *errorMessage) const +Result<> ExternalTool::save() const { if (m_filePath.isEmpty()) - return false; + return ResultError(ResultAssert); // FIXME: Find something better FileSaver saver(m_filePath); if (!saver.hasError()) { QXmlStreamWriter out(saver.file()); @@ -504,7 +504,7 @@ bool ExternalTool::save(QString *errorMessage) const saver.setResult(&out); } - return saver.finalize(errorMessage); + return saver.finalize(); } bool ExternalTool::operator==(const ExternalTool &other) const diff --git a/src/plugins/coreplugin/externaltool.h b/src/plugins/coreplugin/externaltool.h index cf6420dec6d..8af27fb5e20 100644 --- a/src/plugins/coreplugin/externaltool.h +++ b/src/plugins/coreplugin/externaltool.h @@ -60,7 +60,7 @@ public: static Utils::Result createFromFile(const Utils::FilePath &filePath, const QString &locale = {}); - bool save(QString *errorMessage = nullptr) const; + Utils::Result<> save() const; bool operator==(const ExternalTool &other) const; bool operator!=(const ExternalTool &other) const { return !((*this) == other); } diff --git a/src/plugins/coreplugin/generatedfile.cpp b/src/plugins/coreplugin/generatedfile.cpp index 9737467d5fc..22aae6bbad9 100644 --- a/src/plugins/coreplugin/generatedfile.cpp +++ b/src/plugins/coreplugin/generatedfile.cpp @@ -156,9 +156,7 @@ Result<> GeneratedFilePrivate::writeContents() const QIODevice::OpenMode flags = QIODevice::WriteOnly | QIODevice::Truncate; FileSaver saver(path, flags); saver.write(contents); - QString errorMessage; - const bool ok = saver.finalize(&errorMessage); - return ok ? ResultOk : ResultError(errorMessage); + return saver.finalize(); } TextFileFormat format; diff --git a/src/plugins/git/gerrit/authenticationdialog.cpp b/src/plugins/git/gerrit/authenticationdialog.cpp index fd1eac05d61..466d233c9f8 100644 --- a/src/plugins/git/gerrit/authenticationdialog.cpp +++ b/src/plugins/git/gerrit/authenticationdialog.cpp @@ -25,8 +25,7 @@ using namespace Utils; -namespace Gerrit { -namespace Internal { +namespace Gerrit::Internal { static QRegularExpressionMatch entryMatch(const QString &line, const QString &type) { @@ -176,10 +175,11 @@ bool AuthenticationDialog::setupCredentials() } if (!found) out << "machine " << m_server->host << " login " << user << " password " << password << '\n'; - Utils::FileSaver saver(Utils::FilePath::fromString(m_netrcFileName), - QFile::WriteOnly | QFile::Truncate | QFile::Text); + + FileSaver saver(FilePath::fromString(m_netrcFileName), + QFile::WriteOnly | QFile::Truncate | QFile::Text); saver.write(netrcContents.toUtf8()); - return saver.finalize(); + return saver.finalize().has_value(); } void AuthenticationDialog::checkCredentials() @@ -190,5 +190,4 @@ void AuthenticationDialog::checkCredentials() m_buttonBox->button(QDialogButtonBox::Ok)->setEnabled(result == 200); } -} // Internal -} // Gerrit +} // Gerrit::Internal diff --git a/src/plugins/macros/macro.cpp b/src/plugins/macros/macro.cpp index 21ddd34998b..8a1a607d550 100644 --- a/src/plugins/macros/macro.cpp +++ b/src/plugins/macros/macro.cpp @@ -10,6 +10,7 @@ #include #include +#include namespace Macros::Internal { diff --git a/src/plugins/perforce/perforceplugin.cpp b/src/plugins/perforce/perforceplugin.cpp index e28a4a64b46..80d08c158ea 100644 --- a/src/plugins/perforce/perforceplugin.cpp +++ b/src/plugins/perforce/perforceplugin.cpp @@ -1064,8 +1064,11 @@ std::shared_ptr PerforcePluginPrivate::createTemporaryArgumentFil if (i != last) rc->write("\n", 1); } - if (!rc->finalize(errorString)) + if (const Result<> res = rc->finalize(); !res) { + if (errorString) + *errorString = res.error(); return std::shared_ptr(); + } return rc; } diff --git a/src/plugins/texteditor/snippets/snippetscollection.cpp b/src/plugins/texteditor/snippets/snippetscollection.cpp index 251f8f5b3a5..00470232006 100644 --- a/src/plugins/texteditor/snippets/snippetscollection.cpp +++ b/src/plugins/texteditor/snippets/snippetscollection.cpp @@ -279,12 +279,11 @@ void SnippetsCollection::reload() insertSnippet(snippet); } -bool SnippetsCollection::synchronize(QString *errorString) +Result<> SnippetsCollection::synchronize() { if (!m_userSnippetsFile.parentDir().ensureWritableDir()) { - *errorString = Tr::tr("Cannot create user snippet directory %1") - .arg(m_userSnippetsFile.parentDir().toUserOutput()); - return false; + return ResultError(Tr::tr("Cannot create user snippet directory %1") + .arg(m_userSnippetsFile.parentDir().toUserOutput())); } FileSaver saver(m_userSnippetsFile); if (!saver.hasError()) { @@ -309,11 +308,11 @@ bool SnippetsCollection::synchronize(QString *errorString) saver.setResult(&writer); } - if (!saver.finalize(errorString)) - return false; + if (const Result<> res = saver.finalize(); !res) + return res; reload(); - return true; + return ResultOk; } void SnippetsCollection::writeSnippetXML(const Snippet &snippet, QXmlStreamWriter *writer) const diff --git a/src/plugins/texteditor/snippets/snippetscollection.h b/src/plugins/texteditor/snippets/snippetscollection.h index 747ad784773..101e12fda21 100644 --- a/src/plugins/texteditor/snippets/snippetscollection.h +++ b/src/plugins/texteditor/snippets/snippetscollection.h @@ -68,7 +68,7 @@ public: QList groupIds() const; void reload(); - bool synchronize(QString *errorString); + Utils::Result<> synchronize(); private: void identifyGroups(); diff --git a/src/plugins/texteditor/snippets/snippetssettingspage.cpp b/src/plugins/texteditor/snippets/snippetssettingspage.cpp index fd793503797..a7bb258c8a6 100644 --- a/src/plugins/texteditor/snippets/snippetssettingspage.cpp +++ b/src/plugins/texteditor/snippets/snippetssettingspage.cpp @@ -388,12 +388,11 @@ void SnippetsSettingsWidget::apply() setSnippetContent(); if (m_snippetsCollectionChanged) { - QString errorString; - if (SnippetsCollection::instance()->synchronize(&errorString)) { + if (const Result<> res = SnippetsCollection::instance()->synchronize()) { m_snippetsCollectionChanged = false; } else { QMessageBox::critical(Core::ICore::dialogParent(), - Tr::tr("Error While Saving Snippet Collection"), errorString); + Tr::tr("Error While Saving Snippet Collection"), res.error()); } } } diff --git a/src/plugins/vcsbase/submiteditorfile.cpp b/src/plugins/vcsbase/submiteditorfile.cpp index 72b1f028150..c7f2acf3863 100644 --- a/src/plugins/vcsbase/submiteditorfile.cpp +++ b/src/plugins/vcsbase/submiteditorfile.cpp @@ -67,15 +67,12 @@ Result<> SubmitEditorFile::saveImpl(const FilePath &filePath, bool autoSave) { FileSaver saver(filePath, QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text); saver.write(m_editor->fileContents()); - QString errorString; - if (!saver.finalize(&errorString)) - return ResultError(errorString); + if (const Result<> res = saver.finalize(); !res) + return res; if (autoSave) return ResultOk; setFilePath(filePath.absoluteFilePath()); setModified(false); - if (!errorString.isEmpty()) - return ResultError(errorString); emit changed(); return ResultOk; } diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp index 9fdf755cb04..362c7cb4d4e 100644 --- a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp +++ b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp @@ -530,8 +530,11 @@ bool VcsBaseSubmitEditor::runSubmitMessageCheckScript(const FilePath &checkScrip // Write out message TempFileSaver saver(TemporaryDirectory::masterDirectoryPath() + "/msgXXXXXX.txt"); saver.write(fileContents()); - if (!saver.finalize(errorMessage)) + if (const Result<> res = saver.finalize(); !res) { + if (errorMessage) + *errorMessage = res.error(); return false; + } // Run check process VcsOutputWindow::appendShellCommandLine(msgCheckScript(d->m_checkScriptWorkingDirectory, checkScript));