diff options
author | Orgad Shaneh <orgad.shaneh@audiocodes.com> | 2015-02-15 23:43:26 +0200 |
---|---|---|
committer | Orgad Shaneh <orgads@gmail.com> | 2015-02-20 12:54:49 +0000 |
commit | f3a2795c3bfc892695a46621e6bc97a2742d8766 (patch) | |
tree | f98bce607c287fb4bd077641632a71e77f89711c /src/plugins/cpptools/cppprojects.cpp | |
parent | 97cbfb95bbcebe06484edaeb446e52bec04626f3 (diff) | |
download | qt-creator-f3a2795c3bfc892695a46621e6bc97a2742d8766.tar.gz |
C++: Use correct features for document parsing
Task-number: QTCREATORBUG-8007
Change-Id: Ic96aaa433442812a99bac9d16bb9124d66762e8c
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
Diffstat (limited to 'src/plugins/cpptools/cppprojects.cpp')
-rw-r--r-- | src/plugins/cpptools/cppprojects.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
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<HeaderPath> incs; foreach (const ProjectPart::Ptr &part, m_projectParts) { + part->updateLanguageFeatures(); // Update header paths foreach (const HeaderPath &hp, part->headerPaths) { if (!incs.contains(hp)) { |