diff --git a/src/plugins/bineditor/bineditorplugin.cpp b/src/plugins/bineditor/bineditorplugin.cpp index 008f568de9d..d5ea0068e63 100644 --- a/src/plugins/bineditor/bineditorplugin.cpp +++ b/src/plugins/bineditor/bineditorplugin.cpp @@ -90,7 +90,7 @@ public: void setSizes(quint64 startAddr, qint64 range, int blockSize = 4096); QByteArray contents() const final { return dataMid(0, m_size); } - bool setContents(const QByteArray &contents) final; + Utils::Result<> setContents(const QByteArray &contents) final; ReloadBehavior reloadBehavior(ChangeTrigger state, ChangeType type) const final { @@ -2107,14 +2107,14 @@ BinEditorDocument::BinEditorDocument() m_newRangeRequestHandler = [this](quint64 offset) { provideNewRange(offset); }; } -bool BinEditorDocument::setContents(const QByteArray &contents) +Result<> BinEditorDocument::setContents(const QByteArray &contents) { clear(); if (!contents.isEmpty()) { setSizes(0, contents.length(), contents.length()); addData(0, contents); } - return true; + return ResultOk; } Result<> BinEditorDocument::openImpl(const FilePath &filePath, quint64 offset) diff --git a/src/plugins/compilerexplorer/compilerexplorereditor.cpp b/src/plugins/compilerexplorer/compilerexplorereditor.cpp index a5e9a483678..d3896fb2ae3 100644 --- a/src/plugins/compilerexplorer/compilerexplorereditor.cpp +++ b/src/plugins/compilerexplorer/compilerexplorereditor.cpp @@ -156,7 +156,7 @@ public: Result<> saveImpl(const Utils::FilePath &filePath, bool autoSave) override; - bool setContents(const QByteArray &contents) override; + Result<> setContents(const QByteArray &contents) override; QString fallbackSaveAsFileName() const override; @@ -418,7 +418,7 @@ Result<> JsonSettingsDocument::saveImpl(const FilePath &newFilePath, bool autoSa m_ceSettings.toMap(store); } - Utils::FilePath path = newFilePath.isEmpty() ? filePath() : newFilePath; + FilePath path = newFilePath.isEmpty() ? filePath() : newFilePath; if (!newFilePath.isEmpty() && !autoSave) { setPreferredDisplayName({}); @@ -438,17 +438,17 @@ bool JsonSettingsDocument::isModified() const return m_ceSettings.isDirty(); } -bool JsonSettingsDocument::setContents(const QByteArray &contents) +Result<> JsonSettingsDocument::setContents(const QByteArray &contents) { - auto result = storeFromJson(contents); - QTC_ASSERT_RESULT(result, return false); + Result result = storeFromJson(contents); + QTC_ASSERT_RESULT(result, return ResultError(result.error())); - m_ceSettings.fromMap(*result); + m_ceSettings.fromMap(result.value()); emit settingsChanged(); emit changed(); emit contentsChanged(); - return true; + return ResultOk; } QString JsonSettingsDocument::fallbackSaveAsFileName() const diff --git a/src/plugins/coreplugin/idocument.cpp b/src/plugins/coreplugin/idocument.cpp index 7e01baceda9..3d05ab25a7c 100644 --- a/src/plugins/coreplugin/idocument.cpp +++ b/src/plugins/coreplugin/idocument.cpp @@ -70,21 +70,6 @@ \ingroup mainclasses */ -/*! - \enum Core::Utils::Result<> - - The OpenResult enum describes whether a file was successfully opened. - - \value Success - The file was read successfully and can be handled by this document - type. - \value ReadError - The file could not be opened for reading, either because it does not - exist or because of missing permissions. - \value CannotHandle - This document type could not handle the file content. -*/ - /*! \enum Core::IDocument::ReloadSetting @@ -391,10 +376,10 @@ QByteArray IDocument::contents() const \sa contents() \sa EditorManager::openEditorWithContents() */ -bool IDocument::setContents(const QByteArray &contents) +Result<> IDocument::setContents(const QByteArray &contents) { Q_UNUSED(contents) - return false; + return ResultError(ResultUnimplemented); } /*! diff --git a/src/plugins/coreplugin/idocument.h b/src/plugins/coreplugin/idocument.h index a8a780c8192..b2c27af5476 100644 --- a/src/plugins/coreplugin/idocument.h +++ b/src/plugins/coreplugin/idocument.h @@ -65,7 +65,7 @@ public: Utils::Result<> save(const Utils::FilePath &filePath = {}, bool autoSave = false); virtual QByteArray contents() const; - virtual bool setContents(const QByteArray &contents); + virtual Utils::Result<> setContents(const QByteArray &contents); virtual void formatContents(); const Utils::FilePath &filePath() const; diff --git a/src/plugins/designer/formwindowfile.cpp b/src/plugins/designer/formwindowfile.cpp index 2b455542cc3..20e47bd758e 100644 --- a/src/plugins/designer/formwindowfile.cpp +++ b/src/plugins/designer/formwindowfile.cpp @@ -114,17 +114,17 @@ QByteArray FormWindowFile::contents() const return formWindowContents().toUtf8(); } -bool FormWindowFile::setContents(const QByteArray &contents) +Result<> FormWindowFile::setContents(const QByteArray &contents) { if (Designer::Constants::Internal::debug) qDebug() << Q_FUNC_INFO << contents.size(); document()->clear(); - QTC_ASSERT(m_formWindow, return false); + QTC_ASSERT(m_formWindow, return ResultError(ResultAssert)); if (contents.isEmpty()) - return false; + return ResultError(ResultAssert); // If we have an override cursor, reset it over Designer loading, // should it pop up messages about missing resources or such. @@ -141,11 +141,11 @@ bool FormWindowFile::setContents(const QByteArray &contents) QApplication::setOverrideCursor(overrideCursor); if (!success) - return false; + return ResultError(ResultAssert); syncXmlFromFormWindow(); setShouldAutoSave(false); - return true; + return ResultOk; } void FormWindowFile::setFilePath(const FilePath &newName) diff --git a/src/plugins/designer/formwindowfile.h b/src/plugins/designer/formwindowfile.h index 444676cb954..e244bf4c0e9 100644 --- a/src/plugins/designer/formwindowfile.h +++ b/src/plugins/designer/formwindowfile.h @@ -29,7 +29,7 @@ public: Utils::Result<> open(const Utils::FilePath &filePath, const Utils::FilePath &realFilePath) override; QByteArray contents() const override; - bool setContents(const QByteArray &contents) override; + Utils::Result<> setContents(const QByteArray &contents) override; bool shouldAutoSave() const override; bool isModified() const override; bool isSaveAsAllowed() const override; diff --git a/src/plugins/diffeditor/diffeditordocument.cpp b/src/plugins/diffeditor/diffeditordocument.cpp index bbb5ec1eee4..baf98cdbf74 100644 --- a/src/plugins/diffeditor/diffeditordocument.cpp +++ b/src/plugins/diffeditor/diffeditordocument.cpp @@ -208,10 +208,10 @@ bool DiffEditorDocument::ignoreWhitespace() const return m_ignoreWhitespace; } -bool DiffEditorDocument::setContents(const QByteArray &contents) +Result<> DiffEditorDocument::setContents(const QByteArray &contents) { Q_UNUSED(contents) - return true; + return ResultOk; } FilePath DiffEditorDocument::fallbackSaveAsPath() const diff --git a/src/plugins/diffeditor/diffeditordocument.h b/src/plugins/diffeditor/diffeditordocument.h index 1157993d01f..5eec8c940aa 100644 --- a/src/plugins/diffeditor/diffeditordocument.h +++ b/src/plugins/diffeditor/diffeditordocument.h @@ -55,7 +55,7 @@ public: void setIgnoreWhitespace(bool ignore); bool ignoreWhitespace() const; - bool setContents(const QByteArray &contents) override; + Utils::Result<> setContents(const QByteArray &contents) override; Utils::FilePath fallbackSaveAsPath() const override; QString fallbackSaveAsFileName() const override; diff --git a/src/plugins/perforce/perforcesubmiteditor.cpp b/src/plugins/perforce/perforcesubmiteditor.cpp index e066cb367e6..7e999fd384d 100644 --- a/src/plugins/perforce/perforcesubmiteditor.cpp +++ b/src/plugins/perforce/perforcesubmiteditor.cpp @@ -11,6 +11,8 @@ #include +using namespace Utils; + namespace Perforce::Internal { enum { FileSpecRole = Qt::UserRole + 1 }; @@ -38,12 +40,12 @@ QByteArray PerforceSubmitEditor::fileContents() const return text.toLocal8Bit(); } -bool PerforceSubmitEditor::setFileContents(const QByteArray &contents) +Result<> PerforceSubmitEditor::setFileContents(const QByteArray &contents) { if (!parseText(QString::fromUtf8(contents))) - return false; + return ResultError(ResultAssert); // FIXME: parseText always returns true, why? updateFields(); - return true; + return ResultOk; } bool PerforceSubmitEditor::parseText(QString text) diff --git a/src/plugins/perforce/perforcesubmiteditor.h b/src/plugins/perforce/perforcesubmiteditor.h index d3098df0531..3745c4e34a9 100644 --- a/src/plugins/perforce/perforcesubmiteditor.h +++ b/src/plugins/perforce/perforcesubmiteditor.h @@ -37,7 +37,7 @@ public: protected: QByteArray fileContents() const override; - bool setFileContents(const QByteArray &contents) override; + Utils::Result<> setFileContents(const QByteArray &contents) override; private: inline PerforceSubmitEditorWidget *submitEditorWidget(); diff --git a/src/plugins/resourceeditor/resourceeditor.cpp b/src/plugins/resourceeditor/resourceeditor.cpp index 2126c030f23..8d65b196ce5 100644 --- a/src/plugins/resourceeditor/resourceeditor.cpp +++ b/src/plugins/resourceeditor/resourceeditor.cpp @@ -51,7 +51,7 @@ public: Result<> open(const FilePath &filePath, const FilePath &realFilePath) final; QString plainText() const { return m_model.contents(); } QByteArray contents() const final { return m_model.contents().toUtf8(); } - bool setContents(const QByteArray &contents) final; + Result<> setContents(const QByteArray &contents) final; bool shouldAutoSave() const final { return m_shouldAutoSave; } bool isModified() const final { return m_model.dirty(); } bool isSaveAsAllowed() const final { return true; } @@ -236,22 +236,23 @@ Result<> ResourceEditorDocument::saveImpl(const FilePath &filePath, bool autoSav return ResultOk; } -bool ResourceEditorDocument::setContents(const QByteArray &contents) +Result<> ResourceEditorDocument::setContents(const QByteArray &contents) { TempFileSaver saver; saver.write(contents); if (!saver.finalize(ICore::dialogParent())) - return false; + return ResultError(saver.errorString()); const FilePath originalFileName = m_model.filePath(); m_model.setFilePath(saver.filePath()); - const bool success = (m_model.reload().has_value()); + const Result<> result = m_model.reload(); + const bool success = result.has_value(); m_model.setFilePath(originalFileName); m_shouldAutoSave = false; if (debugResourceEditorW) qDebug() << "ResourceEditorW::createNew: " << contents << " (" << saver.filePath() << ") returns " << success; emit loaded(success); - return success; + return result; } void ResourceEditorDocument::setFilePath(const FilePath &newName) diff --git a/src/plugins/squish/objectsmapdocument.cpp b/src/plugins/squish/objectsmapdocument.cpp index 3fb7d9052a7..dfe9b44611e 100644 --- a/src/plugins/squish/objectsmapdocument.cpp +++ b/src/plugins/squish/objectsmapdocument.cpp @@ -54,7 +54,7 @@ Result<> ObjectsMapDocument::saveImpl(const FilePath &filePath, bool autoSave) return ResultOk; } -Utils::FilePath ObjectsMapDocument::fallbackSaveAsPath() const +FilePath ObjectsMapDocument::fallbackSaveAsPath() const { return {}; } @@ -83,7 +83,7 @@ Result<> ObjectsMapDocument::reload(IDocument::ReloadFlag flag, IDocument::Chang return result; } -bool ObjectsMapDocument::buildObjectsMapTree(const QByteArray &contents) +Result<> ObjectsMapDocument::buildObjectsMapTree(const QByteArray &contents) { QMap itemForName; @@ -97,7 +97,7 @@ bool ObjectsMapDocument::buildObjectsMapTree(const QByteArray &contents) const QString objectName = QString::fromUtf8(line.left(tabPosition).trimmed()); if (!objectName.startsWith(ObjectsMapTreeItem::COLON)) { qDeleteAll(itemForName); - return false; + return ResultError(Tr::tr("Object name does not start with colon")); } ObjectsMapTreeItem *item = new ObjectsMapTreeItem(objectName, @@ -123,10 +123,10 @@ bool ObjectsMapDocument::buildObjectsMapTree(const QByteArray &contents) } m_contentModel->changeRootItem(root); - return true; + return ResultOk; } -bool ObjectsMapDocument::setContents(const QByteArray &contents) +Result<> ObjectsMapDocument::setContents(const QByteArray &contents) { return buildObjectsMapTree(contents); } diff --git a/src/plugins/squish/objectsmapdocument.h b/src/plugins/squish/objectsmapdocument.h index 6d057b53b94..f9e19e4f63b 100644 --- a/src/plugins/squish/objectsmapdocument.h +++ b/src/plugins/squish/objectsmapdocument.h @@ -28,7 +28,7 @@ public: Utils::Result<> reload(ReloadFlag flag, ChangeType type) override; bool shouldAutoSave() const override { return true; } - bool setContents(const QByteArray &contents) override; + Utils::Result<> setContents(const QByteArray &contents) override; QByteArray contents() const override; ObjectsMapModel *model() const { return m_contentModel; } @@ -38,7 +38,7 @@ protected: private: Utils::Result<> openImpl(const Utils::FilePath &fileName, const Utils::FilePath &realFileName); - bool buildObjectsMapTree(const QByteArray &contents); + Utils::Result<> buildObjectsMapTree(const QByteArray &contents); bool writeFile(const Utils::FilePath &fileName) const; void syncXMLFromEditor(); diff --git a/src/plugins/subversion/subversionsubmiteditor.cpp b/src/plugins/subversion/subversionsubmiteditor.cpp index b051076c4b7..61e4a5763ea 100644 --- a/src/plugins/subversion/subversionsubmiteditor.cpp +++ b/src/plugins/subversion/subversionsubmiteditor.cpp @@ -9,7 +9,9 @@ #include #include -using namespace Subversion::Internal; +using namespace Utils; + +namespace Subversion::Internal { SubversionSubmitEditor::SubversionSubmitEditor() : VcsBase::VcsBaseSubmitEditor(new VcsBase::SubmitEditorWidget) @@ -54,8 +56,10 @@ QByteArray SubversionSubmitEditor::fileContents() const return description().toUtf8(); } -bool SubversionSubmitEditor::setFileContents(const QByteArray &contents) +Result<> SubversionSubmitEditor::setFileContents(const QByteArray &contents) { setDescription(QString::fromUtf8(contents)); - return true; + return ResultOk; } + +} // namespace Subversion::Internal diff --git a/src/plugins/subversion/subversionsubmiteditor.h b/src/plugins/subversion/subversionsubmiteditor.h index 9c8e414dec2..8c77020acf0 100644 --- a/src/plugins/subversion/subversionsubmiteditor.h +++ b/src/plugins/subversion/subversionsubmiteditor.h @@ -7,8 +7,7 @@ #include -namespace Subversion { -namespace Internal { +namespace Subversion::Internal { class SubversionSubmitEditor : public VcsBase::VcsBaseSubmitEditor { @@ -24,8 +23,7 @@ public: void setStatusList(const QList &statusOutput); QByteArray fileContents() const override; - bool setFileContents(const QByteArray &contents) override; + Utils::Result<> setFileContents(const QByteArray &contents) override; }; -} // namespace Internal -} // namespace Subversion +} // namespace Subversion::Internal diff --git a/src/plugins/texteditor/textdocument.cpp b/src/plugins/texteditor/textdocument.cpp index 48ff564ab96..61911fed8af 100644 --- a/src/plugins/texteditor/textdocument.cpp +++ b/src/plugins/texteditor/textdocument.cpp @@ -719,7 +719,7 @@ QByteArray TextDocument::contents() const return plainText().toUtf8(); } -bool TextDocument::setContents(const QByteArray &contents) +Result<> TextDocument::setContents(const QByteArray &contents) { return setPlainText(QString::fromUtf8(contents)); } @@ -860,18 +860,18 @@ Result<> TextDocument::reload(const FilePath &realFilePath) return result; } -bool TextDocument::setPlainText(const QString &text) +Result<> TextDocument::setPlainText(const QString &text) { if (text.size() > EditorManager::maxTextFileSize()) { document()->setPlainText(TextEditorWidget::msgTextTooLarge(text.size())); d->resetRevisions(); document()->setModified(false); - return false; + return ResultError(TextEditorWidget::msgTextTooLarge(text.size())); } document()->setPlainText(text); d->resetRevisions(); document()->setModified(false); - return true; + return ResultOk; } Result<> TextDocument::reload(ReloadFlag flag, ChangeType type) diff --git a/src/plugins/texteditor/textdocument.h b/src/plugins/texteditor/textdocument.h index 0008935b355..2d6b0d9c556 100644 --- a/src/plugins/texteditor/textdocument.h +++ b/src/plugins/texteditor/textdocument.h @@ -102,7 +102,7 @@ public: // IDocument implementation. QByteArray contents() const override; - bool setContents(const QByteArray &contents) override; + Utils::Result<> setContents(const QByteArray &contents) override; void formatContents() override; bool shouldAutoSave() const override; bool isModified() const override; @@ -122,7 +122,7 @@ public: virtual Utils::Result<> reload(); Utils::Result<> reload(const Utils::FilePath &realFilePath); - bool setPlainText(const QString &text); + Utils::Result<> setPlainText(const QString &text); QTextDocument *document() const; using SyntaxHighLighterCreator = std::function; diff --git a/src/plugins/vcsbase/submiteditorfile.cpp b/src/plugins/vcsbase/submiteditorfile.cpp index c7f2acf3863..19904bc1900 100644 --- a/src/plugins/vcsbase/submiteditorfile.cpp +++ b/src/plugins/vcsbase/submiteditorfile.cpp @@ -50,7 +50,7 @@ QByteArray SubmitEditorFile::contents() const return m_editor->fileContents(); } -bool SubmitEditorFile::setContents(const QByteArray &contents) +Result<> SubmitEditorFile::setContents(const QByteArray &contents) { return m_editor->setFileContents(contents); } diff --git a/src/plugins/vcsbase/submiteditorfile.h b/src/plugins/vcsbase/submiteditorfile.h index 9ccfe3c16d6..ce1df2fbc4f 100644 --- a/src/plugins/vcsbase/submiteditorfile.h +++ b/src/plugins/vcsbase/submiteditorfile.h @@ -21,7 +21,7 @@ public: const Utils::FilePath &realFilePath) override; QByteArray contents() const override; - bool setContents(const QByteArray &contents) override; + Utils::Result<> setContents(const QByteArray &contents) override; bool isModified() const override { return m_modified; } ReloadBehavior reloadBehavior(ChangeTrigger state, ChangeType type) const override; diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp index 362c7cb4d4e..a5bab7a7c93 100644 --- a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp +++ b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp @@ -397,10 +397,10 @@ QByteArray VcsBaseSubmitEditor::fileContents() const return description().toLocal8Bit(); } -bool VcsBaseSubmitEditor::setFileContents(const QByteArray &contents) +Result<> VcsBaseSubmitEditor::setFileContents(const QByteArray &contents) { setDescription(QString::fromUtf8(contents)); - return true; + return ResultOk; } QString VcsBaseSubmitEditor::description() const diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.h b/src/plugins/vcsbase/vcsbasesubmiteditor.h index d9c0f9bf2c3..fb6e31f80c4 100644 --- a/src/plugins/vcsbase/vcsbasesubmiteditor.h +++ b/src/plugins/vcsbase/vcsbasesubmiteditor.h @@ -95,7 +95,7 @@ protected: * the file. The default implementation uses the text * of the description editor. */ virtual QByteArray fileContents() const; - virtual bool setFileContents(const QByteArray &contents); + virtual Utils::Result<> setFileContents(const QByteArray &contents); QString description() const; void setDescription(const QString &text);