CppTools: Fix include hierarchy for clang code model

This makes the editor document snapshot accessible through
BaseEditorDocumentProcessor since we need it for the include hierarchy
if the the clang code model is activated.

Task-number: QTCREATORBUG-13553
Change-Id: I7214cc578d05fe5cad6e12b4d29fe6f840a88e8d
Reviewed-by: Erik Verbruggen <erik.verbruggen@theqtcompany.com>
This commit is contained in:
Nikolai Kosjar
2014-11-28 12:03:58 +01:00
parent 488bf91797
commit 9ccb6b81c9
8 changed files with 28 additions and 17 deletions

View File

@@ -160,6 +160,11 @@ CppTools::BaseEditorDocumentParser *ClangEditorDocumentProcessor::parser()
return &m_parser; return &m_parser;
} }
CPlusPlus::Snapshot ClangEditorDocumentProcessor::snapshot()
{
return m_builtinProcessor.snapshot();
}
bool ClangEditorDocumentProcessor::isParserRunning() const bool ClangEditorDocumentProcessor::isParserRunning() const
{ {
return m_parserWatcher.isRunning(); return m_parserWatcher.isRunning();

View File

@@ -37,7 +37,6 @@
#include <cpptools/builtineditordocumentprocessor.h> #include <cpptools/builtineditordocumentprocessor.h>
#include <cpptools/semantichighlighter.h> #include <cpptools/semantichighlighter.h>
#include <QFutureWatcher> #include <QFutureWatcher>
namespace ClangCodeModel { namespace ClangCodeModel {
@@ -55,6 +54,7 @@ public:
void semanticRehighlight(bool force) Q_DECL_OVERRIDE; void semanticRehighlight(bool force) Q_DECL_OVERRIDE;
CppTools::SemanticInfo recalculateSemanticInfo() Q_DECL_OVERRIDE; CppTools::SemanticInfo recalculateSemanticInfo() Q_DECL_OVERRIDE;
CppTools::BaseEditorDocumentParser *parser() Q_DECL_OVERRIDE; CppTools::BaseEditorDocumentParser *parser() Q_DECL_OVERRIDE;
CPlusPlus::Snapshot snapshot() Q_DECL_OVERRIDE;
bool isParserRunning() const Q_DECL_OVERRIDE; bool isParserRunning() const Q_DECL_OVERRIDE;
private slots: private slots:

View File

@@ -35,7 +35,7 @@
#include <coreplugin/editormanager/editormanager.h> #include <coreplugin/editormanager/editormanager.h>
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
#include <cpptools/builtineditordocumentparser.h> #include <cpptools/baseeditordocumentprocessor.h>
#include <cpptools/cppcodemodelinspectordumper.h> #include <cpptools/cppcodemodelinspectordumper.h>
#include <cpptools/cppmodelmanager.h> #include <cpptools/cppmodelmanager.h>
#include <cpptools/cppworkingcopy.h> #include <cpptools/cppworkingcopy.h>
@@ -1365,8 +1365,8 @@ void CppCodeModelInspectorDialog::refresh()
if (editor) { if (editor) {
const QString editorFilePath = editor->document()->filePath(); const QString editorFilePath = editor->document()->filePath();
editorDocument = cmmi->editorDocument(editorFilePath); editorDocument = cmmi->editorDocument(editorFilePath);
if (auto *builtinDocumentParser = BuiltinEditorDocumentParser::get(editorFilePath)) { if (auto *documentProcessor = BaseEditorDocumentProcessor::get(editorFilePath)) {
const CPlusPlus::Snapshot editorSnapshot = builtinDocumentParser->snapshot(); const CPlusPlus::Snapshot editorSnapshot = documentProcessor->snapshot();
m_snapshotInfos->append(SnapshotInfo(editorSnapshot, SnapshotInfo::EditorSnapshot)); m_snapshotInfos->append(SnapshotInfo(editorSnapshot, SnapshotInfo::EditorSnapshot));
const QString editorSnapshotTitle const QString editorSnapshotTitle
= QString::fromLatin1("Current Editor's Snapshot (%1 Documents)") = QString::fromLatin1("Current Editor's Snapshot (%1 Documents)")

View File

@@ -33,7 +33,7 @@
#include "cppincludehierarchyitem.h" #include "cppincludehierarchyitem.h"
#include <coreplugin/fileiconprovider.h> #include <coreplugin/fileiconprovider.h>
#include <cpptools/builtineditordocumentparser.h> #include <cpptools/baseeditordocumentprocessor.h>
#include <cpptools/cppmodelmanager.h> #include <cpptools/cppmodelmanager.h>
#include <cpptools/editordocumenthandle.h> #include <cpptools/editordocumenthandle.h>
#include <texteditor/texteditor.h> #include <texteditor/texteditor.h>
@@ -184,9 +184,9 @@ void CppIncludeHierarchyModel::fetchMore(const QModelIndex &parent)
} }
if (item == m_includesItem) { if (item == m_includesItem) {
auto *parser = BuiltinEditorDocumentParser::get(editorFilePath); auto *processor = BaseEditorDocumentProcessor::get(editorFilePath);
QTC_ASSERT(parser, return); QTC_ASSERT(processor, return);
const Snapshot editorDocumentSnapshot = parser->snapshot(); const Snapshot editorDocumentSnapshot = processor->snapshot();
buildHierarchyIncludes_helper(parentItem->filePath(), parentItem, buildHierarchyIncludes_helper(parentItem->filePath(), parentItem,
editorDocumentSnapshot, &cyclic); editorDocumentSnapshot, &cyclic);
} else { } else {
@@ -286,11 +286,11 @@ void CppIncludeHierarchyModel::buildHierarchyIncludes(const QString &currentFile
return; return;
const QString editorFilePath = m_editor->document()->filePath(); const QString editorFilePath = m_editor->document()->filePath();
auto *parser = BuiltinEditorDocumentParser::get(editorFilePath); auto *documentProcessor = BaseEditorDocumentProcessor::get(editorFilePath);
QTC_ASSERT(parser, return); QTC_ASSERT(documentProcessor, return);
const Snapshot snapshot = parser->snapshot(); const Snapshot editorDocumentSnapshot = documentProcessor->snapshot();
QSet<QString> cyclic; QSet<QString> cyclic;
buildHierarchyIncludes_helper(currentFilePath, m_includesItem, snapshot, &cyclic); buildHierarchyIncludes_helper(currentFilePath, m_includesItem, editorDocumentSnapshot, &cyclic);
} }
void CppIncludeHierarchyModel::buildHierarchyIncludes_helper(const QString &filePath, void CppIncludeHierarchyModel::buildHierarchyIncludes_helper(const QString &filePath,

View File

@@ -59,6 +59,7 @@ public:
virtual void run() = 0; virtual void run() = 0;
virtual void semanticRehighlight(bool force) = 0; virtual void semanticRehighlight(bool force) = 0;
virtual CppTools::SemanticInfo recalculateSemanticInfo() = 0; virtual CppTools::SemanticInfo recalculateSemanticInfo() = 0;
virtual CPlusPlus::Snapshot snapshot() = 0;
virtual BaseEditorDocumentParser *parser() = 0; virtual BaseEditorDocumentParser *parser() = 0;
virtual bool isParserRunning() const = 0; virtual bool isParserRunning() const = 0;

View File

@@ -174,6 +174,11 @@ BaseEditorDocumentParser *BuiltinEditorDocumentProcessor::parser()
return &m_parser; return &m_parser;
} }
CPlusPlus::Snapshot BuiltinEditorDocumentProcessor::snapshot()
{
return m_parser.snapshot();
}
void BuiltinEditorDocumentProcessor::semanticRehighlight(bool force) void BuiltinEditorDocumentProcessor::semanticRehighlight(bool force)
{ {
const auto source = createSemanticInfoSource(force); const auto source = createSemanticInfoSource(force);

View File

@@ -37,7 +37,6 @@
#include "cpptools_global.h" #include "cpptools_global.h"
#include "semantichighlighter.h" #include "semantichighlighter.h"
namespace CppTools { namespace CppTools {
class CPPTOOLS_EXPORT BuiltinEditorDocumentProcessor : public BaseEditorDocumentProcessor class CPPTOOLS_EXPORT BuiltinEditorDocumentProcessor : public BaseEditorDocumentProcessor
@@ -55,6 +54,7 @@ public:
void semanticRehighlight(bool force) Q_DECL_OVERRIDE; void semanticRehighlight(bool force) Q_DECL_OVERRIDE;
CppTools::SemanticInfo recalculateSemanticInfo() Q_DECL_OVERRIDE; CppTools::SemanticInfo recalculateSemanticInfo() Q_DECL_OVERRIDE;
BaseEditorDocumentParser *parser() Q_DECL_OVERRIDE; BaseEditorDocumentParser *parser() Q_DECL_OVERRIDE;
CPlusPlus::Snapshot snapshot() Q_DECL_OVERRIDE;
bool isParserRunning() const Q_DECL_OVERRIDE; bool isParserRunning() const Q_DECL_OVERRIDE;
private: private:

View File

@@ -30,7 +30,7 @@
#include "cpptoolsplugin.h" #include "cpptoolsplugin.h"
#include "builtineditordocumentparser.h" #include "baseeditordocumentprocessor.h"
#include "cppmodelmanager.h" #include "cppmodelmanager.h"
#include "cppsourceprocessertesthelper.h" #include "cppsourceprocessertesthelper.h"
#include "cppsourceprocessor.h" #include "cppsourceprocessor.h"
@@ -143,9 +143,9 @@ void CppToolsPlugin::test_cppsourceprocessor_includes_cyclic()
// Check editor snapshot // Check editor snapshot
const QString filePath = editor->document()->filePath(); const QString filePath = editor->document()->filePath();
auto *parser = BuiltinEditorDocumentParser::get(filePath); auto *processor = BaseEditorDocumentProcessor::get(filePath);
QVERIFY(parser); QVERIFY(processor);
Snapshot snapshot = parser->snapshot(); Snapshot snapshot = processor->snapshot();
QCOMPARE(snapshot.size(), 3); // Configuration file included QCOMPARE(snapshot.size(), 3); // Configuration file included
// Check includes // Check includes