data: saving and retrieving access components from and to Storage again

This commit is contained in:
Eberhard Graether
2015-09-17 15:58:10 +02:00
parent 04f24ba63d
commit 0c7624a5ef
7 changed files with 146 additions and 14 deletions
+58 -6
View File
@@ -177,9 +177,9 @@ Id Storage::onTypedefParsed(
){
Id typedefNodeId = addNodeHierarchy(Node::NODE_TYPEDEF, nameHierarchy);
addSourceLocation(typedefNodeId, location);
addAccess(typedefNodeId, access);
Id underlyingTypeNodeId = addNodeHierarchy(Node::NODE_UNDEFINED_TYPE, underlyingType.dataType->getTypeNameHierarchy());
addEdge(typedefNodeId, underlyingTypeNodeId, Edge::EDGE_TYPEDEF_OF, location);
return typedefNodeId;
@@ -194,6 +194,8 @@ Id Storage::onClassParsed(
addSourceLocation(nodeId, location);
addSourceLocation(nodeId, scopeLocation, true);
addAccess(nodeId, access);
return nodeId;
}
@@ -206,6 +208,8 @@ Id Storage::onStructParsed(
addSourceLocation(nodeId, location);
addSourceLocation(nodeId, scopeLocation, true);
addAccess(nodeId, access);
return nodeId;
}
@@ -215,10 +219,8 @@ Id Storage::onGlobalVariableParsed(const ParseLocation& location, const ParseVar
addSourceLocation(nodeId, location);
Id typeNodeId = addNodeHierarchy(Node::NODE_UNDEFINED_TYPE, variable.type.dataType->getTypeNameHierarchy());
addEdge(nodeId, typeNodeId, Edge::EDGE_TYPE_OF, location);
return nodeId;
}
@@ -226,6 +228,7 @@ Id Storage::onFieldParsed(const ParseLocation& location, const ParseVariable& va
{
Id nodeId = addNodeHierarchy(Node::NODE_FIELD, variable.nameHierarchy);
addSourceLocation(nodeId, location);
addAccess(nodeId, access);
Id typeNodeId = addNodeHierarchy(Node::NODE_UNDEFINED_TYPE, variable.type.dataType->getTypeNameHierarchy());
addEdge(nodeId, typeNodeId, Edge::EDGE_TYPE_OF, variable.type.location);
@@ -258,6 +261,9 @@ Id Storage::onMethodParsed(
const ParseLocation& scopeLocation
){
Id nodeId = addNodeHierarchyWithDistinctSignature(Node::NODE_METHOD, method);
addSourceLocation(nodeId, location);
addSourceLocation(nodeId, scopeLocation, true);
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);
@@ -268,9 +274,6 @@ Id Storage::onMethodParsed(
addEdge(nodeId, parameternTypeNodeId, Edge::EDGE_PARAMETER_TYPE_OF, method.parameters[i].location);
}
addSourceLocation(nodeId, location);
addSourceLocation(nodeId, scopeLocation, true);
return nodeId;
}
@@ -293,6 +296,7 @@ Id Storage::onEnumParsed(
addSourceLocation(nodeId, location);
addSourceLocation(nodeId, scopeLocation, true);
addAccess(nodeId, access);
return nodeId;
}
@@ -722,6 +726,22 @@ std::shared_ptr<Graph> Storage::getGraphForActiveTokenIds(const std::vector<Id>&
}
}
graph->forEachEdge(
[this](Edge* edge)
{
if (!edge->isType(Edge::EDGE_MEMBER))
{
return;
}
StorageComponentAccess access = m_sqliteStorage.getComponentAccessByMemberEdgeId(edge->getId());
if (access.id && access.type)
{
edge->addComponentAccess(std::make_shared<TokenComponentAccess>(TokenComponentAccess::intToType(access.type)));
}
}
);
return g;
}
@@ -1357,3 +1377,35 @@ Node* Storage::addNodeToGraph(const Id nodeId, Graph* graph) const
std::make_shared<TokenComponentNameCached>(m_sqliteStorage.getNameHierarchyById(storageNode.nameId))
);
}
TokenComponentAccess::AccessType Storage::convertAccessType(ParserClient::AccessType access) const
{
switch (access)
{
case ACCESS_PUBLIC:
return TokenComponentAccess::ACCESS_PUBLIC;
case ACCESS_PROTECTED:
return TokenComponentAccess::ACCESS_PROTECTED;
case ACCESS_PRIVATE:
return TokenComponentAccess::ACCESS_PRIVATE;
case ACCESS_NONE:
return TokenComponentAccess::ACCESS_NONE;
}
}
void Storage::addAccess(const Id nodeId, ParserClient::AccessType access)
{
if (access == ACCESS_NONE)
{
return;
}
std::vector<StorageEdge> memberEdges = m_sqliteStorage.getEdgesByTargetType(nodeId, Edge::EDGE_MEMBER);
if (memberEdges.size() != 1)
{
LOG_ERROR_STREAM(<< "Cannot assign access" << access << " to node id " << nodeId << " because it's no child.");
return;
}
m_sqliteStorage.addComponentAccess(memberEdges[0].id, convertAccessType(access));
}