diff --git a/src/libs/cplusplus/FastPreprocessor.cpp b/src/libs/cplusplus/FastPreprocessor.cpp index 45f1d24d37a..66df01c3488 100644 --- a/src/libs/cplusplus/FastPreprocessor.cpp +++ b/src/libs/cplusplus/FastPreprocessor.cpp @@ -63,7 +63,11 @@ QByteArray FastPreprocessor::run(Document::Ptr newDoc, const QByteArray &source) if (Document::Ptr doc = _snapshot.document(fileName)) { _merged.insert(fileName); - mergeEnvironment(Preprocessor::configurationFileName); + for (Snapshot::const_iterator i = _snapshot.begin(), ei = _snapshot.end(); i != ei; ++i) { + if (isInjectedFile(i.key())) + mergeEnvironment(i.key()); + } + foreach (const Document::Include &i, doc->resolvedIncludes()) mergeEnvironment(i.resolvedFileName()); } diff --git a/src/libs/cplusplus/PreprocessorClient.h b/src/libs/cplusplus/PreprocessorClient.h index 9b0ad80d19a..217337a112b 100644 --- a/src/libs/cplusplus/PreprocessorClient.h +++ b/src/libs/cplusplus/PreprocessorClient.h @@ -32,11 +32,11 @@ #include +#include #include QT_BEGIN_NAMESPACE class QByteArray; -class QString; QT_END_NAMESPACE namespace CPlusPlus { @@ -99,6 +99,11 @@ public: virtual void stopSkippingBlocks(unsigned offset) = 0; virtual void sourceNeeded(unsigned line, const QString &fileName, IncludeType mode) = 0; + + static inline bool isInjectedFile(const QString &fileName) + { + return fileName.startsWith(QLatin1Char('<')) && fileName.endsWith(QLatin1Char('>')); + } }; } // namespace CPlusPlus diff --git a/src/plugins/cpptools/cpppreprocessor.cpp b/src/plugins/cpptools/cpppreprocessor.cpp index f60c853b832..63e64c61a16 100644 --- a/src/plugins/cpptools/cpppreprocessor.cpp +++ b/src/plugins/cpptools/cpppreprocessor.cpp @@ -416,7 +416,6 @@ void CppPreprocessor::sourceNeeded(unsigned line, const QString &fileName, Inclu if (m_dumpFileNameWhileParsing) { qDebug() << "Parsing file:" << absoluteFileName << "contents:" << contents.size() << "bytes"; - ; } Document::Ptr doc = m_snapshot.document(absoluteFileName); diff --git a/src/plugins/cpptools/cppsnapshotupdater.cpp b/src/plugins/cpptools/cppsnapshotupdater.cpp index 4b3e9fedb4c..11cd3ff5b32 100644 --- a/src/plugins/cpptools/cppsnapshotupdater.cpp +++ b/src/plugins/cpptools/cppsnapshotupdater.cpp @@ -153,15 +153,21 @@ void SnapshotUpdater::update(CppModelManager::WorkingCopy workingCopy) preproc.setIncludePaths(m_includePaths); preproc.setFrameworkPaths(m_frameworkPaths); preproc.run(configurationFileName); - if (m_usePrecompiledHeaders) + if (m_usePrecompiledHeaders) { foreach (const QString &precompiledHeader, m_precompiledHeaders) preproc.run(precompiledHeader); + } if (!m_editorDefines.isEmpty()) preproc.run(editorDefinesFileName); preproc.run(m_fileInEditor); m_snapshot = preproc.snapshot(); - m_snapshot = m_snapshot.simplified(document()); + Snapshot newSnapshot = m_snapshot.simplified(document()); + for (Snapshot::const_iterator i = m_snapshot.begin(), ei = m_snapshot.end(); i != ei; ++i) { + if (Client::isInjectedFile(i.key())) + newSnapshot.insert(i.value()); + } + m_snapshot = newSnapshot; m_deps.build(m_snapshot); foreach (Document::Ptr doc, m_snapshot) {