From 9284397d46b99e8435160cad23ef52f51599e351 Mon Sep 17 00:00:00 2001 From: Eberhard Graether Date: Thu, 10 Jul 2014 16:52:35 +0200 Subject: [PATCH] data: refactored Storage * put TypeEdge creation into private method * removed commented code * removed signature test code * fixed line breaks --- src/lib/data/Storage.cpp | 71 ++++++++++------------------------------ src/lib/data/Storage.h | 10 ++++-- 2 files changed, 25 insertions(+), 56 deletions(-) diff --git a/src/lib/data/Storage.cpp b/src/lib/data/Storage.cpp index 186cfe16..d0cda02c 100644 --- a/src/lib/data/Storage.cpp +++ b/src/lib/data/Storage.cpp @@ -42,11 +42,11 @@ void Storage::logLocations() const void Storage::onTypedefParsed( - const ParseLocation& location, const std::string& fullName, const DataType& underlyingType, - AccessType access -) -{ + const ParseLocation& location, const std::string& fullName, const DataType& underlyingType, AccessType access +){ log("typedef", fullName + " -> " + underlyingType.getFullTypeName(), location); + + // TODO: save Typedef } void Storage::onClassParsed(const ParseLocation& location, const std::string& fullName, AccessType access) @@ -79,12 +79,7 @@ void Storage::onGlobalVariableParsed(const ParseLocation& location, const ParseV node->setType(Node::NODE_GLOBAL_VARIABLE); node->setStatic(variable.isStatic); - Edge* edge = m_graph.createEdge(Edge::EDGE_TYPE_OF, node, m_graph.createNodeHierarchy(variable.type.getRawTypeName())); - edge->addComponent(std::make_shared( - variable.type.getQualifierList(), variable.type.getModifierStack())); - - //bool tttt = edge->hasComponent(); - //std::string foo = edge->getComponent()->getDataType().getFullTypeName(); + addTypeEdge(node, Edge::EDGE_TYPE_OF, variable.type); addTokenLocation(node, location); } @@ -95,7 +90,6 @@ void Storage::onFieldParsed(const ParseLocation& location, const ParseVariable& Node* node = m_graph.createNodeHierarchy(variable.fullName); node->setType(Node::NODE_FIELD); - //node->setConst(variable.isConst); node->setStatic(variable.isStatic); if (access == ACCESS_NONE) @@ -105,9 +99,7 @@ void Storage::onFieldParsed(const ParseLocation& location, const ParseVariable& } node->setAccess(convertAccessType(access)); - Edge* edge = m_graph.createEdge(Edge::EDGE_TYPE_OF, node, m_graph.createNodeHierarchy(variable.type.getRawTypeName())); - edge->addComponent(std::make_shared( - variable.type.getQualifierList(), variable.type.getModifierStack())); + addTypeEdge(node, Edge::EDGE_TYPE_OF, variable.type); addTokenLocation(node, location); } @@ -123,33 +115,15 @@ void Storage::onFunctionParsed( fullName, ParserClient::functionSignatureStr(returnType, fullName, parameters, false) ); - node->setType(Node::NODE_FUNCTION); - Edge* returnTypeEdge = m_graph.createEdge( - Edge::EDGE_RETURN_TYPE_OF, node, m_graph.createNodeHierarchy(returnType.getRawTypeName())); - returnTypeEdge->addComponent(std::make_shared( - returnType.getQualifierList(), returnType.getModifierStack())); - + addTypeEdge(node, Edge::EDGE_RETURN_TYPE_OF, returnType); for (const ParseVariable& parameter : parameters) { - Edge* parameterEdge = m_graph.createEdge( - Edge::EDGE_PARAMETER_TYPE_OF, node, m_graph.createNodeHierarchy(parameter.type.getRawTypeName())); - parameterEdge->addComponent(std::make_shared( - parameter.type.getQualifierList(), parameter.type.getModifierStack())); + addTypeEdge(node, Edge::EDGE_PARAMETER_TYPE_OF, parameter.type); } addTokenLocation(node, location); - - // TODO: move this into suitable TestSuite - if (node->getSignature() != ParserClient::functionSignatureStr(returnType, fullName, parameters, false)) - { - std::stringstream ss; - ss << "Parsed and saved signatures don't match: "; - ss << node->getSignature() << " - "; - ss << ParserClient::functionSignatureStr(returnType, fullName, parameters, false); - LOG_ERROR(ss.str()); - } } void Storage::onMethodParsed( @@ -176,30 +150,13 @@ void Storage::onMethodParsed( } node->setAccess(convertAccessType(access)); - Edge* returnTypeEdge = m_graph.createEdge( - Edge::EDGE_RETURN_TYPE_OF, node, m_graph.createNodeHierarchy(returnType.getRawTypeName())); - returnTypeEdge->addComponent(std::make_shared( - returnType.getQualifierList(), returnType.getModifierStack())); - + addTypeEdge(node, Edge::EDGE_RETURN_TYPE_OF, returnType); for (const ParseVariable& parameter : parameters) { - Edge* parameterEdge = m_graph.createEdge( - Edge::EDGE_PARAMETER_TYPE_OF, node, m_graph.createNodeHierarchy(parameter.type.getRawTypeName())); - parameterEdge->addComponent(std::make_shared( - parameter.type.getQualifierList(), parameter.type.getModifierStack())); + addTypeEdge(node, Edge::EDGE_PARAMETER_TYPE_OF, parameter.type); } addTokenLocation(node, location); - - // TODO: move this into suitable TestSuite - if (node->getSignature() != ParserClient::functionSignatureStr(returnType, fullName, parameters, isConst)) - { - std::stringstream ss; - ss << "Parsed and saved signatures don't match: "; - ss << node->getSignature() << " - "; - ss << ParserClient::functionSignatureStr(returnType, fullName, parameters, isConst); - LOG_ERROR(ss.str()); - } } void Storage::onNamespaceParsed(const ParseLocation& location, const std::string& fullName) @@ -416,6 +373,14 @@ Edge::AccessType Storage::convertAccessType(ParserClient::AccessType access) con } } +Edge* Storage::addTypeEdge(Node* node, Edge::EdgeType edgeType, const DataType& type) +{ + Node* typeNode = m_graph.createNodeHierarchy(type.getRawTypeName()); + Edge* edge = m_graph.createEdge(edgeType, node, typeNode); + edge->addComponent(std::make_shared(type.getQualifierList(), type.getModifierStack())); + return edge; +} + TokenLocation* Storage::addTokenLocation(Token* token, const ParseLocation& loc) { TokenLocation* location = m_locationCollection.addTokenLocation( diff --git a/src/lib/data/Storage.h b/src/lib/data/Storage.h index 4e956a7f..6d0bc95b 100644 --- a/src/lib/data/Storage.h +++ b/src/lib/data/Storage.h @@ -37,7 +37,8 @@ public: virtual void onFunctionParsed( const ParseLocation& location, const std::string& fullName, const DataType& returnType, - const std::vector& parameters); + const std::vector& parameters + ); virtual void onMethodParsed( const ParseLocation& location, const std::string& fullName, const DataType& returnType, const std::vector& parameters, AccessType access, AbstractionType abstraction, @@ -50,9 +51,11 @@ public: virtual void onEnumFieldParsed(const ParseLocation& location, const std::string& fullName); virtual void onInheritanceParsed( - const ParseLocation& location, const std::string& fullName, const std::string& baseName, AccessType access); + const ParseLocation& location, const std::string& fullName, const std::string& baseName, AccessType access + ); virtual void onCallParsed( - const ParseLocation& location, const std::string& callerName, const std::string& calleeName); + const ParseLocation& location, const std::string& callerName, const std::string& calleeName + ); // GraphAccess implementation virtual Id getIdForNodeWithName(const std::string& name) const; @@ -69,6 +72,7 @@ public: private: Edge::AccessType convertAccessType(ParserClient::AccessType access) const; + Edge* addTypeEdge(Node* node, Edge::EdgeType edgeType, const DataType& type); TokenLocation* addTokenLocation(Token* token, const ParseLocation& location); void log(std::string type, std::string str, const ParseLocation& location) const;