From 6575485609dc67404cd966687ba58dc26c09be66 Mon Sep 17 00:00:00 2001 From: Eberhard Graether Date: Wed, 7 Dec 2016 21:04:19 +0100 Subject: [PATCH] logic: Improved code view performance by removing duplicate TokenLocation check --- src/lib/data/PersistentStorage.cpp | 2 +- src/lib/data/location/TokenLocationFile.cpp | 36 +++------------------ 2 files changed, 6 insertions(+), 32 deletions(-) diff --git a/src/lib/data/PersistentStorage.cpp b/src/lib/data/PersistentStorage.cpp index 29f0259b..726e77bd 100644 --- a/src/lib/data/PersistentStorage.cpp +++ b/src/lib/data/PersistentStorage.cpp @@ -966,7 +966,7 @@ std::shared_ptr PersistentStorage::getTokenLocationsFor collection->addTokenLocation( location.id, occurrences.elementId, - m_sqliteStorage.getFileById(location.fileNodeId).filePath, // TODO: optimize: only once per file! + getFileNodePath(location.fileNodeId), location.startLine, location.startCol, location.endLine, diff --git a/src/lib/data/location/TokenLocationFile.cpp b/src/lib/data/location/TokenLocationFile.cpp index 74b44331..61603d94 100644 --- a/src/lib/data/location/TokenLocationFile.cpp +++ b/src/lib/data/location/TokenLocationFile.cpp @@ -58,41 +58,15 @@ TokenLocation* TokenLocationFile::addTokenLocation( { TokenLocationLine* line = createTokenLocationLine(startLineNumber); - // Check if a TokenLocation with the same start and end was already added. - TokenLocation* start = nullptr; - line->forEachStartTokenLocation( - [&](TokenLocation* startLocation) - { - if (start) - { - return; - } + TokenLocation* start = line->addStartTokenLocation(locationId, tokenId, startColumnNumber); - TokenLocation* endLocation = startLocation->getEndTokenLocation(); - - if (startLocation->getTokenId() == tokenId && - startLocation->getColumnNumber() == startColumnNumber && - endLocation && - endLocation->getLineNumber() == endLineNumber && - endLocation->getColumnNumber() == endColumnNumber) - { - start = startLocation; - } - } - ); - - if (!start) + if (startLineNumber != endLineNumber) { - start = line->addStartTokenLocation(locationId, tokenId, startColumnNumber); - - if (startLineNumber != endLineNumber) - { - line = createTokenLocationLine(endLineNumber); - } - - line->addEndTokenLocation(start, endColumnNumber); + line = createTokenLocationLine(endLineNumber); } + line->addEndTokenLocation(start, endColumnNumber); + return start; }