diff --git a/src/plugins/clangcodemodel/clangcodemodelplugin.cpp b/src/plugins/clangcodemodel/clangcodemodelplugin.cpp index b69366ee4c2..928b034387f 100644 --- a/src/plugins/clangcodemodel/clangcodemodelplugin.cpp +++ b/src/plugins/clangcodemodel/clangcodemodelplugin.cpp @@ -58,6 +58,11 @@ static void initializeTextMarks() Utils::Theme::ClangCodeModel_Error_TextMarkColor); } +ClangCodeModelPlugin::ClangCodeModelPlugin() +{ + qRegisterMetaType(); +} + bool ClangCodeModelPlugin::initialize(const QStringList &arguments, QString *errorMessage) { Q_UNUSED(arguments) diff --git a/src/plugins/clangcodemodel/clangcodemodelplugin.h b/src/plugins/clangcodemodel/clangcodemodelplugin.h index 6a767d5b710..39d4ba6633c 100644 --- a/src/plugins/clangcodemodel/clangcodemodelplugin.h +++ b/src/plugins/clangcodemodel/clangcodemodelplugin.h @@ -50,6 +50,8 @@ class ClangCodeModelPlugin: public ExtensionSystem::IPlugin Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "ClangCodeModel.json") public: + ClangCodeModelPlugin(); + bool initialize(const QStringList &arguments, QString *errorMessage); void extensionsInitialized(); diff --git a/src/plugins/clangcodemodel/clangeditordocumentparser.cpp b/src/plugins/clangcodemodel/clangeditordocumentparser.cpp index 43a78680176..caeefd2267d 100644 --- a/src/plugins/clangcodemodel/clangeditordocumentparser.cpp +++ b/src/plugins/clangcodemodel/clangeditordocumentparser.cpp @@ -99,6 +99,7 @@ void ClangEditorDocumentParser::updateHelper(const BaseEditorDocumentParser::InM State state_ = state(); state_.projectPart = determineProjectPart(filePath(), configuration(), state_); setState(state_); + emit projectPartDetermined(state_.projectPart); // Determine message line arguments const QStringList options = createOptions(filePath(), state_.projectPart, true); diff --git a/src/plugins/clangcodemodel/clangeditordocumentparser.h b/src/plugins/clangcodemodel/clangeditordocumentparser.h index 4784d51672c..ef207749c27 100644 --- a/src/plugins/clangcodemodel/clangeditordocumentparser.h +++ b/src/plugins/clangcodemodel/clangeditordocumentparser.h @@ -50,6 +50,9 @@ public: QList ifdefedOutBlocks() const; SemanticMarker::Ptr semanticMarker() const; +signals: + void projectPartDetermined(CppTools::ProjectPart::Ptr projectPart); + private: void updateHelper(const BaseEditorDocumentParser::InMemoryInfo &info) override; diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp index 43617439652..c4a75dfbba6 100644 --- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp +++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp @@ -88,6 +88,9 @@ ClangEditorDocumentProcessor::ClangEditorDocumentProcessor( , m_semanticHighlighter(document) , m_builtinProcessor(document, /*enableSemanticHighlighter=*/ false) { + connect(m_parser.data(), &ClangEditorDocumentParser::projectPartDetermined, + this, &ClangEditorDocumentProcessor::onParserDeterminedProjectPart); + // Forwarding the semantic info from the builtin processor enables us to provide all // editor (widget) related features that are not yet implemented by the clang plugin. connect(&m_builtinProcessor, &CppTools::BuiltinEditorDocumentProcessor::cppDocumentUpdated, @@ -231,9 +234,10 @@ static bool isProjectPartLoadedOrIsFallback(CppTools::ProjectPart::Ptr projectPa && (projectPart->id().isEmpty() || ClangCodeModel::Utils::isProjectPartLoaded(projectPart)); } -void ClangEditorDocumentProcessor::updateProjectPartAndTranslationUnitForEditor() +void ClangEditorDocumentProcessor::updateProjectPartAndTranslationUnitForEditor( + CppTools::ProjectPart::Ptr projectPart) { - const CppTools::ProjectPart::Ptr projectPart = m_parser->projectPart(); + QTC_ASSERT(projectPart, return); if (isProjectPartLoadedOrIsFallback(projectPart)) { updateTranslationUnitForEditor(projectPart.data()); @@ -243,6 +247,12 @@ void ClangEditorDocumentProcessor::updateProjectPartAndTranslationUnitForEditor( } } +void ClangEditorDocumentProcessor::onParserDeterminedProjectPart( + CppTools::ProjectPart::Ptr projectPart) +{ + updateProjectPartAndTranslationUnitForEditor(projectPart); +} + void ClangEditorDocumentProcessor::onParserFinished() { if (revision() != m_parserRevision) @@ -254,8 +264,6 @@ void ClangEditorDocumentProcessor::onParserFinished() // Run semantic highlighter m_semanticHighlighter.run(); - - updateProjectPartAndTranslationUnitForEditor(); } void ClangEditorDocumentProcessor::updateTranslationUnitForEditor(CppTools::ProjectPart *projectPart) diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.h b/src/plugins/clangcodemodel/clangeditordocumentprocessor.h index 4e29265aba7..575725e8738 100644 --- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.h +++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.h @@ -85,10 +85,11 @@ public: static ClangEditorDocumentProcessor *get(const QString &filePath); private slots: + void onParserDeterminedProjectPart(CppTools::ProjectPart::Ptr projectPart); void onParserFinished(); private: - void updateProjectPartAndTranslationUnitForEditor(); + void updateProjectPartAndTranslationUnitForEditor(CppTools::ProjectPart::Ptr projectPart); void updateTranslationUnitForEditor(CppTools::ProjectPart *projectPart); void requestDiagnostics(CppTools::ProjectPart *projectPart); void requestDiagnostics(); diff --git a/src/plugins/clangcodemodel/test/clangcodecompletion_test.cpp b/src/plugins/clangcodemodel/test/clangcodecompletion_test.cpp index 84b0dc4d732..58a86051931 100644 --- a/src/plugins/clangcodemodel/test/clangcodecompletion_test.cpp +++ b/src/plugins/clangcodemodel/test/clangcodecompletion_test.cpp @@ -1037,6 +1037,7 @@ void ClangCodeCompletionTest::testCompleteProjectDependingCodeInGeneratedUiFile( CppTools::Tests::ProjectOpenerAndCloser projectManager; const CppTools::ProjectInfo projectInfo = projectManager.open(projectFilePath, true); QVERIFY(projectInfo.isValid()); + QVERIFY(monitorGeneratedUiFile.waitUntilGenerated()); // Open file with ui object const QString completionFile = testDir.absolutePath("mainwindow.cpp"); @@ -1046,7 +1047,6 @@ void ClangCodeCompletionTest::testCompleteProjectDependingCodeInGeneratedUiFile( QVERIFY(openSource.succeeded()); // ...and check comletions - QVERIFY(monitorGeneratedUiFile.waitUntilGenerated()); ProposalModel proposal = completionResults(openSource.editor()); QVERIFY(hasItem(proposal, "menuBar")); QVERIFY(hasItem(proposal, "statusBar")); diff --git a/src/plugins/cpptools/cppprojects.h b/src/plugins/cpptools/cppprojects.h index c994257fa49..dc6c841bf02 100644 --- a/src/plugins/cpptools/cppprojects.h +++ b/src/plugins/cpptools/cppprojects.h @@ -247,4 +247,6 @@ private: } // namespace CppTools +Q_DECLARE_METATYPE(CppTools::ProjectPart::Ptr) + #endif // CPPPROJECTPART_H