logic: save template parameters as child nodes with member access 'template parameter'
* added access node to graph for template parameters, no icon so far * don't reexpand function nodes with children when active before * removed console warnings for edges
This commit is contained in:
@@ -607,10 +607,9 @@ Id Storage::onTemplateRecordParameterTypeParsed(
|
||||
|
||||
Id parameterNodeId = addNodeHierarchy(Node::NODE_TEMPLATE_PARAMETER_TYPE, templateParameterTypeNameHierarchy, true);
|
||||
addSourceLocation(parameterNodeId, location, false);
|
||||
addAccess(parameterNodeId, TokenComponentAccess::ACCESS_TEMPLATE);
|
||||
|
||||
Id recordNodeId = addNodeHierarchy(Node::NODE_TYPE, templateRecordNameHierarchy, false);
|
||||
|
||||
addEdge(recordNodeId, parameterNodeId, Edge::EDGE_TEMPLATE_PARAMETER, location);
|
||||
addNodeHierarchy(Node::NODE_TYPE, templateRecordNameHierarchy, false);
|
||||
|
||||
return parameterNodeId;
|
||||
}
|
||||
@@ -667,9 +666,9 @@ Id Storage::onTemplateFunctionParameterTypeParsed(
|
||||
|
||||
Id parameterNodeId = addNodeHierarchy(Node::NODE_TEMPLATE_PARAMETER_TYPE, templateParameterTypeNameHierarchy, true);
|
||||
addSourceLocation(parameterNodeId, location, false);
|
||||
addAccess(parameterNodeId, TokenComponentAccess::ACCESS_TEMPLATE);
|
||||
|
||||
Id functionNodeId = addNodeHierarchy(Node::NODE_FUNCTION, function, false);
|
||||
addEdge(functionNodeId, parameterNodeId, Edge::EDGE_TEMPLATE_PARAMETER, location);
|
||||
addNodeHierarchy(Node::NODE_FUNCTION, function, false);
|
||||
|
||||
return parameterNodeId;
|
||||
}
|
||||
@@ -901,8 +900,7 @@ std::shared_ptr<Graph> Storage::getGraphForAll() const
|
||||
std::vector<Id> tokenIds;
|
||||
for (StorageNode node: m_sqliteStorage.getAllNodes())
|
||||
{
|
||||
if (node.defined && Node::intToType(node.type) != Node::NODE_TEMPLATE_PARAMETER_TYPE
|
||||
&& !m_hierarchyCache.isChildOfVisibleNodeOrInvisible(node.id))
|
||||
if (node.defined && !m_hierarchyCache.isChildOfVisibleNodeOrInvisible(node.id))
|
||||
{
|
||||
tokenIds.push_back(node.id);
|
||||
}
|
||||
|
||||
@@ -66,8 +66,6 @@ Edge::Edge(Id id, EdgeType type, Node* from, Node* to)
|
||||
{
|
||||
m_from->addEdge(this);
|
||||
m_to->addEdge(this);
|
||||
|
||||
checkType();
|
||||
}
|
||||
|
||||
Edge::Edge(const Edge& other, Node* from, Node* to)
|
||||
@@ -84,8 +82,6 @@ Edge::Edge(const Edge& other, Node* from, Node* to)
|
||||
{
|
||||
LOG_ERROR("Nodes are not plain copies.");
|
||||
}
|
||||
|
||||
checkType();
|
||||
}
|
||||
|
||||
Edge::~Edge()
|
||||
@@ -239,129 +235,3 @@ std::ostream& operator<<(std::ostream& ostream, const Edge& edge)
|
||||
ostream << edge.getAsString();
|
||||
return ostream;
|
||||
}
|
||||
|
||||
bool Edge::checkType() const // TODO: remove this function
|
||||
{
|
||||
Node::NodeTypeMask complexTypeMask = Node::NODE_CLASS | Node::NODE_STRUCT | Node:: NODE_TEMPLATE_PARAMETER_TYPE;
|
||||
Node::NodeTypeMask typeMask = Node::NODE_UNDEFINED | Node::NODE_TYPE | Node::NODE_ENUM | Node::NODE_TYPEDEF | complexTypeMask;
|
||||
Node::NodeTypeMask variableMask = Node::NODE_GLOBAL_VARIABLE | Node::NODE_FIELD;
|
||||
Node::NodeTypeMask functionMask = Node::NODE_FUNCTION | Node::NODE_METHOD;
|
||||
|
||||
switch (m_type)
|
||||
{
|
||||
case EDGE_NONE:
|
||||
break;
|
||||
|
||||
case EDGE_MEMBER:
|
||||
if (!m_from->isType(typeMask | Node::NODE_NAMESPACE | functionMask) ||
|
||||
(!m_from->isType(Node::NODE_UNDEFINED | Node::NODE_NAMESPACE) && m_to->isType(Node::NODE_NAMESPACE)) ||
|
||||
(m_from->isType(Node::NODE_ENUM) && !m_to->isType(Node::NODE_ENUM_CONSTANT)) ||
|
||||
(m_from->isType(functionMask) && !m_to->isType(Node::NODE_TEMPLATE_PARAMETER_TYPE)))
|
||||
{
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
|
||||
case EDGE_TYPE_OF:
|
||||
if (!m_from->isType(variableMask) || !m_to->isType(typeMask))
|
||||
{
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
|
||||
case EDGE_RETURN_TYPE_OF:
|
||||
case EDGE_PARAMETER_TYPE_OF:
|
||||
case EDGE_TYPE_USAGE:
|
||||
if (!m_from->isType(functionMask) || !m_to->isType(typeMask))
|
||||
{
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
|
||||
case EDGE_INHERITANCE:
|
||||
if (!m_from->isType(complexTypeMask) || !m_to->isType(complexTypeMask))
|
||||
{
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
|
||||
case EDGE_OVERRIDE:
|
||||
if (!m_from->isType(Node::NODE_METHOD) ||
|
||||
!m_to->isType(Node::NODE_METHOD))
|
||||
{
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
|
||||
case EDGE_CALL:
|
||||
if (!m_from->isType(variableMask | functionMask) || !m_to->isType(functionMask))
|
||||
{
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
|
||||
case EDGE_USAGE:
|
||||
if (!m_from->isType(functionMask) || !m_to->isType(variableMask | Node::NODE_ENUM_CONSTANT))
|
||||
{
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
|
||||
case EDGE_TYPEDEF_OF:
|
||||
if (!m_from->isType(Node::NODE_TYPEDEF) || !m_to->isType(typeMask))
|
||||
{
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
|
||||
case EDGE_TEMPLATE_PARAMETER:
|
||||
if (!m_from->isType(Node::NODE_TEMPLATE_PARAMETER_TYPE) || !m_to->isType(typeMask | functionMask))
|
||||
{
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
|
||||
case EDGE_TEMPLATE_ARGUMENT:
|
||||
case EDGE_TEMPLATE_DEFAULT_ARGUMENT:
|
||||
if (!m_from->isType(typeMask) || !m_to->isType(typeMask | functionMask))
|
||||
{
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
|
||||
case EDGE_TEMPLATE_SPECIALIZATION_OF:
|
||||
case EDGE_TEMPLATE_MEMBER_SPECIALIZATION_OF:
|
||||
if (!m_from->isType(typeMask | functionMask) || !m_to->isType(typeMask | functionMask))
|
||||
{
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
|
||||
case EDGE_INCLUDE:
|
||||
if (!m_from->isType(Node::NODE_FILE) || !m_to->isType(Node::NODE_FILE))
|
||||
{
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
|
||||
case EDGE_AGGREGATION:
|
||||
if (!m_from->isType(typeMask | variableMask | functionMask) || !m_to->isType(typeMask | variableMask | functionMask))
|
||||
{
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
case EDGE_MACRO_USAGE:
|
||||
if (!m_to->isType(Node::NODE_MACRO) || !m_from->isType(Node::NODE_FILE))
|
||||
{
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
LOG_ERROR_STREAM(
|
||||
<< "Edge " << getTypeString()
|
||||
<< " can't go from Node " << m_from->getTypeString()
|
||||
<< " to Node " << m_to->getTypeString()
|
||||
);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ public:
|
||||
EDGE_INHERITANCE = 0x80,
|
||||
EDGE_OVERRIDE = 0x100,
|
||||
EDGE_TYPEDEF_OF = 0x200,
|
||||
EDGE_TEMPLATE_PARAMETER = 0x400,
|
||||
EDGE_TEMPLATE_PARAMETER = 0x400, // unused since template parameters are children
|
||||
EDGE_TEMPLATE_ARGUMENT = 0x800,
|
||||
EDGE_TEMPLATE_DEFAULT_ARGUMENT = 0x1000,
|
||||
EDGE_TEMPLATE_SPECIALIZATION_OF = 0x2000,
|
||||
|
||||
@@ -10,6 +10,8 @@ std::string TokenComponentAccess::getAccessString(AccessType access)
|
||||
return "protected";
|
||||
case ACCESS_PRIVATE:
|
||||
return "private";
|
||||
case ACCESS_TEMPLATE:
|
||||
return "template parameter";
|
||||
case ACCESS_NONE:
|
||||
return "";
|
||||
}
|
||||
@@ -31,6 +33,8 @@ TokenComponentAccess::AccessType TokenComponentAccess::intToType(int value)
|
||||
return ACCESS_PROTECTED;
|
||||
case 0x4:
|
||||
return ACCESS_PRIVATE;
|
||||
case 0x8:
|
||||
return ACCESS_TEMPLATE;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ public:
|
||||
ACCESS_PUBLIC = 0x1,
|
||||
ACCESS_PROTECTED = 0x2,
|
||||
ACCESS_PRIVATE = 0x4,
|
||||
ACCESS_TEMPLATE = 0x8,
|
||||
ACCESS_NONE = 0x0
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user