aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Jenssen <tim.jenssen@qt.io>2020-03-30 15:23:46 +0200
committerTim Jenssen <tim.jenssen@qt.io>2020-04-02 09:12:31 +0000
commite571c98661a5ea648889a46eb62e600510b655d7 (patch)
treec25a3ffeb24400cbd817847e4e916dc7e5f81465
parent7834f172ce2624b19519793b9d45b0ede3c24ff3 (diff)
QmlDesigner: fix a rarely happen crash
It was difficult to reproduce, but happen regular while importing something from design tools. Task-number: QTCREATORBUG-23707 Change-Id: I93e8c8cf9d44ecf20f5754ae48a0599f056a8610 Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
-rw-r--r--src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp5
-rw-r--r--src/plugins/qmldesigner/components/itemlibrary/itemlibrarysection.cpp2
-rw-r--r--src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.cpp6
-rw-r--r--src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.h5
4 files changed, 13 insertions, 5 deletions
diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp
index 3714f2bf07..7f2558220f 100644
--- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp
+++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp
@@ -34,6 +34,7 @@
#include <nodemetainfo.h>
#include <utils/algorithm.h>
+#include <utils/qtcassert.h>
#include <QVariant>
#include <QMetaProperty>
@@ -290,13 +291,15 @@ void ItemLibraryModel::addRoleNames()
void ItemLibraryModel::sortSections()
{
+ int nullPointerSectionCount = m_sections.removeAll(QPointer<ItemLibrarySection>());
+ QTC_ASSERT(nullPointerSectionCount == 0,;);
auto sectionSort = [](ItemLibrarySection *first, ItemLibrarySection *second) {
return QString::localeAwareCompare(first->sortingName(), second->sortingName()) < 1;
};
std::sort(m_sections.begin(), m_sections.end(), sectionSort);
- foreach (ItemLibrarySection *itemLibrarySection, m_sections)
+ for (auto itemLibrarySection : m_sections)
itemLibrarySection->sortItems();
}
diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysection.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysection.cpp
index 994f72f184..b1db4d128e 100644
--- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysection.cpp
+++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysection.cpp
@@ -74,7 +74,7 @@ bool ItemLibrarySection::updateSectionVisibility(const QString &searchText, bool
*changed = false;
- foreach(ItemLibraryItem *itemLibraryItem, m_sectionEntries.items()) {
+ for (auto itemLibraryItem : m_sectionEntries.items()) {
bool itemVisible = itemLibraryItem->itemName().toLower().contains(searchText)
|| itemLibraryItem->typeName().toLower().contains(searchText);
diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.cpp
index 5a60dd1eb7..6f7e57763c 100644
--- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.cpp
+++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.cpp
@@ -27,6 +27,8 @@
#include "itemlibraryitem.h"
+#include <utils/qtcassert.h>
+
#include <QDebug>
namespace QmlDesigner {
@@ -79,13 +81,15 @@ void ItemLibrarySectionModel::addItem(ItemLibraryItem *element)
element->setVisible(true);
}
-const QList<ItemLibraryItem *> &ItemLibrarySectionModel::items() const
+const QList<QPointer<ItemLibraryItem>> &ItemLibrarySectionModel::items() const
{
return m_itemList;
}
void ItemLibrarySectionModel::sortItems()
{
+ int nullPointerSectionCount = m_itemList.removeAll(QPointer<ItemLibraryItem>());
+ QTC_ASSERT(nullPointerSectionCount == 0,;);
auto itemSort = [](ItemLibraryItem *first, ItemLibraryItem *second) {
return QString::localeAwareCompare(first->itemName(), second->itemName()) < 1;
};
diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.h
index 6e1771a52f..4995e0c8c5 100644
--- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.h
+++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.h
@@ -28,6 +28,7 @@
#include "itemlibrarymodel.h"
#include <QObject>
+#include <QPointer>
namespace QmlDesigner {
@@ -47,7 +48,7 @@ public:
void addItem(ItemLibraryItem *item);
- const QList<ItemLibraryItem *> &items() const;
+ const QList<QPointer<ItemLibraryItem> > &items() const;
void sortItems();
void resetModel();
@@ -56,7 +57,7 @@ private: // functions
void addRoleNames();
private: // variables
- QList<ItemLibraryItem*> m_itemList;
+ QList<QPointer<ItemLibraryItem>> m_itemList;
QHash<int, QByteArray> m_roleNames;
};