diff options
-rw-r--r-- | src/plugins/projectexplorer/kit.h | 4 | ||||
-rw-r--r-- | src/plugins/projectexplorer/kitmanager.cpp | 16 | ||||
-rw-r--r-- | src/plugins/projectexplorer/kitmanager.h | 2 | ||||
-rw-r--r-- | src/plugins/projectexplorer/kitmanagerconfigwidget.cpp | 2 | ||||
-rw-r--r-- | src/plugins/projectexplorer/settingsaccessor.cpp | 7 |
5 files changed, 22 insertions, 9 deletions
diff --git a/src/plugins/projectexplorer/kit.h b/src/plugins/projectexplorer/kit.h index 031a0521a2..78a1ba4991 100644 --- a/src/plugins/projectexplorer/kit.h +++ b/src/plugins/projectexplorer/kit.h @@ -43,7 +43,6 @@ namespace ProjectExplorer { class IOutputParser; namespace Internal { -class KitManagerPrivate; class KitModel; class KitPrivate; } // namespace Internal @@ -58,7 +57,6 @@ class PROJECTEXPLORER_EXPORT Kit { public: Kit(Core::Id id = Core::Id()); - ~Kit(); // Do not trigger evaluations void blockNotification(); @@ -98,6 +96,8 @@ public: void copyFrom(const Kit *k); private: + ~Kit(); + // Unimplemented. Kit(const Kit &other); void operator=(const Kit &other); diff --git a/src/plugins/projectexplorer/kitmanager.cpp b/src/plugins/projectexplorer/kitmanager.cpp index 7df67df142..1189029131 100644 --- a/src/plugins/projectexplorer/kitmanager.cpp +++ b/src/plugins/projectexplorer/kitmanager.cpp @@ -95,7 +95,6 @@ KitManagerPrivate::KitManagerPrivate() KitManagerPrivate::~KitManagerPrivate() { qDeleteAll(m_informationList); - qDeleteAll(m_kitList); delete m_writer; } @@ -192,7 +191,9 @@ void KitManager::restoreKits() } // Delete all loaded autodetected kits that were not rediscovered: - qDeleteAll(kitsToCheck); + foreach (Kit *k, kitsToCheck) + delete k; + kitsToCheck.clear(); // Store manual kits foreach (Kit *k, kitsToRegister) @@ -221,7 +222,10 @@ void KitManager::restoreKits() KitManager::~KitManager() { saveKits(); // Make sure we save the current state on exit! - // Clean out kit information to avoid calling them during deregistration: + + foreach (Kit *k, d->m_kitList) + delete k; + d->m_kitList.clear(); delete d; m_instance = 0; } @@ -384,6 +388,12 @@ Internal::KitManagerConfigWidget *KitManager::createConfigWidget(Kit *k) const return result; } +void KitManager::deleteKit(Kit *k) +{ + QTC_ASSERT(!KitManager::instance()->kits().contains(k), return); + delete k; +} + void KitManager::notifyAboutUpdate(ProjectExplorer::Kit *k) { if (!k) diff --git a/src/plugins/projectexplorer/kitmanager.h b/src/plugins/projectexplorer/kitmanager.h index f9c080e448..ea61d3360e 100644 --- a/src/plugins/projectexplorer/kitmanager.h +++ b/src/plugins/projectexplorer/kitmanager.h @@ -121,6 +121,8 @@ public: Internal::KitManagerConfigWidget *createConfigWidget(Kit *k) const; + static void deleteKit(Kit *k); + public slots: bool registerKit(ProjectExplorer::Kit *k); void deregisterKit(ProjectExplorer::Kit *k); diff --git a/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp b/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp index f17b35fbb1..6fa48cf7d8 100644 --- a/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp +++ b/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp @@ -99,7 +99,7 @@ KitManagerConfigWidget::~KitManagerConfigWidget() qDeleteAll(m_widgets); m_widgets.clear(); - delete m_modifiedKit; + KitManager::deleteKit(m_modifiedKit); // Make sure our workingCopy did not get registered somehow: foreach (const Kit *k, KitManager::instance()->kits()) QTC_CHECK(k->id() != Core::Id(WORKING_COPY_KIT_ID)); diff --git a/src/plugins/projectexplorer/settingsaccessor.cpp b/src/plugins/projectexplorer/settingsaccessor.cpp index 6caf11b97a..385b32cbd5 100644 --- a/src/plugins/projectexplorer/settingsaccessor.cpp +++ b/src/plugins/projectexplorer/settingsaccessor.cpp @@ -2228,7 +2228,7 @@ Version11Handler::~Version11Handler() QList<Kit *> knownKits = km->kits(); foreach (Kit *k, m_targets.keys()) { if (!knownKits.contains(k)) - delete k; + KitManager::deleteKit(k); } m_targets.clear(); } @@ -2314,13 +2314,13 @@ QVariantMap Version11Handler::update(Project *project, const QVariantMap &map) const QString oldTargetId = extraTargetData.value(QLatin1String("ProjectExplorer.ProjectConfiguration.Id")).toString(); // Check each BCs/DCs and create profiles as needed - static Kit rawKit; // Do not needlessly use Core::Ids + Kit *rawKit = new Kit; // Do not needlessly use Core::Ids QMapIterator<int, QVariantMap> buildIt(bcs); while (buildIt.hasNext()) { buildIt.next(); int bcPos = buildIt.key(); const QVariantMap &bc = buildIt.value(); - Kit *tmpKit = &rawKit; + Kit *tmpKit = rawKit; if (oldTargetId == QLatin1String("Qt4ProjectManager.Target.AndroidDeviceTarget")) { tmpKit->setIconPath(QLatin1String(":/android/images/QtAndroid.png")); @@ -2442,6 +2442,7 @@ QVariantMap Version11Handler::update(Project *project, const QVariantMap &map) m_targets[k].insert(QLatin1String("Update.IsActive"), true); } // dcs } // bcs + KitManager::deleteKit(rawKit); } // read in map data int newPos = 0; |