diff --git a/src/lib/component/controller/GraphController.cpp b/src/lib/component/controller/GraphController.cpp index 3726b146..3afa18d7 100644 --- a/src/lib/component/controller/GraphController.cpp +++ b/src/lib/component/controller/GraphController.cpp @@ -701,7 +701,7 @@ bool GraphController::isTypeNodeWithSingleAggregation( if (count > 1) { - return false; + matches = false; } return matches; @@ -812,13 +812,26 @@ bool GraphController::isTypeUserNode(const DummyNode& node) const n->forEachEdge( [tokenId, &matches](Edge* edge) { - if (edge->isType(Edge::EDGE_MEMBER | Edge::EDGE_AGGREGATION)) + if (edge->isType(Edge::EDGE_MEMBER)) { return; } + if (edge->isType(Edge::EDGE_AGGREGATION)) + { + TokenComponentAggregation::Direction dir = + edge->getComponent()->getDirection(); + if ((dir == TokenComponentAggregation::DIRECTION_FORWARD && edge->getTo()->getId() == tokenId) || + (dir == TokenComponentAggregation::DIRECTION_BACKWARD && edge->getTo()->getId() != tokenId)) + { + matches = false; + } + + return; + } + if (!edge->isType(Edge::EDGE_TYPE_USAGE | Edge::EDGE_TYPE_OF | Edge::EDGE_TEMPLATE_ARGUMENT | Edge::EDGE_TYPEDEF_OF) || - edge->getFrom()->getId() != tokenId) + edge->getTo()->getId() == tokenId) { matches = false; }