From bbe5874a89407177f18960f80ef4409665be0c5e Mon Sep 17 00:00:00 2001 From: Eberhard Graether Date: Mon, 14 Jul 2014 16:47:40 +0200 Subject: [PATCH] data: saving typedef to Storage This change save typedef expressions to the Storage using a node of type Node::NODE_TYPEDEF and an edge of type Edge::EDGE_TYPEDEF_OF that leads to the original type, with the qualifiers saved as DataType on the edge. --- bin/app/data/src/header.h | 7 ++++--- src/lib/data/Storage.cpp | 8 +++++++- src/lib/data/graph/Edge.cpp | 2 ++ src/lib/data/graph/Edge.h | 3 ++- src/lib/data/graph/Node.cpp | 2 ++ src/lib/data/graph/Node.h | 3 ++- 6 files changed, 19 insertions(+), 6 deletions(-) diff --git a/bin/app/data/src/header.h b/bin/app/data/src/header.h index 82233148..b14f1759 100644 --- a/bin/app/data/src/header.h +++ b/bin/app/data/src/header.h @@ -13,6 +13,10 @@ y fooy(); z fooz(); */ +class A {}; +class B : public A {}; +typedef A* C; + const bool *ab(int a, int b); bool const *abc(int a, int b); @@ -23,6 +27,3 @@ int main(); void foo(); int sum(int a, int b); int diff(int a, int b); - -class A {}; -class B : public A {}; diff --git a/src/lib/data/Storage.cpp b/src/lib/data/Storage.cpp index 5906f22f..80cc1bf5 100644 --- a/src/lib/data/Storage.cpp +++ b/src/lib/data/Storage.cpp @@ -47,7 +47,13 @@ void Storage::onTypedefParsed( ){ log("typedef", fullName + " -> " + underlyingType.getFullTypeName(), location); - // TODO: save Typedef + Node* node = m_graph.createNodeHierarchy(fullName); + node->setType(Node::NODE_TYPEDEF); + node->setAccess(convertAccessType(access)); + + addTokenLocation(node, location); + + addTypeEdge(node, Edge::EDGE_TYPEDEF_OF, underlyingType); } void Storage::onClassParsed(const ParseLocation& location, const std::string& fullName, AccessType access) diff --git a/src/lib/data/graph/Edge.cpp b/src/lib/data/graph/Edge.cpp index 11a10636..51020de6 100644 --- a/src/lib/data/graph/Edge.cpp +++ b/src/lib/data/graph/Edge.cpp @@ -103,6 +103,8 @@ std::string Edge::getTypeString() const return "is derived from"; case EDGE_CALL: return "calls"; + case EDGE_TYPEDEF_OF: + return "is typedef of"; default: LOG_ERROR("TypeString not implemented for edge type."); } diff --git a/src/lib/data/graph/Edge.h b/src/lib/data/graph/Edge.h index d1babb95..4a15f202 100644 --- a/src/lib/data/graph/Edge.h +++ b/src/lib/data/graph/Edge.h @@ -20,7 +20,8 @@ public: EDGE_PARAMETER_TYPE_OF, EDGE_USAGE, EDGE_CALL, - EDGE_INHERITANCE + EDGE_INHERITANCE, + EDGE_TYPEDEF_OF }; enum AccessType diff --git a/src/lib/data/graph/Node.cpp b/src/lib/data/graph/Node.cpp index 75de53b6..7406547e 100644 --- a/src/lib/data/graph/Node.cpp +++ b/src/lib/data/graph/Node.cpp @@ -266,6 +266,8 @@ std::string Node::getTypeString(NodeType type) const return "namespace"; case NODE_ENUM: return "enum"; + case NODE_TYPEDEF: + return "typedef"; } return ""; } diff --git a/src/lib/data/graph/Node.h b/src/lib/data/graph/Node.h index ba236a41..1e0526d1 100644 --- a/src/lib/data/graph/Node.h +++ b/src/lib/data/graph/Node.h @@ -22,7 +22,8 @@ public: NODE_FUNCTION, NODE_METHOD, NODE_NAMESPACE, - NODE_ENUM + NODE_ENUM, + NODE_TYPEDEF }; Node(NodeType type, const std::string& name);