data: Fixed edge creation

* reuse edges of same source, origin and type with multiple source locations
* save return type and parameter type uses as type usage for single edge
This commit is contained in:
Eberhard Graether
2015-09-23 10:23:46 +02:00
parent ef54299deb
commit 3d48145e47
+16 -5
View File
@@ -258,12 +258,14 @@ Id Storage::onFunctionParsed(
Id nodeId = addNodeHierarchyWithDistinctSignature(Node::NODE_FUNCTION, function);
Id returnTypeNodeId = addNodeHierarchy(Node::NODE_UNDEFINED_TYPE, function.returnType.dataType->getTypeNameHierarchy());
addEdge(nodeId, returnTypeNodeId, Edge::EDGE_RETURN_TYPE_OF, function.returnType.location);
addEdge(nodeId, returnTypeNodeId, Edge::EDGE_TYPE_USAGE, function.returnType.location);
// addEdge(nodeId, returnTypeNodeId, Edge::EDGE_RETURN_TYPE_OF, function.returnType.location);
for (size_t i = 0; i < function.parameters.size(); i++)
{
Id parameternTypeNodeId = addNodeHierarchy(Node::NODE_UNDEFINED_TYPE, function.parameters[i].dataType->getTypeNameHierarchy());
addEdge(nodeId, parameternTypeNodeId, Edge::EDGE_PARAMETER_TYPE_OF, function.parameters[i].location);
addEdge(nodeId, parameternTypeNodeId, Edge::EDGE_TYPE_USAGE, function.parameters[i].location);
// addEdge(nodeId, parameternTypeNodeId, Edge::EDGE_PARAMETER_TYPE_OF, function.parameters[i].location);
}
addSourceLocation(nodeId, location);
@@ -282,12 +284,14 @@ Id Storage::onMethodParsed(
addAccess(nodeId, access);
Id returnTypeNodeId = addNodeHierarchy(Node::NODE_UNDEFINED_TYPE, method.returnType.dataType->getTypeNameHierarchy());
addEdge(nodeId, returnTypeNodeId, Edge::EDGE_RETURN_TYPE_OF, method.returnType.location);
addEdge(nodeId, returnTypeNodeId, Edge::EDGE_TYPE_USAGE, method.returnType.location);
// addEdge(nodeId, returnTypeNodeId, Edge::EDGE_RETURN_TYPE_OF, method.returnType.location);
for (size_t i = 0; i < method.parameters.size(); i++)
{
Id parameternTypeNodeId = addNodeHierarchy(Node::NODE_UNDEFINED_TYPE, method.parameters[i].dataType->getTypeNameHierarchy());
addEdge(nodeId, parameternTypeNodeId, Edge::EDGE_PARAMETER_TYPE_OF, method.parameters[i].location);
addEdge(nodeId, parameternTypeNodeId, Edge::EDGE_TYPE_USAGE, method.parameters[i].location);
// addEdge(nodeId, parameternTypeNodeId, Edge::EDGE_PARAMETER_TYPE_OF, method.parameters[i].location);
}
return nodeId;
@@ -1182,8 +1186,15 @@ int Storage::addSourceLocation(int elementNodeId, const ParseLocation& location,
Id Storage::addEdge(Id sourceNodeId, Id targetNodeId, Edge::EdgeType type, ParseLocation location)
{
Id edgeId = m_sqliteStorage.addEdge(type, sourceNodeId, targetNodeId);
Id edgeId = m_sqliteStorage.getEdgeBySourceTargetType(sourceNodeId, targetNodeId, type).id;
if (!edgeId)
{
edgeId = m_sqliteStorage.addEdge(type, sourceNodeId, targetNodeId);
}
addSourceLocation(edgeId, location, false);
return edgeId;
}