diff --git a/src/lib/utility/file/FileRegister.cpp b/src/lib/utility/file/FileRegister.cpp index a04f2ee6..d476316f 100644 --- a/src/lib/utility/file/FileRegister.cpp +++ b/src/lib/utility/file/FileRegister.cpp @@ -49,7 +49,7 @@ FileRegister::~FileRegister() { } -FileRegisterStateData FileRegister::getStateData() const +const FileRegisterStateData& FileRegister::getStateData() const { return m_stateData; } diff --git a/src/lib/utility/file/FileRegister.h b/src/lib/utility/file/FileRegister.h index 885cc596..619fb3e1 100644 --- a/src/lib/utility/file/FileRegister.h +++ b/src/lib/utility/file/FileRegister.h @@ -12,7 +12,7 @@ public: FileRegister(const FileRegisterStateData& stateData, const std::set& indexedPaths, const std::set& excludedPaths); virtual ~FileRegister(); - FileRegisterStateData getStateData() const; + const FileRegisterStateData& getStateData() const; void markFileIndexing(const FilePath& filePath); void markIndexingFilesIndexed(); diff --git a/src/lib/utility/file/FileRegisterStateData.cpp b/src/lib/utility/file/FileRegisterStateData.cpp index 91e2f2f2..ef75d6a2 100644 --- a/src/lib/utility/file/FileRegisterStateData.cpp +++ b/src/lib/utility/file/FileRegisterStateData.cpp @@ -25,21 +25,13 @@ void FileRegisterStateData::inject(const FileRegisterStateData& o) void FileRegisterStateData::markFileIndexing(const FilePath& filePath) { std::lock_guard lock(m_filePathsMutex); - auto it = m_filePaths.find(filePath); - if (it != m_filePaths.end()) - { - it->second = STATE_INDEXING; - } - else - { - m_filePaths.insert(std::make_pair(filePath, STATE_INDEXING)); - } + m_filePaths[filePath] = STATE_INDEXING; } void FileRegisterStateData::markIndexingFilesIndexed() { std::lock_guard lock(m_filePathsMutex); - for (auto it: m_filePaths) + for (auto& it: m_filePaths) { if (it.second == STATE_INDEXING) { diff --git a/src/lib_cxx/data/parser/cxx/PreprocessorCallbacks.cpp b/src/lib_cxx/data/parser/cxx/PreprocessorCallbacks.cpp index 86972692..7e8f20bc 100644 --- a/src/lib_cxx/data/parser/cxx/PreprocessorCallbacks.cpp +++ b/src/lib_cxx/data/parser/cxx/PreprocessorCallbacks.cpp @@ -22,6 +22,8 @@ PreprocessorCallbacks::PreprocessorCallbacks( void PreprocessorCallbacks::FileChanged( clang::SourceLocation location, FileChangeReason reason, clang::SrcMgr::CharacteristicKind, clang::FileID prevID) { + m_currentPath = FilePath(); + FilePath filePath; const clang::FileEntry *fileEntry = m_sourceManager.getFileEntryForID(m_sourceManager.getFileID(location)); @@ -30,23 +32,19 @@ void PreprocessorCallbacks::FileChanged( filePath = FilePath(fileEntry->getName()).canonical(); } - const bool fileIsInProject = m_fileRegister->hasFilePath(filePath); - if (!filePath.empty() && fileIsInProject) + if (!filePath.empty() && m_fileRegister->hasFilePath(filePath)) { m_client->onFileParsed(FileSystem::getFileInfoForPath(filePath)); // todo: fix for tests - if (reason == EnterFile && !m_fileRegister->fileIsIndexed(filePath)) - { - m_fileRegister->markFileIndexing(filePath); - } - } - if (!filePath.empty() && fileIsInProject && !m_fileRegister->fileIsIndexed(filePath)) - { - m_currentPath = filePath; - } - else - { - m_currentPath = FilePath(); + if (!m_fileRegister->fileIsIndexed(filePath)) + { + m_currentPath = filePath; + + if (reason == EnterFile) + { + m_fileRegister->markFileIndexing(filePath); + } + } } }