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 <jaroslaw.kobus@qt.io>
This commit is contained in:
hjk
2023-07-21 19:15:02 +02:00
parent 678e8d3137
commit c558896594
13 changed files with 66 additions and 51 deletions

View File

@@ -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

View File

@@ -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;

View File

@@ -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<int, int, int> &result)

View File

@@ -26,7 +26,7 @@ public:
QList<Utils::OutputLineParser *> createOutputParsers() const final;
std::unique_ptr<ProjectExplorer::ToolChainConfigWidget> createConfigurationWidget() final;
bool fromMap(const QVariantMap &data) final;
void fromMap(const QVariantMap &data) final;
static bool parseVersion(const Utils::FilePath &path, std::tuple<int, int, int> &version);

View File

@@ -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

View File

@@ -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<ToolChainConfigWidget> createConfigurationWidget() override;

View File

@@ -804,10 +804,11 @@ void GccToolChain::toMap(QVariantMap &data) const
data.insert(supportedAbisKeyC, Utils::transform<QStringList>(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

View File

@@ -67,7 +67,7 @@ public:
QList<Utils::OutputLineParser *> createOutputParsers() const override;
void toMap(QVariantMap &data) const override;
bool fromMap(const QVariantMap &data) override;
void fromMap(const QVariantMap &data) override;
std::unique_ptr<ToolChainConfigWidget> createConfigurationWidget() override;
@@ -207,7 +207,7 @@ public:
std::unique_ptr<ToolChainConfigWidget> 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; }

View File

@@ -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<ToolChainConfigWidget> 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<ToolChainConfigWidget> ClangClToolChain::createConfigurationWidget()

View File

@@ -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<ToolChainConfigWidget> createConfigurationWidget() override;
bool hostPrefersToolchain() const override;
@@ -147,7 +147,7 @@ public:
Utils::FilePath compilerCommand() const override; // FIXME: Remove
QList<Utils::OutputLineParser *> createOutputParsers() const override;
void toMap(QVariantMap &data) const override;
bool fromMap(const QVariantMap &data) override;
void fromMap(const QVariantMap &data) override;
std::unique_ptr<ToolChainConfigWidget> createConfigurationWidget() override;
BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner(
const Utils::Environment &env) const override;

View File

@@ -74,6 +74,7 @@ public:
ToolChain::MacrosCache m_predefinedMacrosCache;
ToolChain::HeaderPathsCache m_headerPathsCache;
std::optional<bool> 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;

View File

@@ -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,

View File

@@ -320,11 +320,10 @@ public:
return static_cast<const TTC *>(&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