ProjectExplorer: Replace ToolChainFactory::canRestore

... by a member-based check.

Change-Id: Id7d19e488695e76ea17cf2d02c7b6eb2cd0246cc
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
hjk
2019-05-08 14:56:26 +02:00
parent e919a9f545
commit 78fd99f5d3
21 changed files with 36 additions and 99 deletions

View File

@@ -154,6 +154,7 @@ GccToolChain::DetectedAbisResult AndroidToolChain::detectSupportedAbis() const
AndroidToolChainFactory::AndroidToolChainFactory()
{
setDisplayName(tr("Android Clang"));
setSupportedToolChainType(Constants::ANDROID_TOOLCHAIN_ID);
}
QSet<Core::Id> Android::Internal::AndroidToolChainFactory::supportedLanguages() const
@@ -166,11 +167,6 @@ ToolChainList AndroidToolChainFactory::autoDetect(CToolChainList &alreadyKnown)
return autodetectToolChainsForNdk(alreadyKnown);
}
bool AndroidToolChainFactory::canRestore(const QVariantMap &data)
{
return typeIdFromMap(data) == Constants::ANDROID_TOOLCHAIN_ID;
}
ToolChain *AndroidToolChainFactory::restore(const QVariantMap &data)
{
auto tc = new AndroidToolChain();

View File

@@ -67,7 +67,6 @@ public:
QSet<Core::Id> supportedLanguages() const override;
ToolChainList autoDetect(CToolChainList &alreadyKnown) override;
bool canRestore(const QVariantMap &data) override;
ProjectExplorer::ToolChain *restore(const QVariantMap &data) override;
class AndroidToolChainInformation

View File

@@ -399,6 +399,7 @@ ToolChain *IarToolChain::clone() const
IarToolChainFactory::IarToolChainFactory()
{
setDisplayName(tr("IAREW"));
setSupportedToolChainType(Constants::IAREW_TOOLCHAIN_TYPEID);
}
QSet<Core::Id> IarToolChainFactory::supportedLanguages() const
@@ -473,11 +474,6 @@ ToolChain *IarToolChainFactory::create(Core::Id language)
return new IarToolChain(language, ToolChain::ManualDetection);
}
bool IarToolChainFactory::canRestore(const QVariantMap &data)
{
return typeIdFromMap(data) == Constants::IAREW_TOOLCHAIN_TYPEID;
}
ToolChain *IarToolChainFactory::restore(const QVariantMap &data)
{
const auto tc = new IarToolChain(ToolChain::ManualDetection);

View File

@@ -115,7 +115,6 @@ public:
bool canCreate() final;
ProjectExplorer::ToolChain *create(Core::Id language) final;
bool canRestore(const QVariantMap &data) final;
ProjectExplorer::ToolChain *restore(const QVariantMap &data) final;
private:

View File

@@ -409,6 +409,7 @@ ToolChain *KeilToolchain::clone() const
KeilToolchainFactory::KeilToolchainFactory()
{
setDisplayName(tr("KEIL"));
setSupportedToolChainType(Constants::KEIL_TOOLCHAIN_TYPEID);
}
QSet<Core::Id> KeilToolchainFactory::supportedLanguages() const
@@ -477,11 +478,6 @@ ToolChain *KeilToolchainFactory::create(Core::Id language)
return new KeilToolchain(language, ToolChain::ManualDetection);
}
bool KeilToolchainFactory::canRestore(const QVariantMap &data)
{
return typeIdFromMap(data) == Constants::KEIL_TOOLCHAIN_TYPEID;
}
ToolChain *KeilToolchainFactory::restore(const QVariantMap &data)
{
const auto tc = new KeilToolchain(ToolChain::ManualDetection);

View File

@@ -115,7 +115,6 @@ public:
bool canCreate() final;
ProjectExplorer::ToolChain *create(Core::Id language) final;
bool canRestore(const QVariantMap &data) final;
ProjectExplorer::ToolChain *restore(const QVariantMap &data) final;
private:

View File

@@ -394,6 +394,7 @@ ToolChain *SdccToolChain::clone() const
SdccToolChainFactory::SdccToolChainFactory()
{
setDisplayName(tr("SDCC"));
setSupportedToolChainType(Constants::SDCC_TOOLCHAIN_TYPEID);
}
QSet<Core::Id> SdccToolChainFactory::supportedLanguages() const
@@ -454,11 +455,6 @@ ToolChain *SdccToolChainFactory::create(Core::Id language)
return new SdccToolChain(language, ToolChain::ManualDetection);
}
bool SdccToolChainFactory::canRestore(const QVariantMap &data)
{
return typeIdFromMap(data) == Constants::SDCC_TOOLCHAIN_TYPEID;
}
ToolChain *SdccToolChainFactory::restore(const QVariantMap &data)
{
const auto tc = new SdccToolChain(ToolChain::ManualDetection);

View File

@@ -115,7 +115,6 @@ public:
bool canCreate() final;
ProjectExplorer::ToolChain *create(Core::Id language) final;
bool canRestore(const QVariantMap &data) final;
ProjectExplorer::ToolChain *restore(const QVariantMap &data) final;
private:

View File

@@ -43,6 +43,7 @@ namespace Nim {
NimToolChainFactory::NimToolChainFactory()
{
setDisplayName(tr("Nim"));
setSupportedToolChainType(Constants::C_NIMTOOLCHAIN_TYPEID);
}
bool NimToolChainFactory::canCreate()
@@ -59,11 +60,6 @@ ToolChain *NimToolChainFactory::create(Core::Id l)
return result;
}
bool NimToolChainFactory::canRestore(const QVariantMap &data)
{
return typeIdFromMap(data) == Constants::C_NIMTOOLCHAIN_TYPEID;
}
ToolChain *NimToolChainFactory::restore(const QVariantMap &data)
{
auto tc = new NimToolChain(ToolChain::AutoDetection);

View File

@@ -43,7 +43,6 @@ public:
bool canCreate() final;
ProjectExplorer::ToolChain *create(Core::Id l) final;
bool canRestore(const QVariantMap &data) final;
ProjectExplorer::ToolChain *restore(const QVariantMap &data) final;
QSet<Core::Id> supportedLanguages() const final;
QList<ProjectExplorer::ToolChain *> autoDetect(const QList<ProjectExplorer::ToolChain *> &alreadyKnown) final;

View File

@@ -425,6 +425,7 @@ namespace Internal {
CustomToolChainFactory::CustomToolChainFactory()
{
setDisplayName(tr("Custom"));
setSupportedToolChainType(Constants::CUSTOM_TOOLCHAIN_TYPEID);
}
QSet<Core::Id> CustomToolChainFactory::supportedLanguages() const
@@ -442,12 +443,6 @@ ToolChain *CustomToolChainFactory::create(Core::Id language)
return new CustomToolChain(language, ToolChain::ManualDetection);
}
// Used by the ToolChainManager to restore user-generated tool chains
bool CustomToolChainFactory::canRestore(const QVariantMap &data)
{
return typeIdFromMap(data) == Constants::CUSTOM_TOOLCHAIN_TYPEID;
}
ToolChain *CustomToolChainFactory::restore(const QVariantMap &data)
{
auto tc = new CustomToolChain(ToolChain::ManualDetection);

View File

@@ -149,8 +149,6 @@ public:
bool canCreate() override;
ToolChain *create(Core::Id language) override;
// Used by the ToolChainManager to restore user-generated tool chains
bool canRestore(const QVariantMap &data) override;
ToolChain *restore(const QVariantMap &data) override;
};

View File

@@ -875,6 +875,7 @@ QString GccToolChain::detectVersion() const
GccToolChainFactory::GccToolChainFactory()
{
setDisplayName(tr("GCC"));
setSupportedToolChainType(Constants::GCC_TOOLCHAIN_TYPEID);
}
QSet<Core::Id> GccToolChainFactory::supportedLanguages() const
@@ -923,12 +924,6 @@ QList<ToolChain *> GccToolChainFactory::autoDetect(const FileName &compilerPath,
return QList<ToolChain *>();
}
// Used by the ToolChainManager to restore user-generated tool chains
bool GccToolChainFactory::canRestore(const QVariantMap &data)
{
return typeIdFromMap(data) == Constants::GCC_TOOLCHAIN_TYPEID;
}
ToolChain *GccToolChainFactory::restore(const QVariantMap &data)
{
GccToolChain *tc = createToolChain(false);
@@ -1499,6 +1494,7 @@ ToolChain *ClangToolChain::clone() const
ClangToolChainFactory::ClangToolChainFactory()
{
setDisplayName(tr("Clang"));
setSupportedToolChainType(Constants::CLANG_TOOLCHAIN_TYPEID);
}
QSet<Core::Id> ClangToolChainFactory::supportedLanguages() const
@@ -1539,11 +1535,6 @@ QList<ToolChain *> ClangToolChainFactory::autoDetect(const FileName &compilerPat
return QList<ToolChain *>();
}
bool ClangToolChainFactory::canRestore(const QVariantMap &data)
{
return typeIdFromMap(data) == Constants::CLANG_TOOLCHAIN_TYPEID;
}
GccToolChain *ClangToolChainFactory::createToolChain(bool autoDetect)
{
return new ClangToolChain(autoDetect ? ToolChain::AutoDetection : ToolChain::ManualDetection);
@@ -1717,6 +1708,7 @@ ToolChain *MingwToolChain::clone() const
MingwToolChainFactory::MingwToolChainFactory()
{
setDisplayName(tr("MinGW"));
setSupportedToolChainType(Constants::MINGW_TOOLCHAIN_TYPEID);
}
QSet<Core::Id> MingwToolChainFactory::supportedLanguages() const
@@ -1753,11 +1745,6 @@ QList<ToolChain *> MingwToolChainFactory::autoDetect(const FileName &compilerPat
return QList<ToolChain *>();
}
bool MingwToolChainFactory::canRestore(const QVariantMap &data)
{
return typeIdFromMap(data) == Constants::MINGW_TOOLCHAIN_TYPEID;
}
GccToolChain *MingwToolChainFactory::createToolChain(bool autoDetect)
{
return new MingwToolChain(autoDetect ? ToolChain::AutoDetection : ToolChain::ManualDetection);
@@ -1821,6 +1808,7 @@ ToolChain *LinuxIccToolChain::clone() const
LinuxIccToolChainFactory::LinuxIccToolChainFactory()
{
setDisplayName(tr("Linux ICC"));
setSupportedToolChainType(Constants::LINUXICC_TOOLCHAIN_TYPEID);
}
QSet<Core::Id> LinuxIccToolChainFactory::supportedLanguages() const
@@ -1847,11 +1835,6 @@ QList<ToolChain *> LinuxIccToolChainFactory::autoDetect(const FileName &compiler
return {};
}
bool LinuxIccToolChainFactory::canRestore(const QVariantMap &data)
{
return typeIdFromMap(data) == Constants::LINUXICC_TOOLCHAIN_TYPEID;
}
GccToolChain *LinuxIccToolChainFactory::createToolChain(bool autoDetect)
{
return new LinuxIccToolChain(autoDetect ? ToolChain::AutoDetection : ToolChain::ManualDetection);

View File

@@ -61,7 +61,6 @@ public:
bool canCreate() override;
ToolChain *create(Core::Id language) override;
bool canRestore(const QVariantMap &data) override;
ToolChain *restore(const QVariantMap &data) override;
protected:
@@ -152,8 +151,6 @@ public:
QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown) override;
QList<ToolChain *> autoDetect(const Utils::FileName &compilerPath, const Core::Id &language) final;
bool canRestore(const QVariantMap &data) override;
protected:
GccToolChain *createToolChain(bool autoDetect) override;
};
@@ -173,8 +170,6 @@ public:
QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown) override;
QList<ToolChain *> autoDetect(const Utils::FileName &compilerPath, const Core::Id &language) final;
bool canRestore(const QVariantMap &data) override;
protected:
GccToolChain *createToolChain(bool autoDetect) override;
};
@@ -194,8 +189,6 @@ public:
QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown) override;
QList<ToolChain *> autoDetect(const Utils::FileName &compilerPath, const Core::Id &language) final;
bool canRestore(const QVariantMap &data) override;
protected:
GccToolChain *createToolChain(bool autoDetect) override;
};

