data: Saving virtual abstraction of methods as TokenComponentAbstraction

This commit is contained in:
Eberhard Graether
2014-08-01 05:27:09 +02:00
parent 5893d0c776
commit 8950d679e1
14 changed files with 153 additions and 16 deletions
+26
View File
@@ -174,6 +174,7 @@ Id Storage::onMethodParsed(
LOG_ERROR("Method needs to have access type [public, protected, private] but has none.");
}
addAccess(node, access);
addAbstraction(node, abstraction);
addTokenLocation(node, location);
addTokenLocation(node, scopeLocation, true);
@@ -655,6 +656,31 @@ TokenComponentAccess* Storage::addAccess(Node* node, ParserClient::AccessType ac
return nullptr;
}
TokenComponentAbstraction::AbstractionType Storage::convertAbstractionType(ParserClient::AbstractionType abstraction) const
{
switch (abstraction)
{
case ABSTRACTION_VIRTUAL:
return TokenComponentAbstraction::ABSTRACTION_VIRTUAL;
case ABSTRACTION_PURE_VIRTUAL:
return TokenComponentAbstraction::ABSTRACTION_PURE_VIRTUAL;
case ABSTRACTION_NONE:
return TokenComponentAbstraction::ABSTRACTION_NONE;
}
}
TokenComponentAbstraction* Storage::addAbstraction(Node* node, ParserClient::AbstractionType abstraction)
{
if (abstraction != ABSTRACTION_NONE)
{
std::shared_ptr<TokenComponentAbstraction> ptr =
std::make_shared<TokenComponentAbstraction>(convertAbstractionType(abstraction));
node->addComponentAbstraction(ptr);
return ptr.get();
}
return nullptr;
}
Edge* Storage::addTypeEdge(Node* node, Edge::EdgeType edgeType, const DataType& type)
{
Node* typeNode = m_graph.createNodeHierarchy(type.getRawTypeName());