diff --git a/src/lib/component/controller/CodeController.cpp b/src/lib/component/controller/CodeController.cpp index 5a2896cf..537fca3a 100644 --- a/src/lib/component/controller/CodeController.cpp +++ b/src/lib/component/controller/CodeController.cpp @@ -144,9 +144,18 @@ std::vector CodeController::getSnippetsForFile(cons { std::shared_ptr textAccess = TextAccess::createFromFile(file->getFilePath().str()); - std::vector> ranges = getSnippetRangesForFile(file); - std::vector snippets; + std::vector> ranges; + if (file->isWholeCopy) + { + ranges.push_back(std::make_pair(1, textAccess->getLineCount())); + } + else + { + ranges = getSnippetRangesForFile(file); + } + + std::vector snippets; for (const std::pair& range: ranges) { CodeView::CodeSnippetParams params; diff --git a/src/lib/data/Storage.cpp b/src/lib/data/Storage.cpp index c8a116f3..6e7cd03c 100644 --- a/src/lib/data/Storage.cpp +++ b/src/lib/data/Storage.cpp @@ -957,17 +957,8 @@ TokenLocationCollection Storage::getTokenLocationsForTokenIds(const std::vector< if (token->isNode() && dynamic_cast(token)->isType(Node::NODE_FILE)) { - TokenLocationFile* locationFile = - m_locationCollection.findTokenLocationFileByPath(dynamic_cast(token)->getFullName()); - if (locationFile) - { - locationFile->forEachTokenLocation( - [&ret](TokenLocation* tokenLocation) -> void - { - ret.addTokenLocationAsPlainCopy(tokenLocation); - } - ); - } + ret.addTokenLocationFileAsPlainCopy(m_locationCollection.findTokenLocationFileByPath( + dynamic_cast(token)->getComponent()->getFilePath())); } else { diff --git a/src/lib/data/location/TokenLocationCollection.cpp b/src/lib/data/location/TokenLocationCollection.cpp index e9ab0a43..cfe99446 100644 --- a/src/lib/data/location/TokenLocationCollection.cpp +++ b/src/lib/data/location/TokenLocationCollection.cpp @@ -141,6 +141,20 @@ void TokenLocationCollection::removeTokenLocationFile(TokenLocationFile* file) m_files.erase(file->getFilePath()); } +TokenLocationFile* TokenLocationCollection::addTokenLocationFileAsPlainCopy(const TokenLocationFile* locationFile) +{ + TokenLocationFile* file = createTokenLocationFile(locationFile->getFilePath()); + locationFile->forEachTokenLocation( + [this, &file](TokenLocation* tokenLocation) -> void + { + TokenLocation* copy = file->addTokenLocationAsPlainCopy(tokenLocation); + m_locations.emplace(copy->getId(), copy); + } + ); + file->isWholeCopy = true; + return file; +} + TokenLocation* TokenLocationCollection::addTokenLocationAsPlainCopy(const TokenLocation* location) { const FilePath& filePath = location->getTokenLocationLine()->getTokenLocationFile()->getFilePath(); diff --git a/src/lib/data/location/TokenLocationCollection.h b/src/lib/data/location/TokenLocationCollection.h index 651807a9..6c7277d9 100644 --- a/src/lib/data/location/TokenLocationCollection.h +++ b/src/lib/data/location/TokenLocationCollection.h @@ -44,6 +44,7 @@ public: void removeTokenLocationFile(TokenLocationFile* file); + TokenLocationFile* addTokenLocationFileAsPlainCopy(const TokenLocationFile* locationFile); TokenLocation* addTokenLocationAsPlainCopy(const TokenLocation* location); void clear(); diff --git a/src/lib/data/location/TokenLocationFile.cpp b/src/lib/data/location/TokenLocationFile.cpp index f7fb0f01..35d1ae73 100644 --- a/src/lib/data/location/TokenLocationFile.cpp +++ b/src/lib/data/location/TokenLocationFile.cpp @@ -6,7 +6,8 @@ #include "data/location/TokenLocationLine.h" TokenLocationFile::TokenLocationFile(const FilePath& filePath) - : m_filePath(filePath) + : isWholeCopy(false) + , m_filePath(filePath) { } diff --git a/src/lib/data/location/TokenLocationFile.h b/src/lib/data/location/TokenLocationFile.h index b2e8d177..df5eac77 100644 --- a/src/lib/data/location/TokenLocationFile.h +++ b/src/lib/data/location/TokenLocationFile.h @@ -40,6 +40,8 @@ public: TokenLocation* addTokenLocationAsPlainCopy(const TokenLocation* location); + bool isWholeCopy; + private: TokenLocationLine* findTokenLocationLine(unsigned int lineNumber) const; TokenLocationLine* createTokenLocationLine(unsigned int lineNumber);