From 87a3aac18f70daa6921292f944fb69378c75aaf7 Mon Sep 17 00:00:00 2001 From: Erik Verbruggen Date: Mon, 19 Aug 2013 18:20:49 +0200 Subject: [PATCH] C++: add fallback project part querying When a file is not part of any other project part, this project part can be used to get at least some compiler flags, defines, etc. to use. This can happen when either a file outside a project is opened, or when the project description is incomplete. Change-Id: I5d595fae7195e8b61dbad14368b6cae9eb15c21b Reviewed-by: Nikolai Kosjar --- src/plugins/cpptools/cppmodelmanager.cpp | 17 ++++++++++++++++- src/plugins/cpptools/cppmodelmanager.h | 1 + .../cpptools/cppmodelmanagerinterface.cpp | 2 +- src/plugins/cpptools/cppmodelmanagerinterface.h | 5 ++++- 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp index 6e942767fdb..0de3470e628 100644 --- a/src/plugins/cpptools/cppmodelmanager.cpp +++ b/src/plugins/cpptools/cppmodelmanager.cpp @@ -410,7 +410,7 @@ void CppModelManager::dumpModelManagerConfiguration() cxxExtensions << QLatin1String("MicrosoftExtensions"); if (part->cxxExtensions & ProjectPart::BorlandExtensions) cxxExtensions << QLatin1String("BorlandExtensions"); - if (part->cxxExtensions & ProjectPart::OpenMP) + if (part->cxxExtensions & ProjectPart::OpenMPExtensions) cxxExtensions << QLatin1String("OpenMP"); qDebug() << "cVersion:" << cVersion; @@ -777,6 +777,21 @@ QList CppModelManager::projectPart(const QString &fileName) co return parts; } +ProjectPart::Ptr CppModelManager::fallbackProjectPart() const +{ + ProjectPart::Ptr part(new ProjectPart); + + part->defines = m_definedMacros; + part->includePaths = m_includePaths; + part->frameworkPaths = m_frameworkPaths; + part->cVersion = ProjectPart::C11; + part->cxxVersion = ProjectPart::CXX11; + part->cxxExtensions = ProjectPart::AllExtensions; + part->qtVersion = ProjectPart::Qt5; + + return part; +} + bool CppModelManager::isCppEditor(Core::IEditor *editor) const { return editor->context().contains(ProjectExplorer::Constants::LANG_CXX); diff --git a/src/plugins/cpptools/cppmodelmanager.h b/src/plugins/cpptools/cppmodelmanager.h index ff28eadd2df..8f6877ff60e 100644 --- a/src/plugins/cpptools/cppmodelmanager.h +++ b/src/plugins/cpptools/cppmodelmanager.h @@ -74,6 +74,7 @@ public: virtual ProjectInfo projectInfo(ProjectExplorer::Project *project) const; virtual QFuture updateProjectInfo(const ProjectInfo &newProjectInfo); virtual QList projectPart(const QString &fileName) const; + virtual ProjectPart::Ptr fallbackProjectPart() const; virtual CPlusPlus::Snapshot snapshot() const; virtual Document::Ptr document(const QString &fileName) const; diff --git a/src/plugins/cpptools/cppmodelmanagerinterface.cpp b/src/plugins/cpptools/cppmodelmanagerinterface.cpp index cb5ba96e6d1..d2e138dc66c 100644 --- a/src/plugins/cpptools/cppmodelmanagerinterface.cpp +++ b/src/plugins/cpptools/cppmodelmanagerinterface.cpp @@ -147,7 +147,7 @@ void ProjectPart::evaluateToolchain(const ToolChain *tc, if (cxx & ToolChain::MicrosoftExtensions) cxxExtensions |= MicrosoftExtensions; if (cxx & ToolChain::OpenMP) - cxxExtensions |= OpenMP; + cxxExtensions |= OpenMPExtensions; cWarningFlags = tc->warningFlags(cflags); cxxWarningFlags = tc->warningFlags(cxxflags); diff --git a/src/plugins/cpptools/cppmodelmanagerinterface.h b/src/plugins/cpptools/cppmodelmanagerinterface.h index dd9f8b9ac33..8a276ece481 100644 --- a/src/plugins/cpptools/cppmodelmanagerinterface.h +++ b/src/plugins/cpptools/cppmodelmanagerinterface.h @@ -85,7 +85,9 @@ public: GnuExtensions = 0x1, MicrosoftExtensions = 0x2, BorlandExtensions = 0x4, - OpenMP = 0x8 + OpenMPExtensions = 0x8, + + AllExtensions = GnuExtensions | MicrosoftExtensions | BorlandExtensions | OpenMPExtensions }; Q_DECLARE_FLAGS(CXXExtensions, CXXExtension) @@ -217,6 +219,7 @@ public: virtual ProjectInfo projectInfo(ProjectExplorer::Project *project) const = 0; virtual QFuture updateProjectInfo(const ProjectInfo &pinfo) = 0; virtual QList projectPart(const QString &fileName) const = 0; + virtual ProjectPart::Ptr fallbackProjectPart() const = 0; virtual QStringList includePaths() = 0;