summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools
diff options
context:
space:
mode:
authorFrancois Ferrand <thetypz@gmail.com>2016-02-26 18:48:39 +0100
committerFrancois Ferrand <thetypz@gmail.com>2016-08-23 12:35:04 +0000
commit7b2c09a1186f2cf69f276017ba08da89560f55be (patch)
treee336ae35ba2779b4051d1fcdfb9003b40792b88a /src/plugins/cpptools
parent285c8a7543aae0d71949451f04c99a4924900104 (diff)
downloadqt-creator-7b2c09a1186f2cf69f276017ba08da89560f55be.tar.gz
C++: Disable C++ keywords in C files
In some (legacy) C files, new and delete may be used for regular identifier. There are some limitations: * Header files have no 'implicit' type, and may be parsed as C++ or ObjC depending on the other files in the project. * QMakeProject use a single ProjectPart for C and C++ files, so there will still be the issue. Change-Id: Iec11687b35f7ccf1e7c0d091b143ae90d950e440 Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
Diffstat (limited to 'src/plugins/cpptools')
-rw-r--r--src/plugins/cpptools/cppcodeformatter.cpp1
-rw-r--r--src/plugins/cpptools/projectpart.cpp3
-rw-r--r--src/plugins/cpptools/projectpartbuilder.cpp13
3 files changed, 10 insertions, 7 deletions
diff --git a/src/plugins/cpptools/cppcodeformatter.cpp b/src/plugins/cpptools/cppcodeformatter.cpp
index 0d3586dcd1..e27832a2ff 100644
--- a/src/plugins/cpptools/cppcodeformatter.cpp
+++ b/src/plugins/cpptools/cppcodeformatter.cpp
@@ -1066,6 +1066,7 @@ int CodeFormatter::tokenizeBlock(const QTextBlock &block, bool *endedJoined)
features.qtEnabled = true;
features.qtMocRunEnabled = true;
features.qtKeywordsEnabled = true;
+ features.cxxEnabled = true;
features.objCEnabled = true;
SimpleLexer tokenize;
diff --git a/src/plugins/cpptools/projectpart.cpp b/src/plugins/cpptools/projectpart.cpp
index e091c50483..85ea324c9f 100644
--- a/src/plugins/cpptools/projectpart.cpp
+++ b/src/plugins/cpptools/projectpart.cpp
@@ -45,6 +45,9 @@ void ProjectPart::updateLanguageFeatures()
{
const bool hasQt = qtVersion != NoQt;
languageFeatures.cxx11Enabled = languageVersion >= CXX11;
+ languageFeatures.cxxEnabled = languageVersion >= CXX98;
+ languageFeatures.c99Enabled = languageVersion >= C99;
+ languageFeatures.objCEnabled = languageExtensions & ObjectiveCExtensions;
languageFeatures.qtEnabled = hasQt;
languageFeatures.qtMocRunEnabled = hasQt;
if (!hasQt) {
diff --git a/src/plugins/cpptools/projectpartbuilder.cpp b/src/plugins/cpptools/projectpartbuilder.cpp
index 224f0678f8..b01795f9cf 100644
--- a/src/plugins/cpptools/projectpartbuilder.cpp
+++ b/src/plugins/cpptools/projectpartbuilder.cpp
@@ -208,11 +208,11 @@ void ProjectPartBuilder::setConfigFileName(const QString &configFileName)
QList<Core::Id> ProjectPartBuilder::createProjectPartsForFiles(const QStringList &files,
FileClassifier fileClassifier)
{
- QList<Core::Id> languages;
+ QSet<Core::Id> languages;
ProjectFileCategorizer cat(m_templatePart->displayName, files, fileClassifier);
if (cat.hasNoParts())
- return languages;
+ return languages.toList();
using CppTools::ProjectFile;
using CppTools::ProjectPart;
@@ -223,7 +223,7 @@ QList<Core::Id> ProjectPartBuilder::createProjectPartsForFiles(const QStringList
ProjectPart::C11,
ProjectPart::NoExtensions);
// TODO: there is no C...
-// languages += ProjectExplorer::Constants::LANG_C;
+ languages += ProjectExplorer::Constants::LANG_CXX;
}
if (cat.hasObjcSources()) {
createProjectPart(cat.objcSources(),
@@ -231,7 +231,7 @@ QList<Core::Id> ProjectPartBuilder::createProjectPartsForFiles(const QStringList
ProjectPart::C11,
ProjectPart::ObjectiveCExtensions);
// TODO: there is no Ojective-C...
-// languages += ProjectExplorer::Constants::LANG_OBJC;
+ languages += ProjectExplorer::Constants::LANG_CXX;
}
if (cat.hasCxxSources()) {
createProjectPart(cat.cxxSources(),
@@ -249,7 +249,7 @@ QList<Core::Id> ProjectPartBuilder::createProjectPartsForFiles(const QStringList
languages += ProjectExplorer::Constants::LANG_CXX;
}
- return languages;
+ return languages.toList();
}
namespace {
@@ -316,8 +316,6 @@ void ProjectPartBuilder::evaluateProjectPartToolchain(
languageVersion = ProjectPart::CXX11;
else if (flags & ToolChain::StandardCxx98)
languageVersion = ProjectPart::CXX98;
- else
- languageVersion = ProjectPart::CXX11;
auto &languageExtensions = projectPart->languageExtensions;
@@ -357,6 +355,7 @@ void ProjectPartBuilder::createProjectPart(const QVector<ProjectFile> &theSource
ProjectPart::Ptr part(m_templatePart->copy());
part->displayName = partName;
part->files = theSources;
+ part->languageVersion = languageVersion;
QTC_ASSERT(part->project, return);
if (ProjectExplorer::Target *activeTarget = part->project->activeTarget()) {