diff --git a/src/plugins/projectexplorer/kitaspects.cpp b/src/plugins/projectexplorer/kitaspects.cpp index c7fe79debc4..f1f3365499e 100644 --- a/src/plugins/projectexplorer/kitaspects.cpp +++ b/src/plugins/projectexplorer/kitaspects.cpp @@ -330,6 +330,7 @@ class ToolChainKitAspectFactory : public KitAspectFactory public: ToolChainKitAspectFactory(); +private: Tasks validate(const Kit *k) const override; void upgrade(Kit *k) override; void fix(Kit *k) override; @@ -348,8 +349,8 @@ public: QList createOutputParsers(const Kit *k) const override; QSet availableFeatures(const Kit *k) const override; -private: - void kitsWereLoaded(); + void onKitsLoaded() override; + void toolChainUpdated(ToolChain *tc); void toolChainRemoved(ToolChain *tc); }; @@ -363,9 +364,6 @@ ToolChainKitAspectFactory::ToolChainKitAspectFactory() "Make sure the compiler will produce binaries compatible " "with the target device, Qt version and other libraries used.")); setPriority(30000); - - connect(KitManager::instance(), &KitManager::kitsLoaded, - this, &ToolChainKitAspectFactory::kitsWereLoaded); } // language id -> tool chain id @@ -765,10 +763,9 @@ QString ToolChainKitAspect::msgNoToolChainInTarget() return Tr::tr("No compiler set in kit."); } -void ToolChainKitAspectFactory::kitsWereLoaded() +void ToolChainKitAspectFactory::onKitsLoaded() { - const QList kits = KitManager::kits(); - for (Kit *k : kits) + for (Kit *k : KitManager::kits()) fix(k); connect(ToolChainManager::instance(), &ToolChainManager::toolChainRemoved, @@ -788,8 +785,7 @@ void ToolChainKitAspectFactory::toolChainUpdated(ToolChain *tc) void ToolChainKitAspectFactory::toolChainRemoved(ToolChain *tc) { Q_UNUSED(tc) - const QList kits = KitManager::kits(); - for (Kit *k : kits) + for (Kit *k : KitManager::kits()) fix(k); } @@ -1013,6 +1009,7 @@ class DeviceKitAspectFactory : public KitAspectFactory public: DeviceKitAspectFactory(); +private: Tasks validate(const Kit *k) const override; void fix(Kit *k) override; void setup(Kit *k) override; @@ -1025,10 +1022,9 @@ public: void addToMacroExpander(Kit *kit, MacroExpander *expander) const override; -private: QVariant defaultValue(const Kit *k) const; - void kitsWereLoaded(); + void onKitsLoaded() override; void deviceUpdated(Id dataId); void devicesChanged(); void kitUpdated(Kit *k); @@ -1041,9 +1037,6 @@ DeviceKitAspectFactory::DeviceKitAspectFactory() setDisplayName(Tr::tr("Run device")); setDescription(Tr::tr("The device to run the applications on.")); setPriority(32000); - - connect(KitManager::instance(), &KitManager::kitsLoaded, - this, &DeviceKitAspectFactory::kitsWereLoaded); } QVariant DeviceKitAspectFactory::defaultValue(const Kit *k) const @@ -1179,10 +1172,9 @@ FilePath DeviceKitAspect::deviceFilePath(const Kit *k, const QString &pathOnDevi return FilePath::fromString(pathOnDevice); } -void DeviceKitAspectFactory::kitsWereLoaded() +void DeviceKitAspectFactory::onKitsLoaded() { - const QList kits = KitManager::kits(); - for (Kit *k : kits) + for (Kit *k : KitManager::kits()) fix(k); DeviceManager *dm = DeviceManager::instance(); @@ -1199,8 +1191,7 @@ void DeviceKitAspectFactory::kitsWereLoaded() void DeviceKitAspectFactory::deviceUpdated(Id id) { - const QList kits = KitManager::kits(); - for (Kit *k : kits) { + for (Kit *k : KitManager::kits()) { if (DeviceKitAspect::deviceId(k) == id) notifyAboutUpdate(k); } @@ -1213,8 +1204,7 @@ void DeviceKitAspectFactory::kitUpdated(Kit *k) void DeviceKitAspectFactory::devicesChanged() { - const QList kits = KitManager::kits(); - for (Kit *k : kits) + for (Kit *k : KitManager::kits()) setup(k); // Set default device if necessary } @@ -1310,6 +1300,7 @@ class BuildDeviceKitAspectFactory : public KitAspectFactory public: BuildDeviceKitAspectFactory(); +private: void setup(Kit *k) override; Tasks validate(const Kit *k) const override; @@ -1321,8 +1312,7 @@ public: void addToMacroExpander(Kit *kit, MacroExpander *expander) const override; -private: - void kitsWereLoaded(); + void onKitsLoaded() override; void deviceUpdated(Id dataId); void devicesChanged(); void kitUpdated(Kit *k); @@ -1335,9 +1325,6 @@ BuildDeviceKitAspectFactory::BuildDeviceKitAspectFactory() setDisplayName(Tr::tr("Build device")); setDescription(Tr::tr("The device used to build applications on.")); setPriority(31900); - - connect(KitManager::instance(), &KitManager::kitsLoaded, - this, &BuildDeviceKitAspectFactory::kitsWereLoaded); } static IDeviceConstPtr defaultDevice() @@ -1444,10 +1431,9 @@ void BuildDeviceKitAspect::setDeviceId(Kit *k, Id id) k->setValue(BuildDeviceKitAspect::id(), id.toSetting()); } -void BuildDeviceKitAspectFactory::kitsWereLoaded() +void BuildDeviceKitAspectFactory::onKitsLoaded() { - const QList kits = KitManager::kits(); - for (Kit *k : kits) + for (Kit *k : KitManager::kits()) fix(k); DeviceManager *dm = DeviceManager::instance(); diff --git a/src/plugins/projectexplorer/kitmanager.cpp b/src/plugins/projectexplorer/kitmanager.cpp index 7f7658cf4cc..a147dd7f252 100644 --- a/src/plugins/projectexplorer/kitmanager.cpp +++ b/src/plugins/projectexplorer/kitmanager.cpp @@ -69,6 +69,12 @@ static FilePath settingsFileName() class KitAspectFactories { public: + void onKitsLoaded() const + { + for (KitAspectFactory *factory : m_aspectList) + factory->onKitsLoaded(); + } + void addKitAspect(KitAspectFactory *factory) { QTC_ASSERT(!m_aspectList.contains(factory), return); @@ -416,6 +422,9 @@ void KitManager::restoreKits() d->m_writer = std::make_unique(settingsFileName(), "QtCreatorProfiles"); d->m_initialized = true; + + kitAspectFactoriesStorage().onKitsLoaded(); + emit instance()->kitsLoaded(); emit instance()->kitsChanged(); } diff --git a/src/plugins/projectexplorer/kitmanager.h b/src/plugins/projectexplorer/kitmanager.h index bb5de22bf0f..c3774cfe79b 100644 --- a/src/plugins/projectexplorer/kitmanager.h +++ b/src/plugins/projectexplorer/kitmanager.h @@ -81,6 +81,8 @@ public: virtual bool isApplicableToKit(const Kit *) const { return true; } + virtual void onKitsLoaded() {} + protected: KitAspectFactory(); ~KitAspectFactory(); diff --git a/src/plugins/qtsupport/qtkitaspect.cpp b/src/plugins/qtsupport/qtkitaspect.cpp index 22ae3a0bd56..6f366844407 100644 --- a/src/plugins/qtsupport/qtkitaspect.cpp +++ b/src/plugins/qtsupport/qtkitaspect.cpp @@ -139,9 +139,6 @@ QtKitAspectFactory::QtKitAspectFactory() "A Qt version is required for qmake-based projects " "and optional when using other build systems.")); setPriority(26000); - - connect(KitManager::instance(), &KitManager::kitsLoaded, - this, &QtKitAspectFactory::kitsWereLoaded); } void QtKitAspectFactory::setup(Kit *k) @@ -399,7 +396,7 @@ void QtKitAspectFactory::qtVersionsChanged(const QList &addedIds, } } -void QtKitAspectFactory::kitsWereLoaded() +void QtKitAspectFactory::onKitsLoaded() { for (Kit *k : KitManager::kits()) fix(k); diff --git a/src/plugins/qtsupport/qtkitaspect.h b/src/plugins/qtsupport/qtkitaspect.h index 723a7c71aab..16d2ea65610 100644 --- a/src/plugins/qtsupport/qtkitaspect.h +++ b/src/plugins/qtsupport/qtkitaspect.h @@ -36,6 +36,7 @@ class QTSUPPORT_EXPORT QtKitAspectFactory : public ProjectExplorer::KitAspectFac public: QtKitAspectFactory(); +private: void setup(ProjectExplorer::Kit *k) override; ProjectExplorer::Tasks validate(const ProjectExplorer::Kit *k) const override; @@ -54,13 +55,12 @@ public: QSet supportedPlatforms(const ProjectExplorer::Kit *k) const override; QSet availableFeatures(const ProjectExplorer::Kit *k) const override; -private: int weight(const ProjectExplorer::Kit *k) const override; void qtVersionsChanged(const QList &addedIds, const QList &removedIds, const QList &changedIds); - void kitsWereLoaded(); + void onKitsLoaded() override; }; class QTSUPPORT_EXPORT SuppliesQtQuickImportPath