summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@theqtcompany.com>2014-11-28 11:29:00 +0100
committerNikolai Kosjar <nikolai.kosjar@theqtcompany.com>2014-11-28 14:20:23 +0100
commit488bf9179774c84136c12baa38fa70f7e3db3706 (patch)
tree9698436449964f115cc6193e51e591c4ede82b11
parent2fc4acbc356cbb310663f6568a6e73a66b649a8e (diff)
downloadqt-creator-488bf9179774c84136c12baa38fa70f7e3db3706.tar.gz
CppTools: Always check for a valid BuiltinEditorDocumentParser*
This fixes a crash if the include hierarchy sidebar is invoked with the clang code model. BuiltinEditorDocumentParser::get(editorFilePath) returns 0 in that case. Task-number: QTCREATORBUG-13553 Change-Id: I9292691c8156bdaaffcac1c3864201ba8a6cbdef Reviewed-by: Erik Verbruggen <erik.verbruggen@theqtcompany.com>
-rw-r--r--src/plugins/cppeditor/cppincludehierarchymodel.cpp10
-rw-r--r--src/plugins/cpptools/cppmodelmanager_test.cpp3
-rw-r--r--src/plugins/cpptools/cppsourceprocessor_test.cpp2
-rw-r--r--src/plugins/designer/gotoslot_test.cpp9
4 files changed, 17 insertions, 7 deletions
diff --git a/src/plugins/cppeditor/cppincludehierarchymodel.cpp b/src/plugins/cppeditor/cppincludehierarchymodel.cpp
index 3a9b6f7f72..ce0149aaa5 100644
--- a/src/plugins/cppeditor/cppincludehierarchymodel.cpp
+++ b/src/plugins/cppeditor/cppincludehierarchymodel.cpp
@@ -40,6 +40,7 @@
#include <cplusplus/CppDocument.h>
#include <utils/fileutils.h>
+#include <utils/qtcassert.h>
#include <QSet>
@@ -183,8 +184,9 @@ void CppIncludeHierarchyModel::fetchMore(const QModelIndex &parent)
}
if (item == m_includesItem) {
- const Snapshot editorDocumentSnapshot
- = BuiltinEditorDocumentParser::get(editorFilePath)->snapshot();
+ auto *parser = BuiltinEditorDocumentParser::get(editorFilePath);
+ QTC_ASSERT(parser, return);
+ const Snapshot editorDocumentSnapshot = parser->snapshot();
buildHierarchyIncludes_helper(parentItem->filePath(), parentItem,
editorDocumentSnapshot, &cyclic);
} else {
@@ -284,7 +286,9 @@ void CppIncludeHierarchyModel::buildHierarchyIncludes(const QString &currentFile
return;
const QString editorFilePath = m_editor->document()->filePath();
- const Snapshot snapshot = BuiltinEditorDocumentParser::get(editorFilePath)->snapshot();
+ auto *parser = BuiltinEditorDocumentParser::get(editorFilePath);
+ QTC_ASSERT(parser, return);
+ const Snapshot snapshot = parser->snapshot();
QSet<QString> cyclic;
buildHierarchyIncludes_helper(currentFilePath, m_includesItem, snapshot, &cyclic);
}
diff --git a/src/plugins/cpptools/cppmodelmanager_test.cpp b/src/plugins/cpptools/cppmodelmanager_test.cpp
index dfc1ed0d0d..b4065f1328 100644
--- a/src/plugins/cpptools/cppmodelmanager_test.cpp
+++ b/src/plugins/cpptools/cppmodelmanager_test.cpp
@@ -946,7 +946,8 @@ void CppToolsPlugin::test_modelmanager_precompiled_headers()
QCOMPARE(Core::DocumentModel::openedDocuments().size(), 1);
QVERIFY(mm->isCppEditor(editor));
- BuiltinEditorDocumentParser *parser = BuiltinEditorDocumentParser::get(fileName);
+ auto *parser = BuiltinEditorDocumentParser::get(fileName);
+ QVERIFY(parser);
parser->setUsePrecompiledHeaders(true);
parser->update(mm->workingCopy());
diff --git a/src/plugins/cpptools/cppsourceprocessor_test.cpp b/src/plugins/cpptools/cppsourceprocessor_test.cpp
index f4a03a2501..4d18d729a3 100644
--- a/src/plugins/cpptools/cppsourceprocessor_test.cpp
+++ b/src/plugins/cpptools/cppsourceprocessor_test.cpp
@@ -143,7 +143,7 @@ void CppToolsPlugin::test_cppsourceprocessor_includes_cyclic()
// Check editor snapshot
const QString filePath = editor->document()->filePath();
- BuiltinEditorDocumentParser *parser = BuiltinEditorDocumentParser::get(filePath);
+ auto *parser = BuiltinEditorDocumentParser::get(filePath);
QVERIFY(parser);
Snapshot snapshot = parser->snapshot();
QCOMPARE(snapshot.size(), 3); // Configuration file included
diff --git a/src/plugins/designer/gotoslot_test.cpp b/src/plugins/designer/gotoslot_test.cpp
index fde6468433..54950c6907 100644
--- a/src/plugins/designer/gotoslot_test.cpp
+++ b/src/plugins/designer/gotoslot_test.cpp
@@ -196,9 +196,14 @@ public:
}
// Compare
- const Document::Ptr cppDocument = BuiltinEditorDocumentParser::get(cppFile)->document();
+ BuiltinEditorDocumentParser *cppDocumentParser = BuiltinEditorDocumentParser::get(cppFile);
+ QVERIFY(cppDocumentParser);
+ const Document::Ptr cppDocument = cppDocumentParser->document();
QVERIFY(checkDiagsnosticMessages(cppDocument));
- const Document::Ptr hDocument = BuiltinEditorDocumentParser::get(hFile)->document();
+
+ BuiltinEditorDocumentParser *hDocumentParser = BuiltinEditorDocumentParser::get(hFile);
+ QVERIFY(hDocumentParser);
+ const Document::Ptr hDocument = hDocumentParser->document();
QVERIFY(checkDiagsnosticMessages(hDocument));
QVERIFY(documentContainsFunctionDefinition(cppDocument,