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());
|
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))
|
ClangToolChain::fromMap(data);
|
||||||
return false;
|
if (hasError())
|
||||||
return isValid();
|
return;
|
||||||
|
if (!isValid())
|
||||||
|
reportError();
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList AndroidToolChain::suggestedMkspecList() const
|
QStringList AndroidToolChain::suggestedMkspecList() const
|
||||||
|
@@ -22,7 +22,7 @@ public:
|
|||||||
|
|
||||||
QStringList suggestedMkspecList() const override;
|
QStringList suggestedMkspecList() const override;
|
||||||
Utils::FilePath makeCommand(const Utils::Environment &environment) 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);
|
void setNdkLocation(const Utils::FilePath &ndkLocation);
|
||||||
Utils::FilePath ndkLocation() const;
|
Utils::FilePath ndkLocation() const;
|
||||||
|
@@ -85,12 +85,12 @@ QString NimToolChain::compilerVersion() const
|
|||||||
std::get<2>(m_version));
|
std::get<2>(m_version));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool NimToolChain::fromMap(const QVariantMap &data)
|
void NimToolChain::fromMap(const QVariantMap &data)
|
||||||
{
|
{
|
||||||
if (!ToolChain::fromMap(data))
|
ToolChain::fromMap(data);
|
||||||
return false;
|
if (hasError())
|
||||||
|
return;
|
||||||
parseVersion(compilerCommand(), m_version);
|
parseVersion(compilerCommand(), m_version);
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool NimToolChain::parseVersion(const FilePath &path, std::tuple<int, int, int> &result)
|
bool NimToolChain::parseVersion(const FilePath &path, std::tuple<int, int, int> &result)
|
||||||
|
@@ -26,7 +26,7 @@ public:
|
|||||||
QList<Utils::OutputLineParser *> createOutputParsers() const final;
|
QList<Utils::OutputLineParser *> createOutputParsers() const final;
|
||||||
std::unique_ptr<ProjectExplorer::ToolChainConfigWidget> createConfigurationWidget() 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);
|
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());
|
data.insert(QLatin1String(outputParserKeyC), m_outputParserId.toSetting());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CustomToolChain::fromMap(const QVariantMap &data)
|
void CustomToolChain::fromMap(const QVariantMap &data)
|
||||||
{
|
{
|
||||||
if (!ToolChain::fromMap(data))
|
ToolChain::fromMap(data);
|
||||||
return false;
|
if (hasError())
|
||||||
|
return;
|
||||||
|
|
||||||
m_makeCommand = FilePath::fromString(data.value(QLatin1String(makeCommandKeyC)).toString());
|
m_makeCommand = FilePath::fromString(data.value(QLatin1String(makeCommandKeyC)).toString());
|
||||||
const QStringList macros = data.value(QLatin1String(predefinedMacrosKeyC)).toStringList();
|
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();
|
m_cxx11Flags = data.value(QLatin1String(cxx11FlagsKeyC)).toStringList();
|
||||||
setMkspecs(data.value(QLatin1String(mkspecsKeyC)).toString());
|
setMkspecs(data.value(QLatin1String(mkspecsKeyC)).toString());
|
||||||
setOutputParserId(Utils::Id::fromSetting(data.value(QLatin1String(outputParserKeyC))));
|
setOutputParserId(Utils::Id::fromSetting(data.value(QLatin1String(outputParserKeyC))));
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CustomToolChain::operator ==(const ToolChain &other) const
|
bool CustomToolChain::operator ==(const ToolChain &other) const
|
||||||
|
@@ -57,7 +57,7 @@ public:
|
|||||||
void setHeaderPaths(const QStringList &list);
|
void setHeaderPaths(const QStringList &list);
|
||||||
|
|
||||||
void toMap(QVariantMap &data) 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;
|
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));
|
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))
|
ToolChain::fromMap(data);
|
||||||
return false;
|
if (hasError())
|
||||||
|
return;
|
||||||
|
|
||||||
m_platformCodeGenFlags = data.value(compilerPlatformCodeGenFlagsKeyC).toStringList();
|
m_platformCodeGenFlags = data.value(compilerPlatformCodeGenFlagsKeyC).toStringList();
|
||||||
m_platformLinkerFlags = data.value(compilerPlatformLinkerFlagsKeyC).toStringList();
|
m_platformLinkerFlags = data.value(compilerPlatformLinkerFlagsKeyC).toStringList();
|
||||||
@@ -820,8 +821,6 @@ bool GccToolChain::fromMap(const QVariantMap &data)
|
|||||||
const QString targetAbiString = data.value(targetAbiKeyC).toString();
|
const QString targetAbiString = data.value(targetAbiKeyC).toString();
|
||||||
if (targetAbiString.isEmpty())
|
if (targetAbiString.isEmpty())
|
||||||
resetToolChain(compilerCommand());
|
resetToolChain(compilerCommand());
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GccToolChain::operator ==(const ToolChain &other) const
|
bool GccToolChain::operator ==(const ToolChain &other) const
|
||||||
@@ -1719,15 +1718,15 @@ void ClangToolChain::toMap(QVariantMap &data) const
|
|||||||
data.insert(priorityKeyC, m_priority);
|
data.insert(priorityKeyC, m_priority);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ClangToolChain::fromMap(const QVariantMap &data)
|
void ClangToolChain::fromMap(const QVariantMap &data)
|
||||||
{
|
{
|
||||||
if (!GccToolChain::fromMap(data))
|
GccToolChain::fromMap(data);
|
||||||
return false;
|
if (hasError())
|
||||||
|
return;
|
||||||
|
|
||||||
m_parentToolChainId = data.value(parentToolChainIdKeyC).toByteArray();
|
m_parentToolChainId = data.value(parentToolChainIdKeyC).toByteArray();
|
||||||
m_priority = data.value(priorityKeyC, PriorityNormal).toInt();
|
m_priority = data.value(priorityKeyC, PriorityNormal).toInt();
|
||||||
syncAutodetectedWithParentToolchains();
|
syncAutodetectedWithParentToolchains();
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
LanguageExtensions ClangToolChain::defaultLanguageExtensions() const
|
LanguageExtensions ClangToolChain::defaultLanguageExtensions() const
|
||||||
|
@@ -67,7 +67,7 @@ public:
|
|||||||
QList<Utils::OutputLineParser *> createOutputParsers() const override;
|
QList<Utils::OutputLineParser *> createOutputParsers() const override;
|
||||||
|
|
||||||
void toMap(QVariantMap &data) 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;
|
std::unique_ptr<ToolChainConfigWidget> createConfigurationWidget() override;
|
||||||
|
|
||||||
@@ -207,7 +207,7 @@ public:
|
|||||||
std::unique_ptr<ToolChainConfigWidget> createConfigurationWidget() override;
|
std::unique_ptr<ToolChainConfigWidget> createConfigurationWidget() override;
|
||||||
|
|
||||||
void toMap(QVariantMap &data) const 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; }
|
void setPriority(int priority) { m_priority = priority; }
|
||||||
int priority() const override { return m_priority; }
|
int priority() const override { return m_priority; }
|
||||||
|
@@ -989,11 +989,12 @@ void MsvcToolChain::toMap(QVariantMap &data) const
|
|||||||
Utils::EnvironmentItem::toVariantList(m_environmentModifications));
|
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);
|
g_availableMsvcToolchains.removeOne(this);
|
||||||
return false;
|
return;
|
||||||
}
|
}
|
||||||
m_vcvarsBat = QDir::fromNativeSeparators(data.value(QLatin1String(varsBatKeyC)).toString());
|
m_vcvarsBat = QDir::fromNativeSeparators(data.value(QLatin1String(varsBatKeyC)).toString());
|
||||||
m_varsBatArg = data.value(QLatin1String(varsBatArgKeyC)).toString();
|
m_varsBatArg = data.value(QLatin1String(varsBatArgKeyC)).toString();
|
||||||
@@ -1005,11 +1006,10 @@ bool MsvcToolChain::fromMap(const QVariantMap &data)
|
|||||||
initEnvModWatcher(Utils::asyncRun(envModThreadPool(), &MsvcToolChain::environmentModifications,
|
initEnvModWatcher(Utils::asyncRun(envModThreadPool(), &MsvcToolChain::environmentModifications,
|
||||||
m_vcvarsBat, m_varsBatArg));
|
m_vcvarsBat, m_varsBatArg));
|
||||||
|
|
||||||
const bool valid = !m_vcvarsBat.isEmpty() && targetAbi().isValid();
|
if (m_vcvarsBat.isEmpty() || !targetAbi().isValid()) {
|
||||||
if (!valid)
|
reportError();
|
||||||
g_availableMsvcToolchains.removeOne(this);
|
g_availableMsvcToolchains.removeOne(this);
|
||||||
|
}
|
||||||
return valid;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<ToolChainConfigWidget> MsvcToolChain::createConfigurationWidget()
|
std::unique_ptr<ToolChainConfigWidget> MsvcToolChain::createConfigurationWidget()
|
||||||
@@ -1733,16 +1733,19 @@ void ClangClToolChain::toMap(QVariantMap &data) const
|
|||||||
data.insert(llvmDirKey(), m_clangPath.toString());
|
data.insert(llvmDirKey(), m_clangPath.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ClangClToolChain::fromMap(const QVariantMap &data)
|
void ClangClToolChain::fromMap(const QVariantMap &data)
|
||||||
{
|
{
|
||||||
if (!MsvcToolChain::fromMap(data))
|
MsvcToolChain::fromMap(data);
|
||||||
return false;
|
if (hasError())
|
||||||
const QString clangPath = data.value(llvmDirKey()).toString();
|
return;
|
||||||
if (clangPath.isEmpty())
|
|
||||||
return false;
|
|
||||||
m_clangPath = FilePath::fromString(clangPath);
|
|
||||||
|
|
||||||
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()
|
std::unique_ptr<ToolChainConfigWidget> ClangClToolChain::createConfigurationWidget()
|
||||||
|
@@ -47,7 +47,7 @@ public:
|
|||||||
Abis supportedAbis() const override;
|
Abis supportedAbis() const override;
|
||||||
|
|
||||||
void toMap(QVariantMap &data) 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;
|
std::unique_ptr<ToolChainConfigWidget> createConfigurationWidget() override;
|
||||||
bool hostPrefersToolchain() const override;
|
bool hostPrefersToolchain() const override;
|
||||||
@@ -147,7 +147,7 @@ public:
|
|||||||
Utils::FilePath compilerCommand() const override; // FIXME: Remove
|
Utils::FilePath compilerCommand() const override; // FIXME: Remove
|
||||||
QList<Utils::OutputLineParser *> createOutputParsers() const override;
|
QList<Utils::OutputLineParser *> createOutputParsers() const override;
|
||||||
void toMap(QVariantMap &data) 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;
|
std::unique_ptr<ToolChainConfigWidget> createConfigurationWidget() override;
|
||||||
BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner(
|
BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner(
|
||||||
const Utils::Environment &env) const override;
|
const Utils::Environment &env) const override;
|
||||||
|
@@ -74,6 +74,7 @@ public:
|
|||||||
ToolChain::MacrosCache m_predefinedMacrosCache;
|
ToolChain::MacrosCache m_predefinedMacrosCache;
|
||||||
ToolChain::HeaderPathsCache m_headerPathsCache;
|
ToolChain::HeaderPathsCache m_headerPathsCache;
|
||||||
std::optional<bool> m_isValid;
|
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.
|
Make sure to call this function when deriving.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
bool ToolChain::fromMap(const QVariantMap &data)
|
void ToolChain::fromMap(const QVariantMap &data)
|
||||||
{
|
{
|
||||||
AspectContainer::fromMap(data);
|
AspectContainer::fromMap(data);
|
||||||
|
|
||||||
@@ -362,7 +363,7 @@ bool ToolChain::fromMap(const QVariantMap &data)
|
|||||||
// make sure we have new style ids:
|
// make sure we have new style ids:
|
||||||
const QString id = data.value(QLatin1String(ID_KEY)).toString();
|
const QString id = data.value(QLatin1String(ID_KEY)).toString();
|
||||||
int pos = id.indexOf(QLatin1Char(':'));
|
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_typeId = Id::fromString(id.left(pos));
|
||||||
d->m_id = id.mid(pos + 1).toUtf8();
|
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_compilerCommand = FilePath::fromSettings(data.value(d->m_compilerCommandKey));
|
||||||
d->m_isValid.reset();
|
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
|
const ToolChain::HeaderPathsCache &ToolChain::headerPathsCache() const
|
||||||
@@ -597,7 +606,8 @@ ToolChain *ToolChainFactory::restore(const QVariantMap &data)
|
|||||||
ToolChain *tc = m_toolchainConstructor();
|
ToolChain *tc = m_toolchainConstructor();
|
||||||
QTC_ASSERT(tc, return nullptr);
|
QTC_ASSERT(tc, return nullptr);
|
||||||
|
|
||||||
if (tc->fromMap(data))
|
tc->fromMap(data);
|
||||||
|
if (!tc->hasError())
|
||||||
return tc;
|
return tc;
|
||||||
|
|
||||||
delete tc;
|
delete tc;
|
||||||
|
@@ -182,7 +182,10 @@ protected:
|
|||||||
void toolChainUpdated();
|
void toolChainUpdated();
|
||||||
|
|
||||||
// Make sure to call this function when deriving!
|
// 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 };
|
enum class PossiblyConcatenatedFlag { No, Yes };
|
||||||
static Utils::FilePaths includedFiles(const QString &option,
|
static Utils::FilePaths includedFiles(const QString &option,
|
||||||
|
@@ -320,11 +320,10 @@ public:
|
|||||||
return static_cast<const TTC *>(&other)->token == token;
|
return static_cast<const TTC *>(&other)->token == token;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool fromMap(const QVariantMap &data) final
|
void fromMap(const QVariantMap &data) final
|
||||||
{
|
{
|
||||||
ToolChain::fromMap(data);
|
ToolChain::fromMap(data);
|
||||||
token = data.value(TestTokenKey).toByteArray();
|
token = data.value(TestTokenKey).toByteArray();
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void toMap(QVariantMap &data) const final
|
void toMap(QVariantMap &data) const final
|
||||||
|
Reference in New Issue
Block a user