ProjectExplorer: Drop Detection argument from ToolChain constructor

This was used wildly inconsistently. Use a setter instead in
circumstances where the context is reasonably clear.

The assumption is that this will always be done at some time in all
code paths.

Use a new 'Uninitialized' value to avoid triggering the first update.

Change-Id: I82c38cb9da3ccdbd8fbae8beefcbfa0e559ff794
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
hjk
2019-05-08 19:03:15 +02:00
parent 33c4dd8383
commit d116559cd8
25 changed files with 152 additions and 129 deletions

View File

@@ -225,19 +225,20 @@ ToolChainList AndroidToolChainFactory::autodetectToolChainsForNdk(CToolChainList
// for fromMap // for fromMap
AndroidToolChain::AndroidToolChain() AndroidToolChain::AndroidToolChain()
: ClangToolChain(Constants::ANDROID_TOOLCHAIN_ID, ToolChain::ManualDetection) : ClangToolChain(Constants::ANDROID_TOOLCHAIN_ID)
{ {
} }
AndroidToolChain::AndroidToolChain(const QString& target, Core::Id languageId) AndroidToolChain::AndroidToolChain(const QString& target, Core::Id languageId)
: ClangToolChain(Constants::ANDROID_TOOLCHAIN_ID, ToolChain::AutoDetection) : ClangToolChain(Constants::ANDROID_TOOLCHAIN_ID)
{ {
setOriginalTargetTriple(target); setOriginalTargetTriple(target);
setLanguage(languageId); setLanguage(languageId);
setTargetAbi(ClangTargets[target]); setTargetAbi(ClangTargets[target]);
setPlatformCodeGenFlags({"-target", target}); setPlatformCodeGenFlags({"-target", target});
setPlatformLinkerFlags({"-target", target}); setPlatformLinkerFlags({"-target", target});
setDetection(AutoDetection);
setDisplayName(QString::fromLatin1("Android Clang (%1, %2)") setDisplayName(QString::fromLatin1("Android Clang (%1, %2)")
.arg(ToolChainManager::displayNameOfLanguageId(languageId), .arg(ToolChainManager::displayNameOfLanguageId(languageId),
AndroidConfig::displayName(targetAbi()))); AndroidConfig::displayName(targetAbi())));

View File

@@ -225,8 +225,8 @@ static QString buildDisplayName(Abi::Architecture arch, Core::Id language,
// IarToolChain // IarToolChain
IarToolChain::IarToolChain(Detection d) : IarToolChain::IarToolChain() :
ToolChain(Constants::IAREW_TOOLCHAIN_TYPEID, d) ToolChain(Constants::IAREW_TOOLCHAIN_TYPEID)
{ } { }
QString IarToolChain::typeDisplayName() const QString IarToolChain::typeDisplayName() const
@@ -466,12 +466,12 @@ bool IarToolChainFactory::canCreate()
ToolChain *IarToolChainFactory::create() ToolChain *IarToolChainFactory::create()
{ {
return new IarToolChain(ToolChain::ManualDetection); return new IarToolChain;
} }
ToolChain *IarToolChainFactory::restore(const QVariantMap &data) ToolChain *IarToolChainFactory::restore(const QVariantMap &data)
{ {
const auto tc = new IarToolChain(ToolChain::ManualDetection); const auto tc = new IarToolChain;
if (tc->fromMap(data)) if (tc->fromMap(data))
return tc; return tc;
@@ -516,7 +516,8 @@ QList<ToolChain *> IarToolChainFactory::autoDetectToolchain(
return {}; return {};
const Abi abi = guessAbi(macros); const Abi abi = guessAbi(macros);
const auto tc = new IarToolChain(ToolChain::AutoDetection); const auto tc = new IarToolChain;
tc->setDetection(ToolChain::AutoDetection);
tc->setLanguage(languageId); tc->setLanguage(languageId);
tc->setCompilerCommand(candidate.compilerPath); tc->setCompilerCommand(candidate.compilerPath);
tc->setTargetAbi(abi); tc->setTargetAbi(abi);

View File

@@ -89,7 +89,7 @@ protected:
IarToolChain(const IarToolChain &tc) = default; IarToolChain(const IarToolChain &tc) = default;
private: private:
explicit IarToolChain(Detection d); IarToolChain();
ProjectExplorer::Abi m_targetAbi; ProjectExplorer::Abi m_targetAbi;
Utils::FileName m_compilerCommand; Utils::FileName m_compilerCommand;

View File

@@ -239,8 +239,8 @@ static QString buildDisplayName(Abi::Architecture arch, Core::Id language,
// KeilToolchain // KeilToolchain
KeilToolchain::KeilToolchain(Detection d) : KeilToolchain::KeilToolchain() :
ToolChain(Constants::KEIL_TOOLCHAIN_TYPEID, d) ToolChain(Constants::KEIL_TOOLCHAIN_TYPEID)
{ } { }
QString KeilToolchain::typeDisplayName() const QString KeilToolchain::typeDisplayName() const
@@ -465,12 +465,12 @@ bool KeilToolchainFactory::canCreate()
ToolChain *KeilToolchainFactory::create() ToolChain *KeilToolchainFactory::create()
{ {
return new KeilToolchain(ToolChain::ManualDetection); return new KeilToolchain;
} }
ToolChain *KeilToolchainFactory::restore(const QVariantMap &data) ToolChain *KeilToolchainFactory::restore(const QVariantMap &data)
{ {
const auto tc = new KeilToolchain(ToolChain::ManualDetection); const auto tc = new KeilToolchain;
if (tc->fromMap(data)) if (tc->fromMap(data))
return tc; return tc;
@@ -521,7 +521,8 @@ QList<ToolChain *> KeilToolchainFactory::autoDetectToolchain(
return {}; return {};
} }
const auto tc = new KeilToolchain(ToolChain::AutoDetection); const auto tc = new KeilToolchain;
tc->setDetection(ToolChain::AutoDetection);
tc->setLanguage(language); tc->setLanguage(language);
tc->setCompilerCommand(candidate.compilerPath); tc->setCompilerCommand(candidate.compilerPath);
tc->setTargetAbi(abi); tc->setTargetAbi(abi);

View File

@@ -89,7 +89,7 @@ protected:
KeilToolchain(const KeilToolchain &tc) = default; KeilToolchain(const KeilToolchain &tc) = default;
private: private:
explicit KeilToolchain(Detection d); KeilToolchain();
ProjectExplorer::Abi m_targetAbi; ProjectExplorer::Abi m_targetAbi;
Utils::FileName m_compilerCommand; Utils::FileName m_compilerCommand;

View File

@@ -216,8 +216,8 @@ static Utils::FileName compilerPathFromEnvironment(const QString &compilerName)
// SdccToolChain // SdccToolChain
SdccToolChain::SdccToolChain(Detection d) : SdccToolChain::SdccToolChain() :
ToolChain(Constants::SDCC_TOOLCHAIN_TYPEID, d) ToolChain(Constants::SDCC_TOOLCHAIN_TYPEID)
{ } { }
QString SdccToolChain::typeDisplayName() const QString SdccToolChain::typeDisplayName() const
@@ -442,12 +442,12 @@ bool SdccToolChainFactory::canCreate()
ToolChain *SdccToolChainFactory::create() ToolChain *SdccToolChainFactory::create()
{ {
return new SdccToolChain(ToolChain::ManualDetection); return new SdccToolChain;
} }
ToolChain *SdccToolChainFactory::restore(const QVariantMap &data) ToolChain *SdccToolChainFactory::restore(const QVariantMap &data)
{ {
const auto tc = new SdccToolChain(ToolChain::ManualDetection); const auto tc = new SdccToolChain;
if (tc->fromMap(data)) if (tc->fromMap(data))
return tc; return tc;
@@ -489,7 +489,8 @@ QList<ToolChain *> SdccToolChainFactory::autoDetectToolchain(
return {}; return {};
const Abi abi = guessAbi(macros); const Abi abi = guessAbi(macros);
const auto tc = new SdccToolChain(ToolChain::AutoDetection); const auto tc = new SdccToolChain;
tc->setDetection(ToolChain::AutoDetection);
tc->setLanguage(language); tc->setLanguage(language);
tc->setCompilerCommand(candidate.compilerPath); tc->setCompilerCommand(candidate.compilerPath);
tc->setTargetAbi(abi); tc->setTargetAbi(abi);

View File

@@ -89,7 +89,7 @@ protected:
SdccToolChain(const SdccToolChain &tc) = default; SdccToolChain(const SdccToolChain &tc) = default;
private: private:
explicit SdccToolChain(Detection d); SdccToolChain();
ProjectExplorer::Abi m_targetAbi; ProjectExplorer::Abi m_targetAbi;
Utils::FileName m_compilerCommand; Utils::FileName m_compilerCommand;

View File

@@ -586,7 +586,8 @@ static ClangToolChain *createToolChain(const XcodePlatform &platform,
&& l != Core::Id(ProjectExplorer::Constants::CXX_LANGUAGE_ID)) && l != Core::Id(ProjectExplorer::Constants::CXX_LANGUAGE_ID))
return nullptr; return nullptr;
auto toolChain = new ClangToolChain(ToolChain::AutoDetection); auto toolChain = new ClangToolChain;
toolChain->setDetection(ToolChain::AutoDetection);
toolChain->setLanguage(l); toolChain->setLanguage(l);
toolChain->setDisplayName(target.name); toolChain->setDisplayName(target.name);
toolChain->setPlatformCodeGenFlags(target.backendFlags); toolChain->setPlatformCodeGenFlags(target.backendFlags);

View File

@@ -39,12 +39,12 @@ using namespace Utils;
namespace Nim { namespace Nim {
NimToolChain::NimToolChain(ToolChain::Detection d) NimToolChain::NimToolChain()
: NimToolChain(Constants::C_NIMTOOLCHAIN_TYPEID, d) : NimToolChain(Constants::C_NIMTOOLCHAIN_TYPEID)
{} {}
NimToolChain::NimToolChain(Core::Id typeId, ToolChain::Detection d) NimToolChain::NimToolChain(Core::Id typeId)
: ToolChain(typeId, d) : ToolChain(typeId)
, m_compilerCommand(FileName()) , m_compilerCommand(FileName())
, m_version(std::make_tuple(-1,-1,-1)) , m_version(std::make_tuple(-1,-1,-1))
{ {
@@ -52,7 +52,7 @@ NimToolChain::NimToolChain(Core::Id typeId, ToolChain::Detection d)
} }
NimToolChain::NimToolChain(const NimToolChain &other) NimToolChain::NimToolChain(const NimToolChain &other)
: ToolChain(other.typeId(), other.detection()) : ToolChain(other.typeId())
, m_compilerCommand(other.m_compilerCommand) , m_compilerCommand(other.m_compilerCommand)
, m_version(other.m_version) , m_version(other.m_version)
{ {

View File

@@ -33,8 +33,8 @@ namespace Nim {
class NimToolChain : public ProjectExplorer::ToolChain class NimToolChain : public ProjectExplorer::ToolChain
{ {
public: public:
NimToolChain(Detection d); NimToolChain();
NimToolChain(Core::Id typeId, Detection d); explicit NimToolChain(Core::Id typeId);
QString typeDisplayName() const override; QString typeDisplayName() const override;
ProjectExplorer::Abi targetAbi() const override; ProjectExplorer::Abi targetAbi() const override;

View File

@@ -54,12 +54,12 @@ bool NimToolChainFactory::canCreate()
ToolChain *NimToolChainFactory::create() ToolChain *NimToolChainFactory::create()
{ {
return new NimToolChain(ToolChain::ManualDetection); return new NimToolChain;
} }
ToolChain *NimToolChainFactory::restore(const QVariantMap &data) ToolChain *NimToolChainFactory::restore(const QVariantMap &data)
{ {
auto tc = new NimToolChain(ToolChain::AutoDetection); auto tc = new NimToolChain;
if (tc->fromMap(data)) if (tc->fromMap(data))
return tc; return tc;
delete tc; delete tc;
@@ -83,7 +83,8 @@ QList<ToolChain *> NimToolChainFactory::autoDetect(const QList<ToolChain *> &alr
if (!result.empty()) if (!result.empty())
return result; return result;
auto tc = new NimToolChain(ToolChain::AutoDetection); auto tc = new NimToolChain;
tc->setDetection(ToolChain::AutoDetection);
tc->setCompilerCommand(compilerPath); tc->setCompilerCommand(compilerPath);
result.append(tc); result.append(tc);
return result; return result;
@@ -93,7 +94,8 @@ QList<ToolChain *> NimToolChainFactory::autoDetect(const FileName &compilerPath,
{ {
QList<ToolChain *> result; QList<ToolChain *> result;
if (language == Constants::C_NIMLANGUAGE_ID) { if (language == Constants::C_NIMLANGUAGE_ID) {
auto tc = new NimToolChain(ToolChain::ManualDetection); auto tc = new NimToolChain;
tc->setDetection(ToolChain::ManualDetection); // FIXME: sure?
tc->setCompilerCommand(compilerPath); tc->setCompilerCommand(compilerPath);
result.append(tc); result.append(tc);
} }

View File

@@ -81,8 +81,8 @@ static const char warningExampleKeyC[] = "ProjectExplorer.CustomToolChain.Warnin
// CustomToolChain // CustomToolChain
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
CustomToolChain::CustomToolChain(Detection d) : CustomToolChain::CustomToolChain() :
ToolChain(Constants::CUSTOM_TOOLCHAIN_TYPEID, d), ToolChain(Constants::CUSTOM_TOOLCHAIN_TYPEID),
m_outputParserId(GccParser::id()) m_outputParserId(GccParser::id())
{ } { }
@@ -430,12 +430,12 @@ bool CustomToolChainFactory::canCreate()
ToolChain *CustomToolChainFactory::create() ToolChain *CustomToolChainFactory::create()
{ {
return new CustomToolChain(ToolChain::ManualDetection); return new CustomToolChain;
} }
ToolChain *CustomToolChainFactory::restore(const QVariantMap &data) ToolChain *CustomToolChainFactory::restore(const QVariantMap &data)
{ {
auto tc = new CustomToolChain(ToolChain::ManualDetection); auto tc = new CustomToolChain;
if (tc->fromMap(data)) if (tc->fromMap(data))
return tc; return tc;

View File

@@ -117,7 +117,7 @@ protected:
CustomToolChain(const CustomToolChain &) = default; CustomToolChain(const CustomToolChain &) = default;
private: private:
explicit CustomToolChain(Detection d); CustomToolChain();
Utils::FileName m_compilerCommand; Utils::FileName m_compilerCommand;
Utils::FileName m_makeCommand; Utils::FileName m_makeCommand;

View File

@@ -232,12 +232,12 @@ static QString gccVersion(const FileName &path, const QStringList &env)
// GccToolChain // GccToolChain
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
GccToolChain::GccToolChain(Detection d) : GccToolChain::GccToolChain() :
GccToolChain(Constants::GCC_TOOLCHAIN_TYPEID, d) GccToolChain(Constants::GCC_TOOLCHAIN_TYPEID)
{ } { }
GccToolChain::GccToolChain(Core::Id typeId, Detection d) : GccToolChain::GccToolChain(Core::Id typeId) :
ToolChain(typeId, d) ToolChain(typeId)
{ } { }
void GccToolChain::setCompilerCommand(const FileName &path) void GccToolChain::setCompilerCommand(const FileName &path)
@@ -886,7 +886,7 @@ bool GccToolChainFactory::canCreate()
ToolChain *GccToolChainFactory::create() ToolChain *GccToolChainFactory::create()
{ {
return createToolChain(false); return createToolChain();
} }
QList<ToolChain *> GccToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown) QList<ToolChain *> GccToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown)
@@ -920,7 +920,7 @@ QList<ToolChain *> GccToolChainFactory::autoDetect(const FileName &compilerPath,
ToolChain *GccToolChainFactory::restore(const QVariantMap &data) ToolChain *GccToolChainFactory::restore(const QVariantMap &data)
{ {
GccToolChain *tc = createToolChain(false); GccToolChain *tc = createToolChain();
if (tc->fromMap(data)) if (tc->fromMap(data))
return tc; return tc;
@@ -928,9 +928,9 @@ ToolChain *GccToolChainFactory::restore(const QVariantMap &data)
return nullptr; return nullptr;
} }
GccToolChain *GccToolChainFactory::createToolChain(bool autoDetect) GccToolChain *GccToolChainFactory::createToolChain()
{ {
return new GccToolChain(autoDetect ? ToolChain::AutoDetection : ToolChain::ManualDetection); return new GccToolChain;
} }
Utils::FileName GccToolChainFactory::compilerPathFromEnvironment(const QString &compilerName) Utils::FileName GccToolChainFactory::compilerPathFromEnvironment(const QString &compilerName)
@@ -1039,11 +1039,12 @@ QList<ToolChain *> GccToolChainFactory::autoDetectToolChain(const FileName &comp
systemEnvironment.toStringList(), systemEnvironment.toStringList(),
macros); macros);
for (const Abi &abi : detectedAbis.supportedAbis) { for (const Abi &abi : detectedAbis.supportedAbis) {
std::unique_ptr<GccToolChain> tc(createToolChain(true)); std::unique_ptr<GccToolChain> tc(createToolChain());
if (!tc) if (!tc)
return result; return result;
tc->setLanguage(language); tc->setLanguage(language);
tc->setDetection(ToolChain::AutoDetection);
tc->predefinedMacrosCache() tc->predefinedMacrosCache()
->insert(QStringList(), ->insert(QStringList(),
ToolChain::MacroInspectionReport{macros, ToolChain::MacroInspectionReport{macros,
@@ -1296,14 +1297,14 @@ void ClangToolChain::syncAutodetectedWithParentToolchains()
}); });
} }
ClangToolChain::ClangToolChain(Detection d) : ClangToolChain::ClangToolChain() :
GccToolChain(Constants::CLANG_TOOLCHAIN_TYPEID, d) GccToolChain(Constants::CLANG_TOOLCHAIN_TYPEID)
{ {
syncAutodetectedWithParentToolchains(); syncAutodetectedWithParentToolchains();
} }
ClangToolChain::ClangToolChain(Core::Id typeId, ToolChain::Detection d) : ClangToolChain::ClangToolChain(Core::Id typeId) :
GccToolChain(typeId, d) GccToolChain(typeId)
{ {
syncAutodetectedWithParentToolchains(); syncAutodetectedWithParentToolchains();
} }
@@ -1524,9 +1525,9 @@ QList<ToolChain *> ClangToolChainFactory::autoDetect(const FileName &compilerPat
return QList<ToolChain *>(); return QList<ToolChain *>();
} }
GccToolChain *ClangToolChainFactory::createToolChain(bool autoDetect) GccToolChain *ClangToolChainFactory::createToolChain()
{ {
return new ClangToolChain(autoDetect ? ToolChain::AutoDetection : ToolChain::ManualDetection); return new ClangToolChain;
} }
ClangToolChainConfigWidget::ClangToolChainConfigWidget(ClangToolChain *tc) : ClangToolChainConfigWidget::ClangToolChainConfigWidget(ClangToolChain *tc) :
@@ -1645,8 +1646,8 @@ void ClangToolChainConfigWidget::makeReadOnlyImpl()
// MingwToolChain // MingwToolChain
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
MingwToolChain::MingwToolChain(Detection d) : MingwToolChain::MingwToolChain() :
GccToolChain(Constants::MINGW_TOOLCHAIN_TYPEID, d) GccToolChain(Constants::MINGW_TOOLCHAIN_TYPEID)
{ } { }
QString MingwToolChain::typeDisplayName() const QString MingwToolChain::typeDisplayName() const
@@ -1729,17 +1730,17 @@ QList<ToolChain *> MingwToolChainFactory::autoDetect(const FileName &compilerPat
return QList<ToolChain *>(); return QList<ToolChain *>();
} }
GccToolChain *MingwToolChainFactory::createToolChain(bool autoDetect) GccToolChain *MingwToolChainFactory::createToolChain()
{ {
return new MingwToolChain(autoDetect ? ToolChain::AutoDetection : ToolChain::ManualDetection); return new MingwToolChain;
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// LinuxIccToolChain // LinuxIccToolChain
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
LinuxIccToolChain::LinuxIccToolChain(Detection d) : LinuxIccToolChain::LinuxIccToolChain() :
GccToolChain(Constants::LINUXICC_TOOLCHAIN_TYPEID, d) GccToolChain(Constants::LINUXICC_TOOLCHAIN_TYPEID)
{ } { }
QString LinuxIccToolChain::typeDisplayName() const QString LinuxIccToolChain::typeDisplayName() const
@@ -1815,9 +1816,9 @@ QList<ToolChain *> LinuxIccToolChainFactory::autoDetect(const FileName &compiler
return {}; return {};
} }
GccToolChain *LinuxIccToolChainFactory::createToolChain(bool autoDetect) GccToolChain *LinuxIccToolChainFactory::createToolChain()
{ {
return new LinuxIccToolChain(autoDetect ? ToolChain::AutoDetection : ToolChain::ManualDetection); return new LinuxIccToolChain;
} }
GccToolChain::WarningFlagAdder::WarningFlagAdder(const QString &flag, WarningFlags &flags) : GccToolChain::WarningFlagAdder::WarningFlagAdder(const QString &flag, WarningFlags &flags) :

View File

@@ -67,7 +67,7 @@ inline const QStringList gccPredefinedMacrosOptions(Core::Id languageId)
class PROJECTEXPLORER_EXPORT GccToolChain : public ToolChain class PROJECTEXPLORER_EXPORT GccToolChain : public ToolChain
{ {
public: public:
GccToolChain(Core::Id typeId, Detection d); GccToolChain(Core::Id typeId);
QString typeDisplayName() const override; QString typeDisplayName() const override;
Abi targetAbi() const override; Abi targetAbi() const override;
QString originalTargetTriple() const override; QString originalTargetTriple() const override;
@@ -179,7 +179,7 @@ protected:
}; };
private: private:
explicit GccToolChain(Detection d); explicit GccToolChain();
void updateSupportedAbis() const; void updateSupportedAbis() const;
static QStringList gccPrepareArguments(const QStringList &flags, static QStringList gccPrepareArguments(const QStringList &flags,
@@ -215,8 +215,8 @@ private:
class PROJECTEXPLORER_EXPORT ClangToolChain : public GccToolChain class PROJECTEXPLORER_EXPORT ClangToolChain : public GccToolChain
{ {
public: public:
explicit ClangToolChain(Detection d); ClangToolChain();
ClangToolChain(Core::Id typeId, Detection d); explicit ClangToolChain(Core::Id typeId);
ClangToolChain(const ClangToolChain &other); ClangToolChain(const ClangToolChain &other);
~ClangToolChain() override; ~ClangToolChain() override;
QString typeDisplayName() const override; QString typeDisplayName() const override;
@@ -271,7 +271,7 @@ public:
Utils::FileNameList suggestedMkspecList() const override; Utils::FileNameList suggestedMkspecList() const override;
private: private:
explicit MingwToolChain(Detection d); MingwToolChain();
friend class Internal::MingwToolChainFactory; friend class Internal::MingwToolChainFactory;
friend class ToolChainFactory; friend class ToolChainFactory;
@@ -294,7 +294,7 @@ public:
Utils::FileNameList suggestedMkspecList() const override; Utils::FileNameList suggestedMkspecList() const override;
private: private:
explicit LinuxIccToolChain(Detection d); LinuxIccToolChain();
friend class Internal::LinuxIccToolChainFactory; friend class Internal::LinuxIccToolChainFactory;
friend class ToolChainFactory; friend class ToolChainFactory;

View File

@@ -63,7 +63,7 @@ public:
ToolChain *restore(const QVariantMap &data) override; ToolChain *restore(const QVariantMap &data) override;
protected: protected:
virtual GccToolChain *createToolChain(bool autoDetect); virtual GccToolChain *createToolChain();
Utils::FileName compilerPathFromEnvironment(const QString &compilerName); Utils::FileName compilerPathFromEnvironment(const QString &compilerName);
@@ -150,7 +150,7 @@ public:
QList<ToolChain *> autoDetect(const Utils::FileName &compilerPath, const Core::Id &language) final; QList<ToolChain *> autoDetect(const Utils::FileName &compilerPath, const Core::Id &language) final;
protected: protected:
GccToolChain *createToolChain(bool autoDetect) override; GccToolChain *createToolChain() override;
}; };
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
@@ -168,7 +168,7 @@ public:
QList<ToolChain *> autoDetect(const Utils::FileName &compilerPath, const Core::Id &language) final; QList<ToolChain *> autoDetect(const Utils::FileName &compilerPath, const Core::Id &language) final;
protected: protected:
GccToolChain *createToolChain(bool autoDetect) override; GccToolChain *createToolChain() override;
}; };
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
@@ -186,7 +186,7 @@ public:
QList<ToolChain *> autoDetect(const Utils::FileName &compilerPath, const Core::Id &language) final; QList<ToolChain *> autoDetect(const Utils::FileName &compilerPath, const Core::Id &language) final;
protected: protected:
GccToolChain *createToolChain(bool autoDetect) override; GccToolChain *createToolChain() override;
}; };
} // namespace Internal } // namespace Internal

View File

@@ -781,9 +781,8 @@ Utils::Environment MsvcToolChain::readEnvironmentSetting(const Utils::Environmen
MsvcToolChain::MsvcToolChain(const QString &name, MsvcToolChain::MsvcToolChain(const QString &name,
const Abi &abi, const Abi &abi,
const QString &varsBat, const QString &varsBat,
const QString &varsBatArg, const QString &varsBatArg)
Detection d) : MsvcToolChain(Constants::MSVC_TOOLCHAIN_TYPEID, name, abi, varsBat, varsBatArg)
: MsvcToolChain(Constants::MSVC_TOOLCHAIN_TYPEID, name, abi, varsBat, varsBatArg, d)
{} {}
MsvcToolChain::MsvcToolChain(const MsvcToolChain &other) MsvcToolChain::MsvcToolChain(const MsvcToolChain &other)
@@ -826,9 +825,8 @@ MsvcToolChain::MsvcToolChain(Core::Id typeId,
const QString &name, const QString &name,
const Abi &abi, const Abi &abi,
const QString &varsBat, const QString &varsBat,
const QString &varsBatArg, const QString &varsBatArg)
Detection d) : ToolChain(typeId)
: ToolChain(typeId, d)
, m_headerPathsMutex(new QMutex) , m_headerPathsMutex(new QMutex)
, m_lastEnvironment(Utils::Environment::systemEnvironment()) , m_lastEnvironment(Utils::Environment::systemEnvironment())
, m_abi(abi) , m_abi(abi)
@@ -848,8 +846,7 @@ MsvcToolChain::MsvcToolChain(Core::Id typeId,
} }
MsvcToolChain::MsvcToolChain(Core::Id typeId) MsvcToolChain::MsvcToolChain(Core::Id typeId)
: ToolChain(typeId, ManualDetection) : ToolChain(typeId)
, m_lastEnvironment(Utils::Environment::systemEnvironment())
{} {}
void MsvcToolChain::inferWarningsForLevel(int warningLevel, WarningFlags &flags) void MsvcToolChain::inferWarningsForLevel(int warningLevel, WarningFlags &flags)
@@ -1421,7 +1418,8 @@ static QList<ToolChain *> detectClangClToolChainInPath(const QString &clangClPat
clangClPath); clangClPath);
})); }));
if (!tc) { if (!tc) {
tc = new ClangClToolChain(name, clangClPath, ToolChain::AutoDetection); tc = new ClangClToolChain(name, clangClPath);
tc->setDetection(ToolChain::AutoDetection);
tc->setLanguage(language); tc->setLanguage(language);
tc->resetMsvcToolChain(toolChain); tc->resetMsvcToolChain(toolChain);
} }
@@ -1483,9 +1481,8 @@ void ClangClToolChainConfigWidget::makeReadOnlyImpl()
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
ClangClToolChain::ClangClToolChain(const QString &name, ClangClToolChain::ClangClToolChain(const QString &name,
const QString &clangPath, const QString &clangPath)
Detection d) : MsvcToolChain(Constants::CLANG_CL_TOOLCHAIN_TYPEID, name, Abi(), "", "")
: MsvcToolChain(Constants::CLANG_CL_TOOLCHAIN_TYPEID, name, Abi(), "", "", d)
, m_clangPath(clangPath) , m_clangPath(clangPath)
{} {}
@@ -1656,8 +1653,7 @@ static QList<ToolChain *> findOrCreateToolChain(const QList<ToolChain *> &alread
const QString &name, const QString &name,
const Abi &abi, const Abi &abi,
const QString &varsBat, const QString &varsBat,
const QString &varsBatArg, const QString &varsBatArg)
ToolChain::Detection d = ToolChain::ManualDetection)
{ {
QList<ToolChain *> res; QList<ToolChain *> res;
for (auto language : {Constants::C_LANGUAGE_ID, Constants::CXX_LANGUAGE_ID}) { for (auto language : {Constants::C_LANGUAGE_ID, Constants::CXX_LANGUAGE_ID}) {
@@ -1672,7 +1668,7 @@ static QList<ToolChain *> findOrCreateToolChain(const QList<ToolChain *> &alread
return mtc->varsBat() == varsBat && mtc->varsBatArg() == varsBatArg; return mtc->varsBat() == varsBat && mtc->varsBatArg() == varsBatArg;
}); });
if (!tc) { if (!tc) {
tc = new MsvcToolChain(name, abi, varsBat, varsBatArg, d); tc = new MsvcToolChain(name, abi, varsBat, varsBatArg);
tc->setLanguage(language); tc->setLanguage(language);
} }
res << tc; res << tc;
@@ -1712,8 +1708,8 @@ static void detectCppBuildTools2015(QList<ToolChain *> *list)
auto tc = new MsvcToolChain(name + QLatin1String(e.postFix), auto tc = new MsvcToolChain(name + QLatin1String(e.postFix),
abi, abi,
vcVarsBat, vcVarsBat,
QLatin1String(e.varsBatArg), QLatin1String(e.varsBatArg));
ToolChain::AutoDetection); tc->setDetection(ToolChain::AutoDetection);
tc->setLanguage(language); tc->setLanguage(language);
list->append(tc); list->append(tc);
} }
@@ -1761,8 +1757,7 @@ QList<ToolChain *> MsvcToolChainFactory::autoDetect(const QList<ToolChain *> &al
platform.first, platform.first,
sdkKey), sdkKey),
fi.absoluteFilePath(), fi.absoluteFilePath(),
"/" + platform.second, "/" + platform.second));
ToolChain::AutoDetection));
} }
// Make sure the default is front. // Make sure the default is front.
if (folder == defaultSdkPath) if (folder == defaultSdkPath)
@@ -1797,14 +1792,16 @@ QList<ToolChain *> MsvcToolChainFactory::autoDetect(const QList<ToolChain *> &al
generateDisplayName(i.vsName, MsvcToolChain::VS, platform), generateDisplayName(i.vsName, MsvcToolChain::VS, platform),
findAbiOfMsvc(MsvcToolChain::VS, platform, i.vsName), findAbiOfMsvc(MsvcToolChain::VS, platform, i.vsName),
i.vcVarsAll, i.vcVarsAll,
platformName(platform), platformName(platform)));
ToolChain::AutoDetection));
} }
} }
} }
detectCppBuildTools2015(&results); detectCppBuildTools2015(&results);
for (ToolChain *tc : results)
tc->setDetection(ToolChain::AutoDetection);
return results; return results;
} }
@@ -1862,7 +1859,7 @@ QList<ToolChain *> ClangClToolChainFactory::autoDetect(const QList<ToolChain *>
ToolChain *ClangClToolChainFactory::create() ToolChain *ClangClToolChainFactory::create()
{ {
return new ClangClToolChain("clang-cl", "", ToolChain::ManualDetection); return new ClangClToolChain("clang-cl", "");
} }
bool MsvcToolChain::operator==(const ToolChain &other) const bool MsvcToolChain::operator==(const ToolChain &other) const

View File

@@ -58,8 +58,7 @@ public:
explicit MsvcToolChain(const QString &name, explicit MsvcToolChain(const QString &name,
const Abi &abi, const Abi &abi,
const QString &varsBat, const QString &varsBat,
const QString &varsBatArg, const QString &varsBatArg);
Detection d = ManualDetection);
MsvcToolChain(const MsvcToolChain &other); MsvcToolChain(const MsvcToolChain &other);
MsvcToolChain(); MsvcToolChain();
~MsvcToolChain() override; ~MsvcToolChain() override;
@@ -127,8 +126,7 @@ protected:
const QString &name, const QString &name,
const Abi &abi, const Abi &abi,
const QString &varsBat, const QString &varsBat,
const QString &varsBatArg, const QString &varsBatArg);
Detection d);
explicit MsvcToolChain(Core::Id typeId); explicit MsvcToolChain(Core::Id typeId);
static void inferWarningsForLevel(int warningLevel, WarningFlags &flags); static void inferWarningsForLevel(int warningLevel, WarningFlags &flags);
@@ -179,7 +177,7 @@ protected:
class PROJECTEXPLORER_EXPORT ClangClToolChain : public MsvcToolChain class PROJECTEXPLORER_EXPORT ClangClToolChain : public MsvcToolChain
{ {
public: public:
ClangClToolChain(const QString &name, const QString &llvmDir, Detection d); ClangClToolChain(const QString &name, const QString &llvmDir);
ClangClToolChain(); ClangClToolChain();
bool isValid() const override; bool isValid() const override;

View File

@@ -55,10 +55,9 @@ class ToolChainPrivate
public: public:
using Detection = ToolChain::Detection; using Detection = ToolChain::Detection;
explicit ToolChainPrivate(Core::Id typeId, Detection d) : explicit ToolChainPrivate(Core::Id typeId) :
m_id(QUuid::createUuid().toByteArray()), m_id(QUuid::createUuid().toByteArray()),
m_typeId(typeId), m_typeId(typeId),
m_detection(d),
m_predefinedMacrosCache(new ToolChain::MacrosCache::element_type()), m_predefinedMacrosCache(new ToolChain::MacrosCache::element_type()),
m_headerPathsCache(new ToolChain::HeaderPathsCache::element_type()) m_headerPathsCache(new ToolChain::HeaderPathsCache::element_type())
{ {
@@ -71,7 +70,7 @@ public:
mutable QString m_displayName; mutable QString m_displayName;
Core::Id m_typeId; Core::Id m_typeId;
Core::Id m_language; Core::Id m_language;
Detection m_detection; Detection m_detection = ToolChain::UninitializedDetection;
ToolChain::MacrosCache m_predefinedMacrosCache; ToolChain::MacrosCache m_predefinedMacrosCache;
ToolChain::HeaderPathsCache m_headerPathsCache; ToolChain::HeaderPathsCache m_headerPathsCache;
@@ -121,16 +120,18 @@ QString languageId(Language l)
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
ToolChain::ToolChain(Core::Id typeId, Detection d) : ToolChain::ToolChain(Core::Id typeId) :
d(std::make_unique<Internal::ToolChainPrivate>(typeId, d)) d(std::make_unique<Internal::ToolChainPrivate>(typeId))
{ {
} }
ToolChain::ToolChain(const ToolChain &other) : ToolChain(other.d->m_typeId, ManualDetection) ToolChain::ToolChain(const ToolChain &other) : ToolChain(other.d->m_typeId)
{ {
d->m_language = other.d->m_language; d->m_language = other.d->m_language;
// leave the autodetection bit at false. // leave the autodetection bit at false. // FIXME: <- is this comment valid.
d->m_detection = ManualDetection;
d->m_displayName = QCoreApplication::translate("ProjectExplorer::ToolChain", "Clone of %1") d->m_displayName = QCoreApplication::translate("ProjectExplorer::ToolChain", "Clone of %1")
.arg(other.displayName()); .arg(other.displayName());
} }
@@ -246,8 +247,12 @@ void ToolChain::setDetection(ToolChain::Detection de)
{ {
if (d->m_detection == de) if (d->m_detection == de)
return; return;
d->m_detection = de; if (d->m_detection == ToolChain::UninitializedDetection) {
toolChainUpdated(); d->m_detection = de;
} else {
d->m_detection = de;
toolChainUpdated();
}
} }
/*! /*!

View File

@@ -84,6 +84,7 @@ public:
AutoDetection, AutoDetection,
AutoDetectionFromSettings, AutoDetectionFromSettings,
AutoDetectionFromSdk, AutoDetectionFromSdk,
UninitializedDetection,
}; };
using Predicate = std::function<bool(const ToolChain *)>; using Predicate = std::function<bool(const ToolChain *)>;
@@ -156,11 +157,13 @@ public:
virtual bool isJobCountSupported() const { return true; } virtual bool isJobCountSupported() const { return true; }
void setLanguage(Core::Id language); void setLanguage(Core::Id language);
void setDetection(Detection d);
static Utils::LanguageVersion cxxLanguageVersion(const QByteArray &cplusplusMacroValue); static Utils::LanguageVersion cxxLanguageVersion(const QByteArray &cplusplusMacroValue);
static Utils::LanguageVersion languageVersion(const Core::Id &language, const Macros &macros); static Utils::LanguageVersion languageVersion(const Core::Id &language, const Macros &macros);
protected: protected:
explicit ToolChain(Core::Id typeId, Detection d); explicit ToolChain(Core::Id typeId);
explicit ToolChain(const ToolChain &); explicit ToolChain(const ToolChain &);
const MacrosCache &predefinedMacrosCache() const; const MacrosCache &predefinedMacrosCache() const;
@@ -172,8 +175,6 @@ protected:
virtual bool fromMap(const QVariantMap &data); virtual bool fromMap(const QVariantMap &data);
private: private:
void setDetection(Detection d);
const std::unique_ptr<Internal::ToolChainPrivate> d; const std::unique_ptr<Internal::ToolChainPrivate> d;
friend class Internal::ToolChainSettingsAccessor; friend class Internal::ToolChainSettingsAccessor;

View File

@@ -513,6 +513,7 @@ void ToolChainOptionsWidget::createToolChain(ToolChainFactory *factory, const Co
if (!tc) if (!tc)
return; return;
tc->setDetection(ToolChain::ManualDetection);
tc->setLanguage(language); tc->setLanguage(language);
auto item = insertToolChain(tc, true); auto item = insertToolChain(tc, true);
@@ -526,11 +527,13 @@ void ToolChainOptionsWidget::cloneToolChain()
ToolChainTreeItem *current = currentTreeItem(); ToolChainTreeItem *current = currentTreeItem();
if (!current) if (!current)
return; return;
ToolChain *tc = current->toolChain->clone();
ToolChain *tc = current->toolChain->clone();
if (!tc) if (!tc)
return; return;
tc->setDetection(ToolChain::ManualDetection);
auto item = insertToolChain(tc, true); auto item = insertToolChain(tc, true);
m_toAddList.append(item); m_toAddList.append(item);

View File

@@ -295,8 +295,8 @@ using TCList = QList<ToolChain *>;
class TTC : public ToolChain class TTC : public ToolChain
{ {
public: public:
TTC(ToolChain::Detection d, const QByteArray &t, bool v = true) : TTC(const QByteArray &t, bool v = true) :
ToolChain("TestToolChainType", d), ToolChain("TestToolChainType"),
token(t), token(t),
m_valid(v) m_valid(v)
{ {
@@ -333,7 +333,7 @@ public:
private: private:
TTC(const TTC &other) : TTC(const TTC &other) :
ToolChain(other.typeId(), other.detection()), ToolChain(other.typeId()),
token(other.token) token(other.token)
{} {}
@@ -375,19 +375,29 @@ void ProjectExplorerPlugin::testToolChainMerging_data()
TTC *auto3i = nullptr; TTC *auto3i = nullptr;
if (!TTC::hasToolChains()) { if (!TTC::hasToolChains()) {
system1 = new TTC(ToolChain::AutoDetection, "system1"); Q_UNUSED(system1); system1 = new TTC("system1");
system1->setDetection(ToolChain::AutoDetection);
system1c = system1->clone(); Q_UNUSED(system1c); system1c = system1->clone(); Q_UNUSED(system1c);
system2 = new TTC(ToolChain::AutoDetection, "system2"); Q_UNUSED(system2); system2 = new TTC("system2");
system3i = new TTC(ToolChain::AutoDetection, "system3", false); Q_UNUSED(system3i); system2->setDetection(ToolChain::AutoDetection);
user1 = new TTC(ToolChain::ManualDetection, "user1"); Q_UNUSED(user1); system3i = new TTC("system3", false);
system3i->setDetection(ToolChain::AutoDetection);
user1 = new TTC("user1");
user1->setDetection(ToolChain::ManualDetection);
user1c = user1->clone(); Q_UNUSED(user1c); user1c = user1->clone(); Q_UNUSED(user1c);
user2 = new TTC(ToolChain::ManualDetection, "user2"); Q_UNUSED(user2); user2 = new TTC("user2");
user3i = new TTC(ToolChain::ManualDetection, "user3", false); Q_UNUSED(user3i); user2->setDetection(ToolChain::ManualDetection);
auto1 = new TTC(ToolChain::AutoDetectionFromSettings, "auto1"); Q_UNUSED(auto1); user3i = new TTC("user3", false);
user3i->setDetection(ToolChain::ManualDetection);
auto1 = new TTC("auto1");
auto1->setDetection(ToolChain::AutoDetectionFromSettings);
auto1c = auto1->clone(); Q_UNUSED(auto1c); auto1c = auto1->clone(); Q_UNUSED(auto1c);
auto1_2 = new TTC(ToolChain::AutoDetectionFromSettings, "auto1"); Q_UNUSED(auto1_2); auto1_2 = new TTC("auto1");
auto2 = new TTC(ToolChain::AutoDetectionFromSettings, "auto2"); Q_UNUSED(auto2); auto1_2->setDetection(ToolChain::AutoDetectionFromSettings);
auto3i = new TTC(ToolChain::AutoDetectionFromSettings, "auto3", false); Q_UNUSED(auto3i); auto2 = new TTC("auto2");
auto2->setDetection(ToolChain::AutoDetectionFromSettings);
auto3i = new TTC("auto3", false);
auto3i->setDetection(ToolChain::AutoDetectionFromSettings);
} }
QTest::newRow("no toolchains") QTest::newRow("no toolchains")

View File

@@ -265,7 +265,8 @@ QVariant QnxConfiguration::createDebugger(const Target &target)
QnxToolChain *QnxConfiguration::createToolChain(const Target &target) QnxToolChain *QnxConfiguration::createToolChain(const Target &target)
{ {
auto toolChain = new QnxToolChain(ToolChain::AutoDetection); auto toolChain = new QnxToolChain;
toolChain->setDetection(ToolChain::AutoDetection);
toolChain->setLanguage(ProjectExplorer::Constants::CXX_LANGUAGE_ID); toolChain->setLanguage(ProjectExplorer::Constants::CXX_LANGUAGE_ID);
toolChain->setTargetAbi(target.m_abi); toolChain->setTargetAbi(target.m_abi);
toolChain->setDisplayName( toolChain->setDisplayName(

View File

@@ -100,8 +100,8 @@ static QStringList reinterpretOptions(const QStringList &args)
return arguments; return arguments;
} }
QnxToolChain::QnxToolChain(ToolChain::Detection d) QnxToolChain::QnxToolChain()
: GccToolChain(Constants::QNX_TOOLCHAIN_ID, d) : GccToolChain(Constants::QNX_TOOLCHAIN_ID)
{ {
setOptionsReinterpreter(&reinterpretOptions); setOptionsReinterpreter(&reinterpretOptions);
} }
@@ -223,7 +223,7 @@ QList<ProjectExplorer::ToolChain *> QnxToolChainFactory::autoDetect(
ToolChain *QnxToolChainFactory::restore(const QVariantMap &data) ToolChain *QnxToolChainFactory::restore(const QVariantMap &data)
{ {
auto tc = new QnxToolChain(ToolChain::ManualDetection); auto tc = new QnxToolChain;
if (tc->fromMap(data)) if (tc->fromMap(data))
return tc; return tc;
@@ -238,7 +238,7 @@ bool QnxToolChainFactory::canCreate()
ToolChain *QnxToolChainFactory::create() ToolChain *QnxToolChainFactory::create()
{ {
return new QnxToolChain(ToolChain::ManualDetection); return new QnxToolChain;
} }
//--------------------------------------------------------------------------------- //---------------------------------------------------------------------------------

View File

@@ -34,7 +34,7 @@ namespace Internal {
class QnxToolChain : public ProjectExplorer::GccToolChain class QnxToolChain : public ProjectExplorer::GccToolChain
{ {
public: public:
explicit QnxToolChain(Detection d); QnxToolChain();
QString typeDisplayName() const override; QString typeDisplayName() const override;