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