diff options
author | Nikolai Kosjar <nikolai.kosjar@theqtcompany.com> | 2014-11-28 11:29:00 +0100 |
---|---|---|
committer | Nikolai Kosjar <nikolai.kosjar@theqtcompany.com> | 2014-11-28 14:20:23 +0100 |
commit | 488bf9179774c84136c12baa38fa70f7e3db3706 (patch) | |
tree | 9698436449964f115cc6193e51e591c4ede82b11 | |
parent | 2fc4acbc356cbb310663f6568a6e73a66b649a8e (diff) |
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.cpp | 10 | ||||
-rw-r--r-- | src/plugins/cpptools/cppmodelmanager_test.cpp | 3 | ||||
-rw-r--r-- | src/plugins/cpptools/cppsourceprocessor_test.cpp | 2 | ||||
-rw-r--r-- | src/plugins/designer/gotoslot_test.cpp | 9 |
4 files changed, 17 insertions, 7 deletions
diff --git a/src/plugins/cppeditor/cppincludehierarchymodel.cpp b/src/plugins/cppeditor/cppincludehierarchymodel.cpp index 3a9b6f7f728..ce0149aaa5e 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 ¤tFile 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 dfc1ed0d0d7..b4065f13289 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 f4a03a2501c..4d18d729a3b 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 fde64684332..54950c6907d 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, |