From b8d0f88336f8433d0fb6684928066162675c96cf Mon Sep 17 00:00:00 2001 From: mlangkabel Date: Tue, 30 Jul 2019 14:33:07 +0200 Subject: [PATCH] logic: fixed source location recording for symbols defined inside PCH files --- src/lib_cxx/data/parser/cxx/CxxAstVisitor.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/lib_cxx/data/parser/cxx/CxxAstVisitor.cpp b/src/lib_cxx/data/parser/cxx/CxxAstVisitor.cpp index dc6783a6..660a8908 100644 --- a/src/lib_cxx/data/parser/cxx/CxxAstVisitor.cpp +++ b/src/lib_cxx/data/parser/cxx/CxxAstVisitor.cpp @@ -66,6 +66,24 @@ CanonicalFilePathCache* CxxAstVisitor::getCanonicalFilePathCache() const void CxxAstVisitor::indexDecl(clang::Decl* d) { LOG_INFO("starting AST traversal"); + + clang::SourceManager& sourceManager = m_astContext->getSourceManager(); + for (auto it = sourceManager.fileinfo_begin(); it != sourceManager.fileinfo_end(); it++) + { + const clang::FileEntry* fileEntry = it->first; + if (m_canonicalFilePathCache->getFileSymbolId(fileEntry) == 0) + { + const clang::FileID fileId = sourceManager.translateFile(fileEntry); + if (fileId.isValid()) + { + const FilePath filePath = m_canonicalFilePathCache->getCanonicalFilePath(fileEntry); + const bool pathIsProjectFile = m_canonicalFilePathCache->isProjectFile(fileId, sourceManager); + const Id symbolId = m_client->recordFile(filePath, pathIsProjectFile); + m_canonicalFilePathCache->addFileSymbolId(fileId, filePath, symbolId); + } + } + } + this->TraverseDecl(d); }