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); } }