diff --git a/src/plugins/qbsprojectmanager/qbsprofilemanager.cpp b/src/plugins/qbsprojectmanager/qbsprofilemanager.cpp index 2be00a1d9e2..ecab48bc4f9 100644 --- a/src/plugins/qbsprojectmanager/qbsprofilemanager.cpp +++ b/src/plugins/qbsprojectmanager/qbsprofilemanager.cpp @@ -89,21 +89,27 @@ QString toJSLiteral(const QVariant &val) return QString::fromLatin1("Unconvertible type %1").arg(QLatin1String(val.typeName())); } - -static QbsProfileManager *m_instance = nullptr; +static PropertyProvider &defaultPropertyProvider() +{ + static DefaultPropertyProvider theDefaultPropertyProvider; + return theDefaultPropertyProvider; +} static QString kitNameKeyInQbsSettings(const ProjectExplorer::Kit *kit) { return "preferences.qtcreator.kit." + kit->id().toString(); } -QbsProfileManager::QbsProfileManager() : m_defaultPropertyProvider(new DefaultPropertyProvider) +QbsProfileManager::QbsProfileManager() { - m_instance = this; - setObjectName(QLatin1String("QbsProjectManager")); - connect(ProjectExplorer::KitManager::instance(), &ProjectExplorer::KitManager::kitsLoaded, this, - [this] { m_kitsToBeSetupForQbs = ProjectExplorer::KitManager::kits(); } ); + + if (ProjectExplorer::KitManager::instance()->isLoaded()) { + m_kitsToBeSetupForQbs = ProjectExplorer::KitManager::kits(); + } else { + connect(ProjectExplorer::KitManager::instance(), &ProjectExplorer::KitManager::kitsLoaded, + this, [this] { m_kitsToBeSetupForQbs = ProjectExplorer::KitManager::kits(); } ); + } connect(ProjectExplorer::KitManager::instance(), &ProjectExplorer::KitManager::kitAdded, this, &QbsProfileManager::addProfileFromKit); connect(ProjectExplorer::KitManager::instance(), &ProjectExplorer::KitManager::kitUpdated, this, @@ -114,15 +120,12 @@ QbsProfileManager::QbsProfileManager() : m_defaultPropertyProvider(new DefaultPr this, &QbsProfileManager::updateAllProfiles); } -QbsProfileManager::~QbsProfileManager() -{ - delete m_defaultPropertyProvider; - m_instance = nullptr; -} +QbsProfileManager::~QbsProfileManager() = default; QbsProfileManager *QbsProfileManager::instance() { - return m_instance; + static QbsProfileManager theQbsProfileManager; + return &theQbsProfileManager; } QString QbsProfileManager::ensureProfileForKit(const ProjectExplorer::Kit *k) @@ -137,8 +140,8 @@ void QbsProfileManager::updateProfileIfNecessary(const ProjectExplorer::Kit *kit { // kit in list <=> profile update is necessary // Note that the const_cast is safe, as we do not call any non-const methods on the object. - if (m_instance->m_kitsToBeSetupForQbs.removeOne(const_cast(kit))) - m_instance->addProfileFromKit(kit); + if (instance()->m_kitsToBeSetupForQbs.removeOne(const_cast(kit))) + instance()->addProfileFromKit(kit); } void QbsProfileManager::updateAllProfiles() @@ -154,7 +157,7 @@ void QbsProfileManager::addProfileFromKit(const ProjectExplorer::Kit *k) runQbsConfig(QbsConfigOp::Set, kitNameKeyInQbsSettings(k), name); // set up properties: - QVariantMap data = m_defaultPropertyProvider->properties(k, QVariantMap()); + QVariantMap data = defaultPropertyProvider().properties(k, QVariantMap()); for (PropertyProvider *provider : std::as_const(g_propertyProviders)) { if (provider->canHandle(k)) data = provider->properties(k, data); diff --git a/src/plugins/qbsprojectmanager/qbsprofilemanager.h b/src/plugins/qbsprojectmanager/qbsprofilemanager.h index 3b6d98f697c..5e9dacea819 100644 --- a/src/plugins/qbsprojectmanager/qbsprofilemanager.h +++ b/src/plugins/qbsprojectmanager/qbsprofilemanager.h @@ -12,7 +12,6 @@ namespace ProjectExplorer { class Kit; } namespace QbsProjectManager { namespace Internal { -class DefaultPropertyProvider; QString toJSLiteral(const QVariant &val); QVariant fromJSLiteral(const QString &str); @@ -43,7 +42,6 @@ private: void handleKitUpdate(ProjectExplorer::Kit *kit); void handleKitRemoval(ProjectExplorer::Kit *kit); - DefaultPropertyProvider *m_defaultPropertyProvider; QList m_kitsToBeSetupForQbs; }; diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.cpp b/src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.cpp index 4299f22e293..fc0eb4abebb 100644 --- a/src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.cpp +++ b/src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.cpp @@ -66,7 +66,6 @@ static QbsProject *currentEditorProject() class QbsProjectManagerPluginPrivate { public: - QbsProfileManager manager; QbsBuildConfigurationFactory buildConfigFactory; QbsBuildStepFactory buildStepFactory; QbsCleanStepFactory cleanStepFactory;