From f3a2795c3bfc892695a46621e6bc97a2742d8766 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Sun, 15 Feb 2015 23:43:26 +0200 Subject: C++: Use correct features for document parsing Task-number: QTCREATORBUG-8007 Change-Id: Ic96aaa433442812a99bac9d16bb9124d66762e8c Reviewed-by: Nikolai Kosjar --- src/plugins/cpptools/cppprojects.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'src/plugins/cpptools/cppprojects.cpp') diff --git a/src/plugins/cpptools/cppprojects.cpp b/src/plugins/cpptools/cppprojects.cpp index 4bea18d691..03d5bdcbe8 100644 --- a/src/plugins/cpptools/cppprojects.cpp +++ b/src/plugins/cpptools/cppprojects.cpp @@ -108,6 +108,29 @@ void ProjectPart::evaluateToolchain(const ToolChain *tc, } toolchainDefines = tc->predefinedMacros(commandLineFlags); + updateLanguageFeatures(); +} + +void ProjectPart::updateLanguageFeatures() +{ + const bool hasQt = qtVersion != NoQt; + languageFeatures.cxx11Enabled = languageVersion >= CXX11; + languageFeatures.qtEnabled = hasQt; + languageFeatures.qtMocRunEnabled = hasQt; + if (!hasQt) { + languageFeatures.qtKeywordsEnabled = false; + } else { + const QByteArray noKeywordsMacro = "#define QT_NO_KEYWORDS"; + const int noKeywordsIndex = projectDefines.indexOf(noKeywordsMacro); + if (noKeywordsIndex == -1) { + languageFeatures.qtKeywordsEnabled = true; + } else { + const char nextChar = projectDefines.at(noKeywordsIndex + noKeywordsMacro.length()); + // Detect "#define QT_NO_KEYWORDS" and "#define QT_NO_KEYWORDS 1", but exclude + // "#define QT_NO_KEYWORDS_FOO" + languageFeatures.qtKeywordsEnabled = nextChar != '\n' && nextChar != ' '; + } + } } ProjectPart::Ptr ProjectPart::copy() const @@ -198,6 +221,7 @@ void ProjectInfo::finish() QSet incs; foreach (const ProjectPart::Ptr &part, m_projectParts) { + part->updateLanguageFeatures(); // Update header paths foreach (const HeaderPath &hp, part->headerPaths) { if (!incs.contains(hp)) { -- cgit v1.2.1