diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp index e490c4fbe33..ce276c363b9 100644 --- a/src/plugins/cppeditor/cppeditor.cpp +++ b/src/plugins/cppeditor/cppeditor.cpp @@ -715,6 +715,7 @@ void CPPEditorWidget::setMimeType(const QString &mt) QSharedPointer updater = m_modelManager->cppEditorSupport(editor())->snapshotUpdater(); + updater->setProjectPart(m_modelManager->projectPartForProjectFile(projectFile)); updater->setEditorDefines(additionalDirectives); m_preprocessorButton->setProperty("highlightWidget", !additionalDirectives.trimmed().isEmpty()); @@ -1994,6 +1995,7 @@ void CPPEditorWidget::showPreProcessorWidget() QSharedPointer updater = m_modelManager->cppEditorSupport(editor())->snapshotUpdater(); const QString &additionals = preProcessorDialog.additionalPreProcessorDirectives(); + updater->setProjectPart(preProcessorDialog.projectPart()); updater->setEditorDefines(additionals.toUtf8()); updater->update(m_modelManager->workingCopy()); diff --git a/src/plugins/cppeditor/cpppreprocessordialog.cpp b/src/plugins/cppeditor/cpppreprocessordialog.cpp index e9649625559..983bbe9aca3 100644 --- a/src/plugins/cppeditor/cpppreprocessordialog.cpp +++ b/src/plugins/cppeditor/cpppreprocessordialog.cpp @@ -112,6 +112,11 @@ int CppPreProcessorDialog::exec() return Accepted; } +CppTools::ProjectPart::Ptr CppPreProcessorDialog::projectPart() const +{ + return m_partAdditions[m_ui->projectComboBox->currentIndex()].projectPart; +} + QString CppPreProcessorDialog::additionalPreProcessorDirectives() const { return m_ui->editWidget->toPlainText(); diff --git a/src/plugins/cppeditor/cpppreprocessordialog.h b/src/plugins/cppeditor/cpppreprocessordialog.h index c56e397fe11..c71e387e874 100644 --- a/src/plugins/cppeditor/cpppreprocessordialog.h +++ b/src/plugins/cppeditor/cpppreprocessordialog.h @@ -50,6 +50,8 @@ public: ~CppPreProcessorDialog(); int exec(); + + CppTools::ProjectPart::Ptr projectPart() const; QString additionalPreProcessorDirectives() const; private slots: diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp index cbf11126bc8..bbe1a481aae 100644 --- a/src/plugins/cpptools/cppmodelmanager.cpp +++ b/src/plugins/cpptools/cppmodelmanager.cpp @@ -689,12 +689,14 @@ private: /// Make sure that m_projectMutex is locked when calling this. void CppModelManager::recalculateFileToProjectParts() { + m_projectFileToProjectPart.clear(); m_fileToProjectParts.clear(); foreach (const ProjectInfo &projectInfo, m_projectToProjectsInfo) { foreach (const ProjectPart::Ptr &projectPart, projectInfo.projectParts()) { - foreach (const ProjectFile &cxxFile, projectPart->files) { + m_projectFileToProjectPart[projectPart->projectFile] = projectPart; + foreach (const ProjectFile &cxxFile, projectPart->files) m_fileToProjectParts[cxxFile.path].append(projectPart); - } + } } } @@ -774,6 +776,11 @@ QFuture CppModelManager::updateProjectInfo(const ProjectInfo &newProjectIn return updateSourceFiles(filesToReindex, ForcedProgressNotification); } +ProjectPart::Ptr CppModelManager::projectPartForProjectFile(const QString &projectFile) const +{ + return m_projectFileToProjectPart.value(projectFile); +} + QList CppModelManager::projectPart(const QString &fileName) const { return m_fileToProjectParts.value(fileName); diff --git a/src/plugins/cpptools/cppmodelmanager.h b/src/plugins/cpptools/cppmodelmanager.h index 0bc4ee750d4..3bddb955ad9 100644 --- a/src/plugins/cpptools/cppmodelmanager.h +++ b/src/plugins/cpptools/cppmodelmanager.h @@ -75,6 +75,8 @@ public: virtual ProjectInfo projectInfo(ProjectExplorer::Project *project) const; virtual QFuture updateProjectInfo(const ProjectInfo &newProjectInfo); + /// \return The project part with the given project file + virtual ProjectPart::Ptr projectPartForProjectFile(const QString &projectFile) const; /// \return All project parts that mention the given file name as one of the sources/headers. virtual QList projectPart(const QString &fileName) const; /// This is a fall-back function: find all files that includes the file directly or indirectly, @@ -199,6 +201,7 @@ private: mutable QMutex m_projectMutex; QMap m_projectToProjectsInfo; QMap > m_fileToProjectParts; + QMap m_projectFileToProjectPart; // The members below are cached/(re)calculated from the projects and/or their project parts bool m_dirty; QStringList m_projectFiles; diff --git a/src/plugins/cpptools/cppmodelmanagerinterface.h b/src/plugins/cpptools/cppmodelmanagerinterface.h index 49a9eea066f..2cc0cbae647 100644 --- a/src/plugins/cpptools/cppmodelmanagerinterface.h +++ b/src/plugins/cpptools/cppmodelmanagerinterface.h @@ -233,6 +233,7 @@ public: virtual QList projectInfos() const = 0; virtual ProjectInfo projectInfo(ProjectExplorer::Project *project) const = 0; virtual QFuture updateProjectInfo(const ProjectInfo &pinfo) = 0; + virtual ProjectPart::Ptr projectPartForProjectFile(const QString &projectFile) const = 0; virtual QList projectPart(const QString &fileName) const = 0; virtual QList projectPartFromDependencies(const QString &fileName) const = 0; virtual ProjectPart::Ptr fallbackProjectPart() const = 0;