diff --git a/src/lib/component/controller/CodeController.cpp b/src/lib/component/controller/CodeController.cpp index e0364bf9..aeb3eeb8 100644 --- a/src/lib/component/controller/CodeController.cpp +++ b/src/lib/component/controller/CodeController.cpp @@ -311,6 +311,7 @@ void CodeController::handleMessage(MessageShowErrors* message) params.clearSnippets = true; params.errorInfos = errors; params.showContents = !message->isReplayed(); + params.useSingleFileCache = false; showCodeSnippets(snippets, params, false); } @@ -335,6 +336,7 @@ void CodeController::handleMessage(MessageSearchFullText* message) CodeView::CodeParams params; params.clearSnippets = true; params.showContents = !message->isReplayed(); + params.useSingleFileCache = false; showCodeSnippets(getSnippetsForCollection(m_collection), params); } @@ -413,7 +415,10 @@ std::vector CodeController::getSnippetsForFileWithState( params.modificationTime = m_storageAccess->getFileInfoForFilePath(filePath).lastWriteTime; - params.locationFile = m_collection->getSourceLocationFileByPath(filePath); + // make a copy of SourceLocationFile so that isWhole flag is different for first snippet adding the file + // and second snippet adding the content + params.locationFile = + std::make_shared(*m_collection->getSourceLocationFileByPath(filePath).get()); if (params.locationFile) { params.locationFile->setIsWhole(true); @@ -714,7 +719,7 @@ std::vector CodeController::getProjectDescription(SourceLocationFil return lines; } -void CodeController::expandVisibleSnippets(std::vector* snippets) const +void CodeController::expandVisibleSnippets(std::vector* snippets, bool useSingleFileCache) const { TRACE(); @@ -736,7 +741,7 @@ void CodeController::expandVisibleSnippets(std::vector* snipp continue; } - if (!inListMode && getView()->hasSingleFileCached(oldSnippet.locationFile->getFilePath())) + if (useSingleFileCache && !inListMode && getView()->hasSingleFileCached(oldSnippet.locationFile->getFilePath())) { continue; } @@ -835,7 +840,7 @@ void CodeController::saveOrRestoreViewMode(MessageBase* message) void CodeController::showCodeSnippets( std::vector snippets, const CodeView::CodeParams params, bool addSourceLocations) { - expandVisibleSnippets(&snippets); + expandVisibleSnippets(&snippets, params.useSingleFileCache); CodeView* view = getView(); view->showCodeSnippets(snippets, params); diff --git a/src/lib/component/controller/CodeController.h b/src/lib/component/controller/CodeController.h index b97ad6d8..6dc10a28 100644 --- a/src/lib/component/controller/CodeController.h +++ b/src/lib/component/controller/CodeController.h @@ -91,7 +91,7 @@ private: std::vector getProjectDescription(SourceLocationFile* locationFile) const; - void expandVisibleSnippets(std::vector* snippets) const; + void expandVisibleSnippets(std::vector* snippets, bool useSingleFileCache) const; void addAllSourceLocations(std::vector* snippets) const; void addModificationTimes(std::vector* snippets) const; diff --git a/src/lib/component/view/CodeView.h b/src/lib/component/view/CodeView.h index a7f82132..a6c4ae24 100644 --- a/src/lib/component/view/CodeView.h +++ b/src/lib/component/view/CodeView.h @@ -29,13 +29,10 @@ public: struct CodeParams { - CodeParams() - : clearSnippets(false) - , showContents(false) - {} + bool clearSnippets = false; + bool showContents = false; + bool useSingleFileCache = true; - bool clearSnippets; - bool showContents; std::vector activeTokenIds; std::vector errorInfos; }; diff --git a/src/lib_gui/qt/element/QtCodeNavigator.cpp b/src/lib_gui/qt/element/QtCodeNavigator.cpp index aaadcc06..1251d220 100644 --- a/src/lib_gui/qt/element/QtCodeNavigator.cpp +++ b/src/lib_gui/qt/element/QtCodeNavigator.cpp @@ -28,6 +28,7 @@ QtCodeNavigator::QtCodeNavigator(QWidget* parent) , m_value(0) , m_refIndex(0) , m_singleHasNewFile(false) + , m_useSingleFileCache(false) { QVBoxLayout* layout = new QVBoxLayout(); layout->setSpacing(0); @@ -147,8 +148,6 @@ void QtCodeNavigator::updateCodeSnippet(const CodeSnippetParams& params) void QtCodeNavigator::addFile(std::shared_ptr locationFile, int refCount, TimeStamp modificationTime) { - bool firstFile = m_references.size() == 0; - m_list->addFile(locationFile->getFilePath(), locationFile->isWhole(), refCount, modificationTime, locationFile->isComplete()); if (locationFile->isWhole()) @@ -192,11 +191,6 @@ void QtCodeNavigator::addFile(std::shared_ptr locationFile, } ); } - - if (firstFile && m_references.size() && m_references[0].locationType != LOCATION_TOKEN) - { - clearCaches(); - } } void QtCodeNavigator::addedFiles() @@ -217,13 +211,11 @@ void QtCodeNavigator::addedFiles() void QtCodeNavigator::clear() { - clearCodeSnippets(); - clearCaches(); - + clearCodeSnippets(false); updateRefLabel(); } -void QtCodeNavigator::clearCodeSnippets() +void QtCodeNavigator::clearCodeSnippets(bool useSingleFileCache) { m_list->clear(); @@ -235,10 +227,11 @@ void QtCodeNavigator::clearCodeSnippets() m_activeTokenId = 0; - if (m_references.size() && m_references[0].locationType != LOCATION_TOKEN) + if (!m_useSingleFileCache || !useSingleFileCache) { clearCaches(); } + m_useSingleFileCache = useSingleFileCache; m_references.clear(); m_activeReference = Reference(); @@ -385,7 +378,7 @@ bool QtCodeNavigator::isInListMode() const bool QtCodeNavigator::hasSingleFileCached(const FilePath& filePath) const { - return m_single->hasFileCached(filePath); + return m_useSingleFileCache && m_single->hasFileCached(filePath); } void QtCodeNavigator::showActiveSnippet( diff --git a/src/lib_gui/qt/element/QtCodeNavigator.h b/src/lib_gui/qt/element/QtCodeNavigator.h index e8be49c9..0e9534e0 100644 --- a/src/lib_gui/qt/element/QtCodeNavigator.h +++ b/src/lib_gui/qt/element/QtCodeNavigator.h @@ -49,7 +49,7 @@ public: void addedFiles(); void clear(); - void clearCodeSnippets(); + void clearCodeSnippets(bool useSingleFileCache); void clearFile(); void clearCaches(); void clearSnippetReferences(); @@ -203,6 +203,7 @@ private: ScrollRequest m_scrollRequest; bool m_singleHasNewFile; + bool m_useSingleFileCache; std::vector> m_screenMatches; Id m_activeScreenMatchId = 0; diff --git a/src/lib_gui/qt/view/QtCodeView.cpp b/src/lib_gui/qt/view/QtCodeView.cpp index 6723306d..4fabbc17 100644 --- a/src/lib_gui/qt/view/QtCodeView.cpp +++ b/src/lib_gui/qt/view/QtCodeView.cpp @@ -113,7 +113,7 @@ void QtCodeView::showCodeSnippets(const std::vector& snippets if (params.clearSnippets) { - m_widget->clearCodeSnippets(); + m_widget->clearCodeSnippets(params.useSingleFileCache); m_widget->setActiveTokenIds(params.activeTokenIds); m_widget->setErrorInfos(params.errorInfos);