From c5588965945174196a6d25305b795e806d994aa7 Mon Sep 17 00:00:00 2001 From: hjk Date: Fri, 21 Jul 2023 19:15:02 +0200 Subject: [PATCH] ProjectExplorer: Replace the fromMap error return value for toolchains ... by some out-of-band mechanism, keeping previous functionality. The driving reason is to get the same fromMap signature as in the AspectContainer base. Change-Id: Ife7fbf4d0e0f78d88729021eb5220ec4a8ddb2ec Reviewed-by: Jarek Kobus --- src/plugins/android/androidtoolchain.cpp | 10 +++--- src/plugins/android/androidtoolchain.h | 2 +- src/plugins/nim/project/nimtoolchain.cpp | 8 ++--- src/plugins/nim/project/nimtoolchain.h | 2 +- .../projectexplorer/customtoolchain.cpp | 9 +++-- src/plugins/projectexplorer/customtoolchain.h | 2 +- src/plugins/projectexplorer/gcctoolchain.cpp | 17 +++++----- src/plugins/projectexplorer/gcctoolchain.h | 4 +-- src/plugins/projectexplorer/msvctoolchain.cpp | 33 ++++++++++--------- src/plugins/projectexplorer/msvctoolchain.h | 4 +-- src/plugins/projectexplorer/toolchain.cpp | 18 +++++++--- src/plugins/projectexplorer/toolchain.h | 5 ++- .../toolchainsettingsaccessor.cpp | 3 +- 13 files changed, 66 insertions(+), 51 deletions(-) diff --git a/src/plugins/android/androidtoolchain.cpp b/src/plugins/android/androidtoolchain.cpp index 7af3bb417b6..50a850aa192 100644 --- a/src/plugins/android/androidtoolchain.cpp +++ b/src/plugins/android/androidtoolchain.cpp @@ -101,11 +101,13 @@ void AndroidToolChain::addToEnvironment(Environment &env) const env.set(QLatin1String("ANDROID_SDK_ROOT"), config.sdkLocation().toUserOutput()); } -bool AndroidToolChain::fromMap(const QVariantMap &data) +void AndroidToolChain::fromMap(const QVariantMap &data) { - if (!ClangToolChain::fromMap(data)) - return false; - return isValid(); + ClangToolChain::fromMap(data); + if (hasError()) + return; + if (!isValid()) + reportError(); } QStringList AndroidToolChain::suggestedMkspecList() const diff --git a/src/plugins/android/androidtoolchain.h b/src/plugins/android/androidtoolchain.h index af4572c3cbd..707125391cb 100644 --- a/src/plugins/android/androidtoolchain.h +++ b/src/plugins/android/androidtoolchain.h @@ -22,7 +22,7 @@ public: QStringList suggestedMkspecList() const override; Utils::FilePath makeCommand(const Utils::Environment &environment) const override; - bool fromMap(const QVariantMap &data) override; + void fromMap(const QVariantMap &data) override; void setNdkLocation(const Utils::FilePath &ndkLocation); Utils::FilePath ndkLocation() const; diff --git a/src/plugins/nim/project/nimtoolchain.cpp b/src/plugins/nim/project/nimtoolchain.cpp index 21b441fa6ce..e04efeae8e3 100644 --- a/src/plugins/nim/project/nimtoolchain.cpp +++ b/src/plugins/nim/project/nimtoolchain.cpp @@ -85,12 +85,12 @@ QString NimToolChain::compilerVersion() const std::get<2>(m_version)); } -bool NimToolChain::fromMap(const QVariantMap &data) +void NimToolChain::fromMap(const QVariantMap &data) { - if (!ToolChain::fromMap(data)) - return false; + ToolChain::fromMap(data); + if (hasError()) + return; parseVersion(compilerCommand(), m_version); - return true; } bool NimToolChain::parseVersion(const FilePath &path, std::tuple &result) diff --git a/src/plugins/nim/project/nimtoolchain.h b/src/plugins/nim/project/nimtoolchain.h index a2f816a7f97..087f44cd2eb 100644 --- a/src/plugins/nim/project/nimtoolchain.h +++ b/src/plugins/nim/project/nimtoolchain.h @@ -26,7 +26,7 @@ public: QList createOutputParsers() const final; std::unique_ptr createConfigurationWidget() final; - bool fromMap(const QVariantMap &data) final; + void fromMap(const QVariantMap &data) final; static bool parseVersion(const Utils::FilePath &path, std::tuple &version); diff --git a/src/plugins/projectexplorer/customtoolchain.cpp b/src/plugins/projectexplorer/customtoolchain.cpp index c15ade15c08..9ad4551c57d 100644 --- a/src/plugins/projectexplorer/customtoolchain.cpp +++ b/src/plugins/projectexplorer/customtoolchain.cpp @@ -229,10 +229,11 @@ void CustomToolChain::toMap(QVariantMap &data) const data.insert(QLatin1String(outputParserKeyC), m_outputParserId.toSetting()); } -bool CustomToolChain::fromMap(const QVariantMap &data) +void CustomToolChain::fromMap(const QVariantMap &data) { - if (!ToolChain::fromMap(data)) - return false; + ToolChain::fromMap(data); + if (hasError()) + return; m_makeCommand = FilePath::fromString(data.value(QLatin1String(makeCommandKeyC)).toString()); const QStringList macros = data.value(QLatin1String(predefinedMacrosKeyC)).toStringList(); @@ -241,8 +242,6 @@ bool CustomToolChain::fromMap(const QVariantMap &data) m_cxx11Flags = data.value(QLatin1String(cxx11FlagsKeyC)).toStringList(); setMkspecs(data.value(QLatin1String(mkspecsKeyC)).toString()); setOutputParserId(Utils::Id::fromSetting(data.value(QLatin1String(outputParserKeyC)))); - - return true; } bool CustomToolChain::operator ==(const ToolChain &other) const diff --git a/src/plugins/projectexplorer/customtoolchain.h b/src/plugins/projectexplorer/customtoolchain.h index b01850a43cd..13a16139293 100644 --- a/src/plugins/projectexplorer/customtoolchain.h +++ b/src/plugins/projectexplorer/customtoolchain.h @@ -57,7 +57,7 @@ public: void setHeaderPaths(const QStringList &list); void toMap(QVariantMap &data) const override; - bool fromMap(const QVariantMap &data) override; + void fromMap(const QVariantMap &data) override; std::unique_ptr createConfigurationWidget() override; diff --git a/src/plugins/projectexplorer/gcctoolchain.cpp b/src/plugins/projectexplorer/gcctoolchain.cpp index c6f74d565b3..fa5d41a623f 100644 --- a/src/plugins/projectexplorer/gcctoolchain.cpp +++ b/src/plugins/projectexplorer/gcctoolchain.cpp @@ -804,10 +804,11 @@ void GccToolChain::toMap(QVariantMap &data) const data.insert(supportedAbisKeyC, Utils::transform(m_supportedAbis, &Abi::toString)); } -bool GccToolChain::fromMap(const QVariantMap &data) +void GccToolChain::fromMap(const QVariantMap &data) { - if (!ToolChain::fromMap(data)) - return false; + ToolChain::fromMap(data); + if (hasError()) + return; m_platformCodeGenFlags = data.value(compilerPlatformCodeGenFlagsKeyC).toStringList(); m_platformLinkerFlags = data.value(compilerPlatformLinkerFlagsKeyC).toStringList(); @@ -820,8 +821,6 @@ bool GccToolChain::fromMap(const QVariantMap &data) const QString targetAbiString = data.value(targetAbiKeyC).toString(); if (targetAbiString.isEmpty()) resetToolChain(compilerCommand()); - - return true; } bool GccToolChain::operator ==(const ToolChain &other) const @@ -1719,15 +1718,15 @@ void ClangToolChain::toMap(QVariantMap &data) const data.insert(priorityKeyC, m_priority); } -bool ClangToolChain::fromMap(const QVariantMap &data) +void ClangToolChain::fromMap(const QVariantMap &data) { - if (!GccToolChain::fromMap(data)) - return false; + GccToolChain::fromMap(data); + if (hasError()) + return; m_parentToolChainId = data.value(parentToolChainIdKeyC).toByteArray(); m_priority = data.value(priorityKeyC, PriorityNormal).toInt(); syncAutodetectedWithParentToolchains(); - return true; } LanguageExtensions ClangToolChain::defaultLanguageExtensions() const diff --git a/src/plugins/projectexplorer/gcctoolchain.h b/src/plugins/projectexplorer/gcctoolchain.h index 96ab49df3d2..389213d12f2 100644 --- a/src/plugins/projectexplorer/gcctoolchain.h +++ b/src/plugins/projectexplorer/gcctoolchain.h @@ -67,7 +67,7 @@ public: QList createOutputParsers() const override; void toMap(QVariantMap &data) const override; - bool fromMap(const QVariantMap &data) override; + void fromMap(const QVariantMap &data) override; std::unique_ptr createConfigurationWidget() override; @@ -207,7 +207,7 @@ public: std::unique_ptr createConfigurationWidget() override; void toMap(QVariantMap &data) const override; - bool fromMap(const QVariantMap &data) override; + void fromMap(const QVariantMap &data) override; void setPriority(int priority) { m_priority = priority; } int priority() const override { return m_priority; } diff --git a/src/plugins/projectexplorer/msvctoolchain.cpp b/src/plugins/projectexplorer/msvctoolchain.cpp index 095978bb91d..19aa8923d57 100644 --- a/src/plugins/projectexplorer/msvctoolchain.cpp +++ b/src/plugins/projectexplorer/msvctoolchain.cpp @@ -989,11 +989,12 @@ void MsvcToolChain::toMap(QVariantMap &data) const Utils::EnvironmentItem::toVariantList(m_environmentModifications)); } -bool MsvcToolChain::fromMap(const QVariantMap &data) +void MsvcToolChain::fromMap(const QVariantMap &data) { - if (!ToolChain::fromMap(data)) { + ToolChain::fromMap(data); + if (hasError()) { g_availableMsvcToolchains.removeOne(this); - return false; + return; } m_vcvarsBat = QDir::fromNativeSeparators(data.value(QLatin1String(varsBatKeyC)).toString()); m_varsBatArg = data.value(QLatin1String(varsBatArgKeyC)).toString(); @@ -1005,11 +1006,10 @@ bool MsvcToolChain::fromMap(const QVariantMap &data) initEnvModWatcher(Utils::asyncRun(envModThreadPool(), &MsvcToolChain::environmentModifications, m_vcvarsBat, m_varsBatArg)); - const bool valid = !m_vcvarsBat.isEmpty() && targetAbi().isValid(); - if (!valid) + if (m_vcvarsBat.isEmpty() || !targetAbi().isValid()) { + reportError(); g_availableMsvcToolchains.removeOne(this); - - return valid; + } } std::unique_ptr MsvcToolChain::createConfigurationWidget() @@ -1733,16 +1733,19 @@ void ClangClToolChain::toMap(QVariantMap &data) const data.insert(llvmDirKey(), m_clangPath.toString()); } -bool ClangClToolChain::fromMap(const QVariantMap &data) +void ClangClToolChain::fromMap(const QVariantMap &data) { - if (!MsvcToolChain::fromMap(data)) - return false; - const QString clangPath = data.value(llvmDirKey()).toString(); - if (clangPath.isEmpty()) - return false; - m_clangPath = FilePath::fromString(clangPath); + MsvcToolChain::fromMap(data); + if (hasError()) + return; - return true; + const QString clangPath = data.value(llvmDirKey()).toString(); + if (clangPath.isEmpty()) { + reportError(); + return; + } + + m_clangPath = FilePath::fromString(clangPath); } std::unique_ptr ClangClToolChain::createConfigurationWidget() diff --git a/src/plugins/projectexplorer/msvctoolchain.h b/src/plugins/projectexplorer/msvctoolchain.h index 77cd18a647a..9f0b867466a 100644 --- a/src/plugins/projectexplorer/msvctoolchain.h +++ b/src/plugins/projectexplorer/msvctoolchain.h @@ -47,7 +47,7 @@ public: Abis supportedAbis() const override; void toMap(QVariantMap &data) const override; - bool fromMap(const QVariantMap &data) override; + void fromMap(const QVariantMap &data) override; std::unique_ptr createConfigurationWidget() override; bool hostPrefersToolchain() const override; @@ -147,7 +147,7 @@ public: Utils::FilePath compilerCommand() const override; // FIXME: Remove QList createOutputParsers() const override; void toMap(QVariantMap &data) const override; - bool fromMap(const QVariantMap &data) override; + void fromMap(const QVariantMap &data) override; std::unique_ptr createConfigurationWidget() override; BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner( const Utils::Environment &env) const override; diff --git a/src/plugins/projectexplorer/toolchain.cpp b/src/plugins/projectexplorer/toolchain.cpp index aed69cea3c2..a41c749d002 100644 --- a/src/plugins/projectexplorer/toolchain.cpp +++ b/src/plugins/projectexplorer/toolchain.cpp @@ -74,6 +74,7 @@ public: ToolChain::MacrosCache m_predefinedMacrosCache; ToolChain::HeaderPathsCache m_headerPathsCache; std::optional m_isValid; + bool m_hasError = false; }; @@ -353,7 +354,7 @@ void ToolChain::setTypeDisplayName(const QString &typeName) Make sure to call this function when deriving. */ -bool ToolChain::fromMap(const QVariantMap &data) +void ToolChain::fromMap(const QVariantMap &data) { AspectContainer::fromMap(data); @@ -362,7 +363,7 @@ bool ToolChain::fromMap(const QVariantMap &data) // make sure we have new style ids: const QString id = data.value(QLatin1String(ID_KEY)).toString(); int pos = id.indexOf(QLatin1Char(':')); - QTC_ASSERT(pos > 0, return false); + QTC_ASSERT(pos > 0, reportError(); return); d->m_typeId = Id::fromString(id.left(pos)); d->m_id = id.mid(pos + 1).toUtf8(); @@ -393,8 +394,16 @@ bool ToolChain::fromMap(const QVariantMap &data) d->m_compilerCommand = FilePath::fromSettings(data.value(d->m_compilerCommandKey)); d->m_isValid.reset(); +} - return true; +void ToolChain::reportError() +{ + d->m_hasError = true; +} + +bool ToolChain::hasError() const +{ + return d->m_hasError; } const ToolChain::HeaderPathsCache &ToolChain::headerPathsCache() const @@ -597,7 +606,8 @@ ToolChain *ToolChainFactory::restore(const QVariantMap &data) ToolChain *tc = m_toolchainConstructor(); QTC_ASSERT(tc, return nullptr); - if (tc->fromMap(data)) + tc->fromMap(data); + if (!tc->hasError()) return tc; delete tc; diff --git a/src/plugins/projectexplorer/toolchain.h b/src/plugins/projectexplorer/toolchain.h index 66c9edd6614..337c10727b0 100644 --- a/src/plugins/projectexplorer/toolchain.h +++ b/src/plugins/projectexplorer/toolchain.h @@ -182,7 +182,10 @@ protected: void toolChainUpdated(); // Make sure to call this function when deriving! - virtual bool fromMap(const QVariantMap &data); + virtual void fromMap(const QVariantMap &data); + + void reportError(); + bool hasError() const; enum class PossiblyConcatenatedFlag { No, Yes }; static Utils::FilePaths includedFiles(const QString &option, diff --git a/src/plugins/projectexplorer/toolchainsettingsaccessor.cpp b/src/plugins/projectexplorer/toolchainsettingsaccessor.cpp index a001f509496..7c005f62956 100644 --- a/src/plugins/projectexplorer/toolchainsettingsaccessor.cpp +++ b/src/plugins/projectexplorer/toolchainsettingsaccessor.cpp @@ -320,11 +320,10 @@ public: return static_cast(&other)->token == token; } - bool fromMap(const QVariantMap &data) final + void fromMap(const QVariantMap &data) final { ToolChain::fromMap(data); token = data.value(TestTokenKey).toByteArray(); - return true; } void toMap(QVariantMap &data) const final