diff --git a/src/lib/component/controller/UndoRedoController.cpp b/src/lib/component/controller/UndoRedoController.cpp index 0c6643bf..c2a6af34 100644 --- a/src/lib/component/controller/UndoRedoController.cpp +++ b/src/lib/component/controller/UndoRedoController.cpp @@ -140,9 +140,7 @@ void UndoRedoController::handleMessage(MessageRefresh* message) if (requiresActivateFallbackToken()) { - NameHierarchy mainNameHierarchy; - mainNameHierarchy.push(std::make_shared("main", "int main()")); - Id nodeId = m_storageAccess->getIdForNodeWithNameHierarchy(mainNameHierarchy); + Id nodeId = m_storageAccess->getIdForNodeWithSearchNameHierarchy(NameHierarchy("main")); if (!nodeId) { nodeId = m_storageAccess->getIdForFirstNode(); diff --git a/src/lib/data/Storage.cpp b/src/lib/data/Storage.cpp index fba0de1f..ea5e81c5 100644 --- a/src/lib/data/Storage.cpp +++ b/src/lib/data/Storage.cpp @@ -764,6 +764,17 @@ Id Storage::getIdForNodeWithNameHierarchy(const NameHierarchy& nameHierarchy) co return m_sqliteStorage.getNodeBySerializedName(NameHierarchy::serialize(nameHierarchy)).id; } +Id Storage::getIdForNodeWithSearchNameHierarchy(const NameHierarchy& nameHierarchy) const +{ + SearchNode* node = m_tokenIndex.getNode(nameHierarchy); + if (node) + { + return node->getFirstTokenId(); + } + + return 0; +} + Id Storage::getIdForEdge( Edge::EdgeType type, const NameHierarchy& fromNameHierarchy, const NameHierarchy& toNameHierarchy ) const diff --git a/src/lib/data/Storage.h b/src/lib/data/Storage.h index 223f743c..bd82bce1 100644 --- a/src/lib/data/Storage.h +++ b/src/lib/data/Storage.h @@ -134,6 +134,7 @@ public: // StorageAccess implementation virtual Id getIdForNodeWithNameHierarchy(const NameHierarchy& nameHierarchy) const; + virtual Id getIdForNodeWithSearchNameHierarchy(const NameHierarchy& nameHierarchy) const; virtual Id getIdForEdge( Edge::EdgeType type, const NameHierarchy& fromNameHierarchy, const NameHierarchy& toNameHierarchy) const; diff --git a/src/lib/data/access/StorageAccess.h b/src/lib/data/access/StorageAccess.h index dcddaacc..46c625b7 100644 --- a/src/lib/data/access/StorageAccess.h +++ b/src/lib/data/access/StorageAccess.h @@ -25,6 +25,7 @@ public: virtual ~StorageAccess(); virtual Id getIdForNodeWithNameHierarchy(const NameHierarchy& nameHierarchy) const = 0; + virtual Id getIdForNodeWithSearchNameHierarchy(const NameHierarchy& nameHierarchy) const = 0; virtual Id getIdForEdge( Edge::EdgeType type, const NameHierarchy& fromNameHierarchy, const NameHierarchy& toNameHierarchy) const = 0; diff --git a/src/lib/data/access/StorageAccessProxy.cpp b/src/lib/data/access/StorageAccessProxy.cpp index fd21d74c..31daabb9 100644 --- a/src/lib/data/access/StorageAccessProxy.cpp +++ b/src/lib/data/access/StorageAccessProxy.cpp @@ -43,6 +43,16 @@ Id StorageAccessProxy::getIdForNodeWithNameHierarchy(const NameHierarchy& nameHi return 0; } +Id StorageAccessProxy::getIdForNodeWithSearchNameHierarchy(const NameHierarchy& nameHierarchy) const +{ + if (hasSubject()) + { + return m_subject->getIdForNodeWithSearchNameHierarchy(nameHierarchy); + } + + return 0; +} + Id StorageAccessProxy::getIdForEdge( Edge::EdgeType type, const NameHierarchy& fromNameHierarchy, const NameHierarchy& toNameHierarchy ) const { diff --git a/src/lib/data/access/StorageAccessProxy.h b/src/lib/data/access/StorageAccessProxy.h index 4dc42b0c..9758d754 100644 --- a/src/lib/data/access/StorageAccessProxy.h +++ b/src/lib/data/access/StorageAccessProxy.h @@ -14,6 +14,7 @@ public: // StorageAccess implementation virtual Id getIdForNodeWithNameHierarchy(const NameHierarchy& nameHierarchy) const; + virtual Id getIdForNodeWithSearchNameHierarchy(const NameHierarchy& nameHierarchy) const; virtual Id getIdForEdge( Edge::EdgeType type, const NameHierarchy& fromNameHierarchy, const NameHierarchy& toNameHierarchy) const;