data: fixed graph display errors

* fixed Storage saving specialized template functions as undefined function node
* fixed usages of same type in functions in return or parameter not clickable in graph, because the edges are on top
This commit is contained in:
Eberhard Graether
2015-06-11 14:04:20 +02:00
parent 063d972b13
commit 3c6782d94d
4 changed files with 34 additions and 23 deletions
+27 -21
View File
@@ -307,16 +307,7 @@ Id Storage::onFunctionParsed(
){
log("function", function.getFullName(), location);
Node* node = addNodeHierarchyWithDistinctSignature(Node::NODE_FUNCTION, function);
addTokenLocation(node, location);
addTokenLocation(node, scopeLocation, true);
addTypeEdge(node, Edge::EDGE_RETURN_TYPE_OF, function.returnType);
for (const ParseTypeUsage& parameter : function.parameters)
{
addTypeEdge(node, Edge::EDGE_PARAMETER_TYPE_OF, parameter);
}
Node* node = addFunctionNode(Node::NODE_FUNCTION, function, location, scopeLocation);
return node->getId();
}
@@ -327,7 +318,7 @@ Id Storage::onMethodParsed(
){
log("method", method.getFullName(), location);
Node* node = addNodeHierarchyWithDistinctSignature(Node::NODE_METHOD, method);
Node* node = addFunctionNode(Node::NODE_METHOD, method, location, scopeLocation);
if (!node->getMemberEdge())
{
@@ -351,15 +342,6 @@ Id Storage::onMethodParsed(
addAccess(node, access);
addAbstraction(node, abstraction);
addTokenLocation(node, location);
addTokenLocation(node, scopeLocation, true);
addTypeEdge(node, Edge::EDGE_RETURN_TYPE_OF, method.returnType);
for (const ParseTypeUsage& parameter : method.parameters)
{
addTypeEdge(node, Edge::EDGE_PARAMETER_TYPE_OF, parameter);
}
return node->getId();
}
@@ -658,7 +640,7 @@ Id Storage::onTemplateFunctionSpecializationParsed(
){
log("function template specialization", specializedFunction.getFullName(), location);
Node* specializedFunctionNode = addNodeHierarchyWithDistinctSignature(Node::NODE_UNDEFINED_FUNCTION, specializedFunction);
Node* specializedFunctionNode = addNodeHierarchyWithDistinctSignature(Node::NODE_FUNCTION, specializedFunction);
Node* templateFunctionNode = addNodeHierarchyWithDistinctSignature(Node::NODE_UNDEFINED_FUNCTION, templateFunction);
Edge* templateSpecializationEdge =
@@ -1244,6 +1226,30 @@ TokenComponentAbstraction* Storage::addAbstraction(Node* node, ParserClient::Abs
return nullptr;
}
Node* Storage::addFunctionNode(
Node::NodeType nodeType, const ParseFunction& function,
const ParseLocation& location, const ParseLocation& scopeLocation
){
Node* node = addNodeHierarchyWithDistinctSignature(nodeType, function);
addTokenLocation(node, location);
addTokenLocation(node, scopeLocation, true);
// Currently the edge types EDGE_RETURN_TYPE_OF and EDGE_PARAMETER_TYPE_OF don't get used, because they are not
// distinctly displayed compared to EDGE_TYPE_USAGE in the Graph, so they get drawn on top of each other, but only
// the upper one can be clicked.
// addTypeEdge(node, Edge::EDGE_RETURN_TYPE_OF, function.returnType);
addTypeEdge(node, Edge::EDGE_TYPE_USAGE, function.returnType);
for (const ParseTypeUsage& parameter : function.parameters)
{
// addTypeEdge(node, Edge::EDGE_PARAMETER_TYPE_OF, parameter);
addTypeEdge(node, Edge::EDGE_TYPE_USAGE, parameter);
}
return node;
}
Edge* Storage::addTypeEdge(Node* node, Edge::EdgeType edgeType, const ParseTypeUsage& typeUsage)
{
if (!typeUsage.location.isValid())