From 1b23a44f207cbdeff3890630dfa9a84cd0c6f6cd Mon Sep 17 00:00:00 2001 From: Eberhard Graether Date: Fri, 22 Apr 2016 00:09:43 +0200 Subject: [PATCH] logic: Fixed bundling of referencing types --- .../component/controller/GraphController.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) 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; }