forked from qt-creator/qt-creator
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:
@@ -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
|
||||
|
@@ -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;
|
||||
|
@@ -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)
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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; }
|
||||
|
@@ -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()
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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,
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user