From a659cbc6808233ea17f788a3bd5fa6e1c2487ca1 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 9 May 2019 11:24:54 +0200 Subject: [PATCH] ProjectExplorer: Consolidate macro and header path cache handling All except Nim and the test tool chain were referencing the cache, so move it to the base. This removes also toolChainUpdated() overloads, including the MsvcToolChain one that missed to call the base implementation and the ClangClToolChain one that worked around that. Change-Id: I8a99734aa3c697c635809a3648673a10ca14a2d8 Reviewed-by: Denis Shienkov Reviewed-by: Nikolai Kosjar --- src/plugins/baremetal/iarewtoolchain.cpp | 27 +++++++------------ src/plugins/baremetal/iarewtoolchain.h | 10 ------- src/plugins/baremetal/keiltoolchain.cpp | 23 +++++----------- src/plugins/baremetal/keiltoolchain.h | 10 ------- src/plugins/baremetal/sdcctoolchain.cpp | 27 +++++++------------ src/plugins/baremetal/sdcctoolchain.h | 10 ------- src/plugins/projectexplorer/gcctoolchain.cpp | 23 +++++----------- src/plugins/projectexplorer/gcctoolchain.h | 7 +---- src/plugins/projectexplorer/msvctoolchain.cpp | 16 +---------- src/plugins/projectexplorer/msvctoolchain.h | 7 ----- src/plugins/projectexplorer/toolchain.cpp | 20 +++++++++++++- src/plugins/projectexplorer/toolchain.h | 7 +++++ 12 files changed, 61 insertions(+), 126 deletions(-) diff --git a/src/plugins/baremetal/iarewtoolchain.cpp b/src/plugins/baremetal/iarewtoolchain.cpp index 565104be473..0525249dcf0 100644 --- a/src/plugins/baremetal/iarewtoolchain.cpp +++ b/src/plugins/baremetal/iarewtoolchain.cpp @@ -223,9 +223,7 @@ static QString buildDisplayName(Abi::Architecture arch, Core::Id language, // IarToolChain IarToolChain::IarToolChain(Detection d) : - ToolChain(Constants::IAREW_TOOLCHAIN_TYPEID, d), - m_predefinedMacrosCache(std::make_shared>()), - m_headerPathsCache(std::make_shared()) + ToolChain(Constants::IAREW_TOOLCHAIN_TYPEID, d) { } IarToolChain::IarToolChain(Core::Id language, Detection d) : @@ -265,9 +263,11 @@ ToolChain::MacroInspectionRunner IarToolChain::createMacroInspectionRunner() con const Utils::FileName compilerCommand = m_compilerCommand; const Core::Id lang = language(); - MacrosCache macrosCache = m_predefinedMacrosCache; + MacrosCache macrosCache = predefinedMacrosCache(); - return [env, compilerCommand, macrosCache, lang] + return [env, compilerCommand, + macrosCache, + lang] (const QStringList &flags) { Q_UNUSED(flags) @@ -303,16 +303,16 @@ ToolChain::BuiltInHeaderPathsRunner IarToolChain::createBuiltInHeaderPathsRunner const Utils::FileName compilerCommand = m_compilerCommand; const Core::Id languageId = language(); - HeaderPathsCachePtr headerPathsCache = m_headerPathsCache; + HeaderPathsCache headerPaths = headerPathsCache(); - return [env, compilerCommand, headerPathsCache, languageId](const QStringList &flags, + return [env, compilerCommand, headerPaths, languageId](const QStringList &flags, const QString &fileName, const QString &) { Q_UNUSED(flags) Q_UNUSED(fileName) const HeaderPaths paths = dumpHeaderPaths(compilerCommand, languageId, env.toStringList()); - headerPathsCache->insert({}, paths); + headerPaths->insert({}, paths); return paths; }; @@ -394,13 +394,6 @@ ToolChain *IarToolChain::clone() const return new IarToolChain(*this); } -void IarToolChain::toolChainUpdated() -{ - m_predefinedMacrosCache->invalidate(); - m_headerPathsCache->invalidate(); - ToolChain::toolChainUpdated(); -} - // IarToolChainFactory IarToolChainFactory::IarToolChainFactory() @@ -538,7 +531,7 @@ QList IarToolChainFactory::autoDetectToolchain( tc->setDisplayName(buildDisplayName(abi.architecture(), language, candidate.second)); const auto languageVersion = ToolChain::languageVersion(language, macros); - tc->m_predefinedMacrosCache->insert({}, {macros, languageVersion}); + tc->predefinedMacrosCache()->insert({}, {macros, languageVersion}); return {tc}; } @@ -580,7 +573,7 @@ void IarToolChainConfigWidget::applyImpl() return; const auto languageVersion = ToolChain::languageVersion(tc->language(), m_macros); - tc->m_predefinedMacrosCache->insert({}, {m_macros, languageVersion}); + tc->predefinedMacrosCache()->insert({}, {m_macros, languageVersion}); setFromToolchain(); } diff --git a/src/plugins/baremetal/iarewtoolchain.h b/src/plugins/baremetal/iarewtoolchain.h index 8107c03f237..06b93577a2d 100644 --- a/src/plugins/baremetal/iarewtoolchain.h +++ b/src/plugins/baremetal/iarewtoolchain.h @@ -27,7 +27,6 @@ #include #include -#include #include QT_BEGIN_NAMESPACE @@ -86,8 +85,6 @@ public: ToolChain *clone() const final; - void toolChainUpdated() final; - protected: IarToolChain(const IarToolChain &tc) = default; @@ -98,13 +95,6 @@ private: ProjectExplorer::Abi m_targetAbi; Utils::FileName m_compilerCommand; - using MacrosCache = std::shared_ptr>; - mutable MacrosCache m_predefinedMacrosCache; - - using HeaderPathsCache = ProjectExplorer::Cache; - using HeaderPathsCachePtr = std::shared_ptr; - mutable HeaderPathsCachePtr m_headerPathsCache; - friend class IarToolChainFactory; friend class IarToolChainConfigWidget; }; diff --git a/src/plugins/baremetal/keiltoolchain.cpp b/src/plugins/baremetal/keiltoolchain.cpp index fb7e37cfb37..755b25b25a7 100644 --- a/src/plugins/baremetal/keiltoolchain.cpp +++ b/src/plugins/baremetal/keiltoolchain.cpp @@ -240,9 +240,7 @@ static QString buildDisplayName(Abi::Architecture arch, Core::Id language, // KeilToolchain KeilToolchain::KeilToolchain(Detection d) : - ToolChain(Constants::KEIL_TOOLCHAIN_TYPEID, d), - m_predefinedMacrosCache(std::make_shared>()), - m_headerPathsCache(std::make_shared()) + ToolChain(Constants::KEIL_TOOLCHAIN_TYPEID, d) { } KeilToolchain::KeilToolchain(Core::Id language, Detection d) : @@ -282,7 +280,7 @@ ToolChain::MacroInspectionRunner KeilToolchain::createMacroInspectionRunner() co const Utils::FileName compilerCommand = m_compilerCommand; const Core::Id lang = language(); - MacrosCache macroCache = m_predefinedMacrosCache; + MacrosCache macroCache = predefinedMacrosCache(); return [env, compilerCommand, macroCache, lang] (const QStringList &flags) { @@ -316,15 +314,15 @@ ToolChain::BuiltInHeaderPathsRunner KeilToolchain::createBuiltInHeaderPathsRunne { const Utils::FileName compilerCommand = m_compilerCommand; - HeaderPathsCachePtr headerPathsCache = m_headerPathsCache; + HeaderPathsCache headerPaths = headerPathsCache(); return [compilerCommand, - headerPathsCache](const QStringList &flags, const QString &fileName, const QString &) { + headerPaths](const QStringList &flags, const QString &fileName, const QString &) { Q_UNUSED(flags) Q_UNUSED(fileName) const HeaderPaths paths = dumpHeaderPaths(compilerCommand); - headerPathsCache->insert({}, paths); + headerPaths->insert({}, paths); return paths; }; @@ -406,13 +404,6 @@ ToolChain *KeilToolchain::clone() const return new KeilToolchain(*this); } -void KeilToolchain::toolChainUpdated() -{ - m_predefinedMacrosCache->invalidate(); - m_headerPathsCache->invalidate(); - ToolChain::toolChainUpdated(); -} - // KeilToolchainFactory KeilToolchainFactory::KeilToolchainFactory() @@ -544,7 +535,7 @@ QList KeilToolchainFactory::autoDetectToolchain( tc->setDisplayName(buildDisplayName(abi.architecture(), language, candidate.second)); const auto languageVersion = ToolChain::languageVersion(language, macros); - tc->m_predefinedMacrosCache->insert({}, {macros, languageVersion}); + tc->predefinedMacrosCache()->insert({}, {macros, languageVersion}); return {tc}; } @@ -586,7 +577,7 @@ void KeilToolchainConfigWidget::applyImpl() return; const auto languageVersion = ToolChain::languageVersion(tc->language(), m_macros); - tc->m_predefinedMacrosCache->insert({}, {m_macros, languageVersion}); + tc->predefinedMacrosCache()->insert({}, {m_macros, languageVersion}); setFromToolchain(); } diff --git a/src/plugins/baremetal/keiltoolchain.h b/src/plugins/baremetal/keiltoolchain.h index fb497d7edf7..36f28900f65 100644 --- a/src/plugins/baremetal/keiltoolchain.h +++ b/src/plugins/baremetal/keiltoolchain.h @@ -27,7 +27,6 @@ #include #include -#include #include QT_BEGIN_NAMESPACE @@ -86,8 +85,6 @@ public: ToolChain *clone() const final; - void toolChainUpdated() final; - protected: KeilToolchain(const KeilToolchain &tc) = default; @@ -98,13 +95,6 @@ private: ProjectExplorer::Abi m_targetAbi; Utils::FileName m_compilerCommand; - using MacrosCache = std::shared_ptr>; - mutable MacrosCache m_predefinedMacrosCache; - - using HeaderPathsCache = ProjectExplorer::Cache; - using HeaderPathsCachePtr = std::shared_ptr; - mutable HeaderPathsCachePtr m_headerPathsCache; - friend class KeilToolchainFactory; friend class KeilToolchainConfigWidget; }; diff --git a/src/plugins/baremetal/sdcctoolchain.cpp b/src/plugins/baremetal/sdcctoolchain.cpp index c752a9b230a..493f8867875 100644 --- a/src/plugins/baremetal/sdcctoolchain.cpp +++ b/src/plugins/baremetal/sdcctoolchain.cpp @@ -217,9 +217,7 @@ static Utils::FileName compilerPathFromEnvironment(const QString &compilerName) // SdccToolChain SdccToolChain::SdccToolChain(Detection d) : - ToolChain(Constants::SDCC_TOOLCHAIN_TYPEID, d), - m_predefinedMacrosCache(std::make_shared>()), - m_headerPathsCache(std::make_shared()) + ToolChain(Constants::SDCC_TOOLCHAIN_TYPEID, d) { } SdccToolChain::SdccToolChain(Core::Id language, Detection d) : @@ -260,7 +258,7 @@ ToolChain::MacroInspectionRunner SdccToolChain::createMacroInspectionRunner() co const Core::Id lang = language(); const Abi abi = m_targetAbi; - MacrosCache macrosCache = m_predefinedMacrosCache; + MacrosCache macrosCache = predefinedMacrosCache(); return [env, compilerCommand, macrosCache, lang, abi] (const QStringList &flags) { @@ -300,16 +298,16 @@ ToolChain::BuiltInHeaderPathsRunner SdccToolChain::createBuiltInHeaderPathsRunne const Core::Id languageId = language(); const Abi abi = m_targetAbi; - HeaderPathsCachePtr headerPathsCache = m_headerPathsCache; + HeaderPathsCache headerPaths = headerPathsCache(); - return [env, compilerCommand, headerPathsCache, languageId, abi](const QStringList &flags, - const QString &fileName, - const QString &) { + return [env, compilerCommand, headerPaths, languageId, abi](const QStringList &flags, + const QString &fileName, + const QString &) { Q_UNUSED(flags) Q_UNUSED(fileName) const HeaderPaths paths = dumpHeaderPaths(compilerCommand, env.toStringList(), abi); - headerPathsCache->insert({}, paths); + headerPaths->insert({}, paths); return paths; }; @@ -391,13 +389,6 @@ ToolChain *SdccToolChain::clone() const return new SdccToolChain(*this); } -void SdccToolChain::toolChainUpdated() -{ - m_predefinedMacrosCache->invalidate(); - m_headerPathsCache->invalidate(); - ToolChain::toolChainUpdated(); -} - // SdccToolChainFactory SdccToolChainFactory::SdccToolChainFactory() @@ -519,7 +510,7 @@ QList SdccToolChainFactory::autoDetectToolchain( tc->setDisplayName(buildDisplayName(abi.architecture(), language, candidate.second)); const auto languageVersion = ToolChain::languageVersion(language, macros); - tc->m_predefinedMacrosCache->insert({}, {macros, languageVersion}); + tc->predefinedMacrosCache()->insert({}, {macros, languageVersion}); return {tc}; } @@ -561,7 +552,7 @@ void SdccToolChainConfigWidget::applyImpl() return; const auto languageVersion = ToolChain::languageVersion(tc->language(), m_macros); - tc->m_predefinedMacrosCache->insert({}, {m_macros, languageVersion}); + tc->predefinedMacrosCache()->insert({}, {m_macros, languageVersion}); setFromToolchain(); } diff --git a/src/plugins/baremetal/sdcctoolchain.h b/src/plugins/baremetal/sdcctoolchain.h index 4a7e35f012b..93cbcfab496 100644 --- a/src/plugins/baremetal/sdcctoolchain.h +++ b/src/plugins/baremetal/sdcctoolchain.h @@ -27,7 +27,6 @@ #include #include -#include #include QT_BEGIN_NAMESPACE @@ -86,8 +85,6 @@ public: ToolChain *clone() const final; - void toolChainUpdated() final; - protected: SdccToolChain(const SdccToolChain &tc) = default; @@ -98,13 +95,6 @@ private: ProjectExplorer::Abi m_targetAbi; Utils::FileName m_compilerCommand; - using MacrosCache = std::shared_ptr>; - mutable MacrosCache m_predefinedMacrosCache; - - using HeaderPathsCache = ProjectExplorer::Cache; - using HeaderPathsCachePtr = std::shared_ptr; - mutable HeaderPathsCachePtr m_headerPathsCache; - friend class SdccToolChainFactory; friend class SdccToolChainConfigWidget; }; diff --git a/src/plugins/projectexplorer/gcctoolchain.cpp b/src/plugins/projectexplorer/gcctoolchain.cpp index 692b8a072ed..38e21f4c8b5 100644 --- a/src/plugins/projectexplorer/gcctoolchain.cpp +++ b/src/plugins/projectexplorer/gcctoolchain.cpp @@ -167,13 +167,6 @@ HeaderPaths GccToolChain::gccHeaderPaths(const FileName &gcc, const QStringList return builtInHeaderPaths; } -void GccToolChain::toolChainUpdated() -{ - m_predefinedMacrosCache->invalidate(); - m_headerPathsCache->invalidate(); - ToolChain::toolChainUpdated(); -} - static QList guessGccAbi(const QString &m, const ProjectExplorer::Macros ¯os) { QList abiList; @@ -244,9 +237,7 @@ GccToolChain::GccToolChain(Detection d) : { } GccToolChain::GccToolChain(Core::Id typeId, Detection d) : - ToolChain(typeId, d), - m_headerPathsCache(std::make_shared>()), - m_predefinedMacrosCache(std::make_shared>()) + ToolChain(typeId, d) { } void GccToolChain::setCompilerCommand(const FileName &path) @@ -382,7 +373,7 @@ ToolChain::MacroInspectionRunner GccToolChain::createMacroInspectionRunner() con const QStringList platformCodeGenFlags = m_platformCodeGenFlags; OptionsReinterpreter reinterpretOptions = m_optionsReinterpreter; QTC_CHECK(reinterpretOptions); - std::shared_ptr> macroCache = m_predefinedMacrosCache; + MacrosCache macroCache = predefinedMacrosCache(); Core::Id lang = language(); // This runner must be thread-safe! @@ -573,7 +564,7 @@ HeaderPaths GccToolChain::builtInHeaderPaths(const Utils::Environment &env, const Utils::FileName &compilerCommand, const QStringList &platformCodeGenFlags, OptionsReinterpreter reinterpretOptions, - std::shared_ptr> headerCache, + HeaderPathsCache headerCache, Core::Id languageId, ExtraHeaderPathsFunction extraHeaderPathsFunction, const QStringList &flags, @@ -621,7 +612,7 @@ ToolChain::BuiltInHeaderPathsRunner GccToolChain::createBuiltInHeaderPathsRunner compilerCommand = m_compilerCommand, platformCodeGenFlags = m_platformCodeGenFlags, reinterpretOptions = m_optionsReinterpreter, - headerCache = m_headerPathsCache, + headerCache = headerPathsCache(), languageId = language(), extraHeaderPathsFunction = m_extraHeaderPathsFunction](const QStringList &flags, const QString &sysRoot, @@ -1064,7 +1055,7 @@ QList GccToolChainFactory::autoDetectToolChain(const FileName &comp return result; tc->setLanguage(language); - tc->m_predefinedMacrosCache + tc->predefinedMacrosCache() ->insert(QStringList(), ToolChain::MacroInspectionReport{macros, ToolChain::languageVersion(language, macros)}); @@ -1138,7 +1129,7 @@ void GccToolChainConfigWidget::applyImpl() if (m_macros.isEmpty()) return; - tc->m_predefinedMacrosCache + tc->predefinedMacrosCache() ->insert(tc->platformCodeGenFlags(), ToolChain::MacroInspectionReport{m_macros, ToolChain::languageVersion(tc->language(), @@ -1446,7 +1437,7 @@ ToolChain::BuiltInHeaderPathsRunner ClangToolChain::createBuiltInHeaderPathsRunn compilerCommand = m_compilerCommand, platformCodeGenFlags = m_platformCodeGenFlags, reinterpretOptions = m_optionsReinterpreter, - headerCache = m_headerPathsCache, + headerCache = headerPathsCache(), languageId = language(), extraHeaderPathsFunction = m_extraHeaderPathsFunction](const QStringList &flags, const QString &sysRoot, diff --git a/src/plugins/projectexplorer/gcctoolchain.h b/src/plugins/projectexplorer/gcctoolchain.h index 9161a6ea37c..facc0e32318 100644 --- a/src/plugins/projectexplorer/gcctoolchain.h +++ b/src/plugins/projectexplorer/gcctoolchain.h @@ -29,7 +29,6 @@ #include "projectexplorerconstants.h" #include "toolchain.h" -#include "toolchaincache.h" #include "abi.h" #include "headerpath.h" @@ -155,7 +154,7 @@ protected: const Utils::FileName &compilerCommand, const QStringList &platformCodeGenFlags, OptionsReinterpreter reinterpretOptions, - std::shared_ptr> headerCache, + HeaderPathsCache headerCache, Core::Id languageId, ExtraHeaderPathsFunction extraHeaderPathsFunction, const QStringList &flags, @@ -178,7 +177,6 @@ protected: bool m_doesEnable = false; bool m_triggered = false; }; - void toolChainUpdated() override; private: explicit GccToolChain(Detection d); @@ -196,7 +194,6 @@ protected: QStringList m_platformLinkerFlags; OptionsReinterpreter m_optionsReinterpreter = [](const QStringList &v) { return v; }; - mutable std::shared_ptr> m_headerPathsCache; mutable ExtraHeaderPathsFunction m_extraHeaderPathsFunction = [](HeaderPaths &) {}; private: @@ -206,8 +203,6 @@ private: mutable HeaderPaths m_headerPaths; mutable QString m_version; - mutable std::shared_ptr> m_predefinedMacrosCache; - friend class Internal::GccToolChainConfigWidget; friend class Internal::GccToolChainFactory; friend class ToolChainFactory; diff --git a/src/plugins/projectexplorer/msvctoolchain.cpp b/src/plugins/projectexplorer/msvctoolchain.cpp index db65595e3b6..427ef014a41 100644 --- a/src/plugins/projectexplorer/msvctoolchain.cpp +++ b/src/plugins/projectexplorer/msvctoolchain.cpp @@ -792,7 +792,6 @@ MsvcToolChain::MsvcToolChain(const MsvcToolChain &other) , m_headerPathsMutex(new QMutex) , m_environmentModifications(other.m_environmentModifications) , m_debuggerCommand(other.m_debuggerCommand) - , m_predefinedMacrosCache(other.m_predefinedMacrosCache) , m_lastEnvironment(other.m_lastEnvironment) , m_resultEnvironment(other.m_resultEnvironment) , m_abi(other.m_abi) @@ -833,7 +832,6 @@ MsvcToolChain::MsvcToolChain(Core::Id typeId, Detection d) : ToolChain(typeId, d) , m_headerPathsMutex(new QMutex) - , m_predefinedMacrosCache(std::make_shared>()) , m_lastEnvironment(Utils::Environment::systemEnvironment()) , m_abi(abi) , m_vcvarsBat(varsBat) @@ -854,7 +852,6 @@ MsvcToolChain::MsvcToolChain(Core::Id typeId, MsvcToolChain::MsvcToolChain(Core::Id typeId) : ToolChain(typeId, ManualDetection) - , m_predefinedMacrosCache(std::make_shared>()) , m_lastEnvironment(Utils::Environment::systemEnvironment()) {} @@ -877,11 +874,6 @@ void MsvcToolChain::inferWarningsForLevel(int warningLevel, WarningFlags &flags) flags |= WarningFlags::UnusedParams; } -void MsvcToolChain::toolChainUpdated() -{ - m_predefinedMacrosCache->invalidate(); -} - MsvcToolChain::MsvcToolChain() : MsvcToolChain(Constants::MSVC_TOOLCHAIN_TYPEID) {} @@ -1039,7 +1031,7 @@ ToolChain::MacroInspectionRunner MsvcToolChain::createMacroInspectionRunner() co { Utils::Environment env(m_lastEnvironment); addToEnvironment(env); - std::shared_ptr> macroCache = m_predefinedMacrosCache; + MacrosCache macroCache = predefinedMacrosCache(); const Core::Id lang = language(); // This runner must be thread-safe! @@ -1631,12 +1623,6 @@ Utils::LanguageVersion ClangClToolChain::msvcLanguageVersion(const QStringList & return MsvcToolChain::msvcLanguageVersion(cxxflags, language, macros); } -void ClangClToolChain::toolChainUpdated() -{ - MsvcToolChain::toolChainUpdated(); - ToolChain::toolChainUpdated(); -} - ClangClToolChain::BuiltInHeaderPathsRunner ClangClToolChain::createBuiltInHeaderPathsRunner() const { { diff --git a/src/plugins/projectexplorer/msvctoolchain.h b/src/plugins/projectexplorer/msvctoolchain.h index a6c08eaeeaf..dc74d8c4ebe 100644 --- a/src/plugins/projectexplorer/msvctoolchain.h +++ b/src/plugins/projectexplorer/msvctoolchain.h @@ -27,7 +27,6 @@ #include "abi.h" #include "toolchain.h" -#include "toolchaincache.h" #include "toolchainconfigwidget.h" #include @@ -136,7 +135,6 @@ protected: explicit MsvcToolChain(Core::Id typeId); static void inferWarningsForLevel(int warningLevel, WarningFlags &flags); - void toolChainUpdated() override; Utils::Environment readEnvironmentSetting(const Utils::Environment &env) const; // Function must be thread-safe! @@ -169,8 +167,6 @@ private: Utils::FileName m_debuggerCommand; - mutable std::shared_ptr> m_predefinedMacrosCache; - mutable Utils::Environment m_lastEnvironment; // Last checked 'incoming' environment. mutable Utils::Environment m_resultEnvironment; // Resulting environment for VC @@ -214,9 +210,6 @@ public: bool operator==(const ToolChain &) const override; -private: - void toolChainUpdated() override; - private: QString m_clangPath; }; diff --git a/src/plugins/projectexplorer/toolchain.cpp b/src/plugins/projectexplorer/toolchain.cpp index 212427417a3..74f62408574 100644 --- a/src/plugins/projectexplorer/toolchain.cpp +++ b/src/plugins/projectexplorer/toolchain.cpp @@ -58,7 +58,9 @@ public: explicit ToolChainPrivate(Core::Id typeId, Detection d) : m_id(QUuid::createUuid().toByteArray()), m_typeId(typeId), - m_detection(d) + m_detection(d), + m_predefinedMacrosCache(new ToolChain::MacrosCache::element_type()), + m_headerPathsCache(new ToolChain::HeaderPathsCache::element_type()) { QTC_ASSERT(m_typeId.isValid(), return); QTC_ASSERT(!m_typeId.toString().contains(QLatin1Char(':')), return); @@ -70,6 +72,9 @@ public: Core::Id m_typeId; Core::Id m_language; Detection m_detection; + + ToolChain::MacrosCache m_predefinedMacrosCache; + ToolChain::HeaderPathsCache m_headerPathsCache; }; @@ -236,6 +241,9 @@ QVariantMap ToolChain::toMap() const void ToolChain::toolChainUpdated() { + d->m_predefinedMacrosCache->invalidate(); + d->m_headerPathsCache->invalidate(); + ToolChainManager::notifyAboutUpdate(this); } @@ -286,6 +294,16 @@ bool ToolChain::fromMap(const QVariantMap &data) return true; } +const ToolChain::HeaderPathsCache &ToolChain::headerPathsCache() const +{ + return d->m_headerPathsCache; +} + +const ToolChain::MacrosCache &ToolChain::predefinedMacrosCache() const +{ + return d->m_predefinedMacrosCache; +} + static long toLanguageVersionAsLong(QByteArray dateAsByteArray) { dateAsByteArray.chop(1); // Strip 'L'. diff --git a/src/plugins/projectexplorer/toolchain.h b/src/plugins/projectexplorer/toolchain.h index 84d005ff3db..a352e685086 100644 --- a/src/plugins/projectexplorer/toolchain.h +++ b/src/plugins/projectexplorer/toolchain.h @@ -30,6 +30,7 @@ #include "headerpath.h" #include "projectmacro.h" +#include "toolchaincache.h" #include @@ -120,6 +121,9 @@ public: Utils::LanguageVersion languageVersion; }; + using MacrosCache = std::shared_ptr>; + using HeaderPathsCache = std::shared_ptr>; + // A MacroInspectionRunner is created in the ui thread and runs in another thread. using MacroInspectionRunner = std::function; virtual MacroInspectionRunner createMacroInspectionRunner() const = 0; @@ -160,6 +164,9 @@ protected: explicit ToolChain(Core::Id typeId, Detection d); explicit ToolChain(const ToolChain &); + const MacrosCache &predefinedMacrosCache() const; + const HeaderPathsCache &headerPathsCache() const; + virtual void toolChainUpdated(); // Make sure to call this function when deriving!