View File

@@ -1640,6 +1640,7 @@ ClangClToolChain::BuiltInHeaderPathsRunner ClangClToolChain::createBuiltInHeader
MsvcToolChainFactory::MsvcToolChainFactory()
{
setDisplayName(tr("MSVC"));
setSupportedToolChainType(Constants::MSVC_TOOLCHAIN_TYPEID);
}
QSet<Core::Id> MsvcToolChainFactory::supportedLanguages() const
@@ -1819,6 +1820,7 @@ QList<ToolChain *> MsvcToolChainFactory::autoDetect(const QList<ToolChain *> &al
ClangClToolChainFactory::ClangClToolChainFactory()
{
setDisplayName(tr("clang-cl"));
setSupportedToolChainType(Constants::CLANG_CL_TOOLCHAIN_TYPEID);
}
bool ClangClToolChainFactory::canCreate()
@@ -1983,12 +1985,6 @@ Utils::optional<QString> MsvcToolChain::generateEnvironmentSettings(const Utils:
return Utils::nullopt;
}
bool MsvcToolChainFactory::canRestore(const QVariantMap &data)
{
const Core::Id id = typeIdFromMap(data);
return id == Constants::MSVC_TOOLCHAIN_TYPEID;
}
template<class ToolChainType>
ToolChainType *readFromMap(const QVariantMap &data)
{
@@ -2004,12 +2000,6 @@ ToolChain *MsvcToolChainFactory::restore(const QVariantMap &data)
return readFromMap<MsvcToolChain>(data);
}
bool ClangClToolChainFactory::canRestore(const QVariantMap &data)
{
const Core::Id id = typeIdFromMap(data);
return id == Constants::CLANG_CL_TOOLCHAIN_TYPEID;
}
ToolChain *ClangClToolChainFactory::restore(const QVariantMap &data)
{
return readFromMap<ClangClToolChain>(data);

View File

@@ -228,7 +228,6 @@ public:
QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown) override;
bool canRestore(const QVariantMap &data) override;
ToolChain *restore(const QVariantMap &data) override;
static QString vcVarsBatFor(const QString &basePath,
@@ -245,7 +244,6 @@ public:
QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown) override;
bool canRestore(const QVariantMap &data) override;
ToolChain *restore(const QVariantMap &data) override;
bool canCreate() override;

View File

@@ -449,11 +449,6 @@ ToolChain *ToolChainFactory::create(Core::Id l)
return nullptr;
}
bool ToolChainFactory::canRestore(const QVariantMap &)
{
return false;
}
ToolChain *ToolChainFactory::restore(const QVariantMap &)
{
return nullptr;
@@ -482,4 +477,14 @@ void ToolChainFactory::autoDetectionToMap(QVariantMap &data, bool detected)
data.insert(QLatin1String(AUTODETECT_KEY), detected);
}
Core::Id ToolChainFactory::supportedToolChainType() const
{
return m_supportedToolChainType;
}
void ToolChainFactory::setSupportedToolChainType(const Core::Id &supportedToolChain)
{
m_supportedToolChainType = supportedToolChain;
}
} // namespace ProjectExplorer

