fix: order DO_TRY sections as try-body, finally, catch and reduce spacing
All checks were successful
CI / cleanup-branch (push) Has been skipped
CI / build (push) Successful in 59s
CI / docker (push) Successful in 38s
CI / deploy-feature (push) Has been skipped
CI / deploy (push) Successful in 36s

ELK TB layout places children in insertion order. Now explicitly adds
DO_FINALLY before DO_CATCH so the visual order inside DO_TRY is:
try body (top) → finally → catch blocks (bottom). Also reduces
internal spacing to keep the compound more compact.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
hsiegeln
2026-03-28 09:15:40 +01:00
parent dbf64ecb48
commit 615a3c6e99

View File

@@ -549,8 +549,8 @@ public class ElkDiagramRenderer implements DiagramRenderer {
elkNode.setHeight(100);
elkNode.setProperty(CoreOptions.ALGORITHM, "org.eclipse.elk.layered");
elkNode.setProperty(CoreOptions.DIRECTION, Direction.DOWN);
elkNode.setProperty(CoreOptions.SPACING_NODE_NODE, NODE_SPACING * 0.6);
elkNode.setProperty(CoreOptions.SPACING_EDGE_NODE, EDGE_SPACING * 0.5);
elkNode.setProperty(CoreOptions.SPACING_NODE_NODE, NODE_SPACING * 0.4);
elkNode.setProperty(CoreOptions.SPACING_EDGE_NODE, EDGE_SPACING * 0.3);
elkNode.setProperty(CoreOptions.PADDING,
new org.eclipse.elk.core.math.ElkPadding(COMPOUND_TOP_PADDING,
COMPOUND_SIDE_PADDING, COMPOUND_SIDE_PADDING, COMPOUND_SIDE_PADDING));
@@ -590,11 +590,21 @@ public class ElkDiagramRenderer implements DiagramRenderer {
}
}
// Handler children are direct children of DO_TRY (stacked below)
// Handler children stacked below try body: DO_FINALLY first, then DO_CATCH
// (ELK TB layout places children in insertion order)
for (RouteNode child : handlerChildren) {
childNodeIds.add(child.getId());
createElkNodeRecursive(child, elkNode, factory, elkNodeMap, nodeColors,
compoundNodeIds, childNodeIds, doTryNodeIds);
if (child.getType() == NodeType.DO_FINALLY) {
childNodeIds.add(child.getId());
createElkNodeRecursive(child, elkNode, factory, elkNodeMap, nodeColors,
compoundNodeIds, childNodeIds, doTryNodeIds);
}
}
for (RouteNode child : handlerChildren) {
if (child.getType() == NodeType.DO_CATCH) {
childNodeIds.add(child.getId());
createElkNodeRecursive(child, elkNode, factory, elkNodeMap, nodeColors,
compoundNodeIds, childNodeIds, doTryNodeIds);
}
}
} else if (isCompound) {
compoundNodeIds.add(rn.getId());
@@ -661,9 +671,18 @@ public class ElkDiagramRenderer implements DiagramRenderer {
wrapperChildren));
compoundInfos.put(wrapperId, new CompoundInfo(wrapperId, Color.WHITE));
}
// Handler children (DO_CATCH, DO_FINALLY)
// Handler children: DO_FINALLY first, then DO_CATCH
for (RouteNode child : rn.getChildren()) {
if (child.getType() == NodeType.DO_CATCH || child.getType() == NodeType.DO_FINALLY) {
if (child.getType() == NodeType.DO_FINALLY) {
ElkNode childElk = elkNodeMap.get(child.getId());
if (childElk != null) {
children.add(extractPositionedNode(child, childElk, elkNodeMap,
compoundNodeIds, compoundInfos, rootNode));
}
}
}
for (RouteNode child : rn.getChildren()) {
if (child.getType() == NodeType.DO_CATCH) {
ElkNode childElk = elkNodeMap.get(child.getId());
if (childElk != null) {
children.add(extractPositionedNode(child, childElk, elkNodeMap,