forked from qt-creator/qt-creator
		
	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>
This commit is contained in:
		@@ -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;
 | 
			
		||||
 
 | 
			
		||||
@@ -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) {
 | 
			
		||||
 
 | 
			
		||||
@@ -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()) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user