View File

@@ -192,6 +192,7 @@ public:
static const QList<ToolChainFactory *> allToolChainFactories();
QString displayName() const { return m_displayName; }
Core::Id supportedToolChainType() const;
virtual QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown);
virtual QList<ToolChain *> autoDetect(const Utils::FileName &compilerPath, const Core::Id &language);
@@ -199,7 +200,6 @@ public:
virtual bool canCreate();
virtual ToolChain *create(Core::Id l);
virtual bool canRestore(const QVariantMap &data);
virtual ToolChain *restore(const QVariantMap &data);
static QByteArray idFromMap(const QVariantMap &data);
@@ -210,6 +210,7 @@ public:
protected:
void setDisplayName(const QString &name) { m_displayName = name; }
void setSupportedToolChainType(const Core::Id &supportedToolChainType);
class Candidate {
public:
@@ -226,6 +227,7 @@ protected:
private:
QString m_displayName;
Core::Id m_supportedToolChainType;
};
} // namespace ProjectExplorer

View File

@@ -253,18 +253,21 @@ QList<ToolChain *> ToolChainSettingsAccessor::toolChains(const QVariantMap &data
const QVariantMap tcMap = data.value(key).toMap();
bool restored = false;
for (ToolChainFactory *f : factories) {
if (f->canRestore(tcMap)) {
if (ToolChain *tc = f->restore(tcMap)) {
result.append(tc);
restored = true;
break;
const Core::Id tcType = ToolChainFactory::typeIdFromMap(tcMap);
if (tcType.isValid()) {
for (ToolChainFactory *f : factories) {
if (f->supportedToolChainType() == tcType) {
if (ToolChain *tc = f->restore(tcMap)) {
result.append(tc);
restored = true;
break;
}
}
}
}
if (!restored)
qWarning("Warning: Unable to restore compiler type '%s' for tool chain %s.",
qPrintable(ToolChainFactory::typeIdFromMap(tcMap).toString()),
qPrintable(tcType.toString()),
qPrintable(QString::fromUtf8(ToolChainFactory::idFromMap(tcMap))));
}

View File

@@ -213,6 +213,7 @@ bool QnxToolChain::operator ==(const ToolChain &other) const
QnxToolChainFactory::QnxToolChainFactory()
{
setDisplayName(tr("QCC"));
setSupportedToolChainType(Constants::QNX_TOOLCHAIN_ID);
}
QList<ProjectExplorer::ToolChain *> QnxToolChainFactory::autoDetect(
@@ -231,11 +232,6 @@ QSet<Core::Id> QnxToolChainFactory::supportedLanguages() const
return {ProjectExplorer::Constants::CXX_LANGUAGE_ID};
}
bool QnxToolChainFactory::canRestore(const QVariantMap &data)
{
return typeIdFromMap(data) == Constants::QNX_TOOLCHAIN_ID;
}
ToolChain *QnxToolChainFactory::restore(const QVariantMap &data)
{
auto tc = new QnxToolChain(ToolChain::ManualDetection);

View File

@@ -78,7 +78,6 @@ public:
QSet<Core::Id> supportedLanguages() const override;
bool canRestore(const QVariantMap &data) override;
ProjectExplorer::ToolChain *restore(const QVariantMap &data) override;
bool canCreate() override;