From 96d933633f742e5ca4963675e9406750671c4770 Mon Sep 17 00:00:00 2001 From: malte_langkabel Date: Fri, 20 Nov 2015 15:38:35 +0100 Subject: [PATCH] ui: Show Template Definition * Show template definition in codeview when implicite specialization is active. --- src/lib/data/Storage.cpp | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/lib/data/Storage.cpp b/src/lib/data/Storage.cpp index 15233e55..b454d514 100644 --- a/src/lib/data/Storage.cpp +++ b/src/lib/data/Storage.cpp @@ -962,10 +962,27 @@ std::vector Storage::getActiveTokenIdsForId(Id tokenId, Id* declarationId) c if (m_sqliteStorage.isNode(tokenId)) { *declarationId = tokenId; - std::vector storageEdges = m_sqliteStorage.getEdgesByTargetId(tokenId); - for (size_t i = 0; i < storageEdges.size(); i++) + + std::vector incomingEdges = m_sqliteStorage.getEdgesByTargetId(tokenId); + for (size_t i = 0; i < incomingEdges.size(); i++) { - activeTokenIds.push_back(storageEdges[i].id); + activeTokenIds.push_back(incomingEdges[i].id); + } + + std::vector templateSpecializationEdges = m_sqliteStorage.getEdgesBySourceType( + tokenId, Edge::EDGE_TEMPLATE_SPECIALIZATION_OF + ); + if (templateSpecializationEdges.size() > 0) // should be either 0 or 1 + { + activeTokenIds.push_back(templateSpecializationEdges[0].targetNodeId); + } + + std::vector templateMemberSpecializationEdges = m_sqliteStorage.getEdgesBySourceType( + tokenId, Edge::EDGE_TEMPLATE_MEMBER_SPECIALIZATION_OF + ); + if (templateMemberSpecializationEdges.size() > 0) // should be either 0 or 1 + { + activeTokenIds.push_back(templateMemberSpecializationEdges[0].targetNodeId); } }