From bd66d5ac053db5f0b364d458e42f3c87432f8776 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Wed, 14 Dec 2016 18:58:23 +0100 Subject: [PATCH] CppTools: Remove some duplication Change-Id: I8c84660b28c3e76b2cedd08ff3b44a38583f38a0 Reviewed-by: David Schulz --- .../clangeditordocumentparser.cpp | 8 ++++--- .../clangeditordocumentparser.h | 3 +-- .../clangeditordocumentprocessor.cpp | 13 +++-------- .../clangeditordocumentprocessor.h | 2 +- .../cpptools/baseeditordocumentparser.cpp | 10 ++++----- .../cpptools/baseeditordocumentparser.h | 22 +++++++++++++------ .../cpptools/baseeditordocumentprocessor.cpp | 12 +++++++--- .../cpptools/baseeditordocumentprocessor.h | 9 ++++---- .../cpptools/builtineditordocumentparser.cpp | 10 +++++---- .../cpptools/builtineditordocumentparser.h | 3 +-- .../builtineditordocumentprocessor.cpp | 13 ++++------- .../cpptools/builtineditordocumentprocessor.h | 2 +- .../cpptools/builtinindexingsupport.cpp | 2 +- src/plugins/cpptools/cppcompletionassist.cpp | 2 +- src/plugins/cpptools/cppmodelmanager_test.cpp | 4 ++-- 15 files changed, 59 insertions(+), 56 deletions(-) diff --git a/src/plugins/clangcodemodel/clangeditordocumentparser.cpp b/src/plugins/clangcodemodel/clangeditordocumentparser.cpp index 136fe6c74d2..23922355145 100644 --- a/src/plugins/clangcodemodel/clangeditordocumentparser.cpp +++ b/src/plugins/clangcodemodel/clangeditordocumentparser.cpp @@ -36,11 +36,13 @@ ClangEditorDocumentParser::ClangEditorDocumentParser(const QString &filePath) } void ClangEditorDocumentParser::updateImpl(const QFutureInterface &, - const CppTools::WorkingCopy &, - const ProjectExplorer::Project *activeProject) + const UpdateParams &updateParams) { State state_ = state(); - state_.projectPart = determineProjectPart(filePath(), configuration(), state_, activeProject); + state_.projectPart = determineProjectPart(filePath(), + configuration(), + state_, + updateParams.activeProject); setState(state_); } diff --git a/src/plugins/clangcodemodel/clangeditordocumentparser.h b/src/plugins/clangcodemodel/clangeditordocumentparser.h index 3a9777a17f9..28dd52a46a9 100644 --- a/src/plugins/clangcodemodel/clangeditordocumentparser.h +++ b/src/plugins/clangcodemodel/clangeditordocumentparser.h @@ -38,8 +38,7 @@ public: private: void updateImpl(const QFutureInterface &future, - const CppTools::WorkingCopy &, - const ProjectExplorer::Project *activeProject) override; + const UpdateParams &updateParams) override; }; } // namespace ClangCodeModel diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp index 3afd5c7c6a2..84534d6ae85 100644 --- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp +++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp @@ -46,8 +46,6 @@ #include #include -#include - #include #include #include @@ -103,7 +101,8 @@ ClangEditorDocumentProcessor::~ClangEditorDocumentProcessor() } } -void ClangEditorDocumentProcessor::run() +void ClangEditorDocumentProcessor::runImpl( + const CppTools::BaseEditorDocumentParser::UpdateParams &updateParams) { m_updateTranslationUnitTimer.start(); @@ -116,13 +115,7 @@ void ClangEditorDocumentProcessor::run() m_parserRevision = revision(); connect(&m_parserWatcher, &QFutureWatcher::finished, this, &ClangEditorDocumentProcessor::onParserFinished); - const CppTools::WorkingCopy workingCopy = CppTools::CppModelManager::instance()->workingCopy(); - const ProjectExplorer::Project *activeProject - = ProjectExplorer::SessionManager::startupProject(); - const QFuture future = ::Utils::runAsync(&runParser, - parser(), - workingCopy, - activeProject); + const QFuture future = ::Utils::runAsync(&runParser, parser(), updateParams); m_parserWatcher.setFuture(future); // Run builtin processor diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.h b/src/plugins/clangcodemodel/clangeditordocumentprocessor.h index 094ea95925e..7f30299391d 100644 --- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.h +++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.h @@ -55,7 +55,7 @@ public: ~ClangEditorDocumentProcessor(); // BaseEditorDocumentProcessor interface - void run() override; + void runImpl(const CppTools::BaseEditorDocumentParser::UpdateParams &updateParams) override; void semanticRehighlight() override; void recalculateSemanticInfoDetached(bool force) override; CppTools::SemanticInfo recalculateSemanticInfo() override; diff --git a/src/plugins/cpptools/baseeditordocumentparser.cpp b/src/plugins/cpptools/baseeditordocumentparser.cpp index 49adead280f..30f16fb9cf9 100644 --- a/src/plugins/cpptools/baseeditordocumentparser.cpp +++ b/src/plugins/cpptools/baseeditordocumentparser.cpp @@ -77,19 +77,17 @@ void BaseEditorDocumentParser::setConfiguration(const Configuration &configurati m_configuration = configuration; } -void BaseEditorDocumentParser::update(const WorkingCopy &workingCopy, - const ProjectExplorer::Project *activeProject) +void BaseEditorDocumentParser::update(const UpdateParams &updateParams) { QFutureInterface dummy; - update(dummy, workingCopy, activeProject); + update(dummy, updateParams); } void BaseEditorDocumentParser::update(const QFutureInterface &future, - const WorkingCopy &workingCopy, - const ProjectExplorer::Project *activeProject) + const UpdateParams &updateParams) { QMutexLocker locker(&m_updateIsRunning); - updateImpl(future, workingCopy, activeProject); + updateImpl(future, updateParams); } BaseEditorDocumentParser::State BaseEditorDocumentParser::state() const diff --git a/src/plugins/cpptools/baseeditordocumentparser.h b/src/plugins/cpptools/baseeditordocumentparser.h index 056dca52a80..d41b0ed08f4 100644 --- a/src/plugins/cpptools/baseeditordocumentparser.h +++ b/src/plugins/cpptools/baseeditordocumentparser.h @@ -52,6 +52,18 @@ public: ProjectPart::Ptr manuallySetProjectPart; }; + struct UpdateParams { + UpdateParams(const WorkingCopy &workingCopy, + const ProjectExplorer::Project *activeProject) + : workingCopy(workingCopy) + , activeProject(activeProject) + { + } + + WorkingCopy workingCopy; + const ProjectExplorer::Project *activeProject = nullptr; + }; + public: BaseEditorDocumentParser(const QString &filePath); virtual ~BaseEditorDocumentParser(); @@ -60,11 +72,8 @@ public: Configuration configuration() const; void setConfiguration(const Configuration &configuration); - void update(const WorkingCopy &workingCopy, - const ProjectExplorer::Project *activeProject); - void update(const QFutureInterface &future, - const WorkingCopy &workingCopy, - const ProjectExplorer::Project *activeProject); + void update(const UpdateParams &updateParams); + void update(const QFutureInterface &future, const UpdateParams &updateParams); ProjectPart::Ptr projectPart() const; @@ -85,8 +94,7 @@ protected: private: virtual void updateImpl(const QFutureInterface &future, - const WorkingCopy &workingCopy, - const ProjectExplorer::Project *activeProject) = 0; + const UpdateParams &updateParams) = 0; const QString m_filePath; Configuration m_configuration; diff --git a/src/plugins/cpptools/baseeditordocumentprocessor.cpp b/src/plugins/cpptools/baseeditordocumentprocessor.cpp index 69432dd6e2d..2051136133d 100644 --- a/src/plugins/cpptools/baseeditordocumentprocessor.cpp +++ b/src/plugins/cpptools/baseeditordocumentprocessor.cpp @@ -29,6 +29,7 @@ #include "cpptoolsbridge.h" #include "editordocumenthandle.h" +#include #include namespace CppTools { @@ -52,6 +53,12 @@ BaseEditorDocumentProcessor::~BaseEditorDocumentProcessor() { } +void BaseEditorDocumentProcessor::run() +{ + runImpl({CppModelManager::instance()->workingCopy(), + ProjectExplorer::SessionManager::startupProject()}); +} + TextEditor::QuickFixOperations BaseEditorDocumentProcessor::extraRefactoringOperations(const TextEditor::AssistInterface &) { @@ -73,8 +80,7 @@ void BaseEditorDocumentProcessor::editorDocumentTimerRestarted() void BaseEditorDocumentProcessor::runParser(QFutureInterface &future, BaseEditorDocumentParser::Ptr parser, - const WorkingCopy workingCopy, - const ProjectExplorer::Project *activeProject) + BaseEditorDocumentParser::UpdateParams updateParams) { future.setProgressRange(0, 1); if (future.isCanceled()) { @@ -82,7 +88,7 @@ void BaseEditorDocumentProcessor::runParser(QFutureInterface &future, return; } - parser->update(future, workingCopy, activeProject); + parser->update(future, updateParams); CppToolsBridge::finishedRefreshingSourceFiles({parser->filePath()}); future.setProgressValue(1); diff --git a/src/plugins/cpptools/baseeditordocumentprocessor.h b/src/plugins/cpptools/baseeditordocumentprocessor.h index a37be4ddcb2..cd190137fba 100644 --- a/src/plugins/cpptools/baseeditordocumentprocessor.h +++ b/src/plugins/cpptools/baseeditordocumentprocessor.h @@ -54,8 +54,7 @@ public: BaseEditorDocumentProcessor(QTextDocument *textDocument, const QString &filePath); virtual ~BaseEditorDocumentProcessor(); - // Function interface to implement - virtual void run() = 0; + void run(); virtual void semanticRehighlight() = 0; virtual void recalculateSemanticInfoDetached(bool force) = 0; virtual CppTools::SemanticInfo recalculateSemanticInfo() = 0; @@ -91,14 +90,16 @@ signals: protected: static void runParser(QFutureInterface &future, BaseEditorDocumentParser::Ptr parser, - const CppTools::WorkingCopy workingCopy, - const ProjectExplorer::Project *activeProject); + BaseEditorDocumentParser::UpdateParams updateParams); // Convenience QString filePath() const { return m_filePath; } unsigned revision() const { return static_cast(m_textDocument->revision()); } QTextDocument *textDocument() const { return m_textDocument; } +private: + virtual void runImpl(const BaseEditorDocumentParser::UpdateParams &updateParams) = 0; + private: QString m_filePath; QTextDocument *m_textDocument; diff --git a/src/plugins/cpptools/builtineditordocumentparser.cpp b/src/plugins/cpptools/builtineditordocumentparser.cpp index 7559e652dbf..4edbbc491b5 100644 --- a/src/plugins/cpptools/builtineditordocumentparser.cpp +++ b/src/plugins/cpptools/builtineditordocumentparser.cpp @@ -56,8 +56,7 @@ BuiltinEditorDocumentParser::BuiltinEditorDocumentParser(const QString &filePath } void BuiltinEditorDocumentParser::updateImpl(const QFutureInterface &future, - const WorkingCopy &theWorkingCopy, - const ProjectExplorer::Project *activeProject) + const UpdateParams &updateParams) { if (filePath().isEmpty()) return; @@ -67,7 +66,7 @@ void BuiltinEditorDocumentParser::updateImpl(const QFutureInterface &futur State baseState = state(); ExtraState state = extraState(); - WorkingCopy workingCopy = theWorkingCopy; + WorkingCopy workingCopy = updateParams.workingCopy; bool invalidateSnapshot = false, invalidateConfig = false, editorDefinesChanged_ = false; @@ -78,7 +77,10 @@ void BuiltinEditorDocumentParser::updateImpl(const QFutureInterface &futur QString projectConfigFile; LanguageFeatures features = LanguageFeatures::defaultFeatures(); - baseState.projectPart = determineProjectPart(filePath(), baseConfig, baseState, activeProject); + baseState.projectPart = determineProjectPart(filePath(), + baseConfig, + baseState, + updateParams.activeProject); if (state.forceSnapshotInvalidation) { invalidateSnapshot = true; diff --git a/src/plugins/cpptools/builtineditordocumentparser.h b/src/plugins/cpptools/builtineditordocumentparser.h index 73f94796ae5..a5af49dd900 100644 --- a/src/plugins/cpptools/builtineditordocumentparser.h +++ b/src/plugins/cpptools/builtineditordocumentparser.h @@ -59,8 +59,7 @@ public: private: void updateImpl(const QFutureInterface &future, - const WorkingCopy &workingCopy, - const ProjectExplorer::Project *activeProject) override; + const UpdateParams &updateParams) override; void addFileAndDependencies(CPlusPlus::Snapshot *snapshot, QSet *toRemove, const Utils::FileName &fileName) const; diff --git a/src/plugins/cpptools/builtineditordocumentprocessor.cpp b/src/plugins/cpptools/builtineditordocumentprocessor.cpp index 1d7dbbb817f..2a6dd066d11 100644 --- a/src/plugins/cpptools/builtineditordocumentprocessor.cpp +++ b/src/plugins/cpptools/builtineditordocumentprocessor.cpp @@ -32,8 +32,6 @@ #include "cpptoolsreuse.h" #include "cppworkingcopy.h" -#include - #include #include #include @@ -204,16 +202,13 @@ BuiltinEditorDocumentProcessor::~BuiltinEditorDocumentProcessor() m_parserFuture.waitForFinished(); } -void BuiltinEditorDocumentProcessor::run() +void BuiltinEditorDocumentProcessor::runImpl( + const BaseEditorDocumentParser::UpdateParams &updateParams) { - CppModelManager *mgr = CppModelManager::instance(); - const ProjectExplorer::Project *activeProject - = ProjectExplorer::SessionManager::startupProject(); - m_parserFuture = Utils::runAsync(mgr->sharedThreadPool(), + m_parserFuture = Utils::runAsync(CppModelManager::instance()->sharedThreadPool(), runParser, parser(), - mgr->workingCopy(), - activeProject); + updateParams); } BaseEditorDocumentParser::Ptr BuiltinEditorDocumentProcessor::parser() diff --git a/src/plugins/cpptools/builtineditordocumentprocessor.h b/src/plugins/cpptools/builtineditordocumentprocessor.h index 2efd6af078c..d9761e09769 100644 --- a/src/plugins/cpptools/builtineditordocumentprocessor.h +++ b/src/plugins/cpptools/builtineditordocumentprocessor.h @@ -43,7 +43,7 @@ public: ~BuiltinEditorDocumentProcessor(); // BaseEditorDocumentProcessor interface - void run() override; + void runImpl(const BaseEditorDocumentParser::UpdateParams &updateParams) override; void recalculateSemanticInfoDetached(bool force) override; void semanticRehighlight() override; CppTools::SemanticInfo recalculateSemanticInfo() override; diff --git a/src/plugins/cpptools/builtinindexingsupport.cpp b/src/plugins/cpptools/builtinindexingsupport.cpp index 5591a25aada..5dc0d692e88 100644 --- a/src/plugins/cpptools/builtinindexingsupport.cpp +++ b/src/plugins/cpptools/builtinindexingsupport.cpp @@ -158,7 +158,7 @@ void indexFindErrors(QFutureInterface &future, const ParseParams params) // Parse the file as precisely as possible BuiltinEditorDocumentParser parser(file); parser.setReleaseSourceAndAST(false); - parser.update(CppModelManager::instance()->workingCopy(), nullptr); + parser.update({CppModelManager::instance()->workingCopy(), nullptr}); CPlusPlus::Document::Ptr document = parser.document(); QTC_ASSERT(document, return); diff --git a/src/plugins/cpptools/cppcompletionassist.cpp b/src/plugins/cpptools/cppcompletionassist.cpp index 6b2c8c1b9a6..231c3c8a5bd 100644 --- a/src/plugins/cpptools/cppcompletionassist.cpp +++ b/src/plugins/cpptools/cppcompletionassist.cpp @@ -2122,7 +2122,7 @@ void CppCompletionAssistInterface::getCppSpecifics() const m_gotCppSpecifics = true; if (m_parser) { - m_parser->update(CppTools::CppModelManager::instance()->workingCopy(), nullptr); + m_parser->update({CppTools::CppModelManager::instance()->workingCopy(), nullptr}); m_snapshot = m_parser->snapshot(); m_headerPaths = m_parser->headerPaths(); } diff --git a/src/plugins/cpptools/cppmodelmanager_test.cpp b/src/plugins/cpptools/cppmodelmanager_test.cpp index 69d2087716e..56f4ff1f50d 100644 --- a/src/plugins/cpptools/cppmodelmanager_test.cpp +++ b/src/plugins/cpptools/cppmodelmanager_test.cpp @@ -877,7 +877,7 @@ void CppToolsPlugin::test_modelmanager_precompiled_headers() BaseEditorDocumentParser::Configuration config = parser->configuration(); config.usePrecompiledHeaders = true; parser->setConfiguration(config); - parser->update(CppModelManager::instance()->workingCopy(), nullptr); + parser->update({CppModelManager::instance()->workingCopy(), nullptr}); // Check if defines from pch are considered Document::Ptr document = mm->document(fileName); @@ -955,7 +955,7 @@ void CppToolsPlugin::test_modelmanager_defines_per_editor() BaseEditorDocumentParser::Configuration config = parser->configuration(); config.editorDefines = editorDefines.toUtf8(); parser->setConfiguration(config); - parser->update(CppModelManager::instance()->workingCopy(), nullptr); + parser->update({CppModelManager::instance()->workingCopy(), nullptr}); Document::Ptr doc = mm->document(main1File); QCOMPARE(nameOfFirstDeclaration(doc), firstDeclarationName);