This blog post continues with more complex DOT graphs to show some potential use case scenarios to add GEF DOT-based visualization support to the Eclipse IDE.
1. Visualization of UML Statechart Diagrams
The finite_state_machine DOT graph definition describes the states (DOT nodes) and the transitions (DOT edges) of a state machine. The initial and final states are visualized by doublecircle node shapes, all other states are represented by nodes with circle shape. Note the usage of the edge label attribute specifying the text labels on the edges. The rankdir=LR graph attribute requests a left-to-right graph drawing in landscape mode.
digraph finite_state_machine {
rankdir=LR;
size="8,5"
node [shape = doublecircle]; LR_0 LR_3 LR_4 LR_8;
node [shape = circle];
LR_0 -> LR_2 [ label = "SS(B)" ];
LR_0 -> LR_1 [ label = "SS(S)" ];
LR_1 -> LR_3 [ label = "S($end)" ];
LR_2 -> LR_6 [ label = "SS(b)" ];
LR_2 -> LR_5 [ label = "SS(a)" ];
LR_2 -> LR_4 [ label = "S(A)" ];
LR_5 -> LR_7 [ label = "S(b)" ];
LR_5 -> LR_5 [ label = "S(a)" ];
LR_6 -> LR_6 [ label = "S(b)" ];
LR_6 -> LR_5 [ label = "S(a)" ];
LR_7 -> LR_8 [ label = "S(b)" ];
LR_7 -> LR_5 [ label = "S(a)" ];
LR_8 -> LR_6 [ label = "S(b)" ];
LR_8 -> LR_5 [ label = "S(a)" ];
}

2. Visualization of ANTLR Abstract Syntax Trees
The org.antlr.runtime.tree.DOTTreeGenerator is capable of generating *.dot files from arbitrary ANTLR abstract syntax trees. The following DOT graph definition represents the AST of the12 * (5-6); 2^3^(4 + 1) expressions. The DOT graph is styled using the bgcolor, color, fillcolor, fontcolor and style DOT attributes.digraph {
ordering=out;
ranksep=.4;
bgcolor="lightgrey";
node [shape=box,
fixedsize=false,
fontsize=12,
fontname="Helvetica-bold",
fontcolor="blue"
width=.25, height=.25,
color="black",
fillcolor="white",
style="filled, solid, bold"];
edge [arrowsize=.5, color="black", style="bold"]
n0 [label="ROOT"];
n1 [label="EXPRESSION"];
n2 [label="*"];
n3 [label="12"];
n4 [label="EXPRESSION"];
n5 [label="-"];
n6 [label="5"];
n7 [label="6"];
n8 [label="EXPRESSION"];
n9 [label="^"];
n10 [label="^"];
n11 [label="2"];
n12 [label="3"];
n13 [label="EXPRESSION"];
n14 [label="+"];
n15 [label="4"];
n16 [label="1"];
n0 -> n1 // "ROOT" -> "EXPRESSION"
n1 -> n2 // "EXPRESSION" -> "*"
n2 -> n3 // "*" -> "12"
n2 -> n4 // "*" -> "EXPRESSION"
n4 -> n5 // "EXPRESSION" -> "-"
n5 -> n6 // "-" -> "5"
n5 -> n7 // "-" -> "6"
n0 -> n8 // "ROOT" -> "EXPRESSION"
n8 -> n9 // "EXPRESSION" -> "^"
n9 -> n10 // "^" -> "^"
n10 -> n11 // "^" -> "2"
n10 -> n12 // "^" -> "3"
n9 -> n13 // "^" -> "EXPRESSION"
n13 -> n14 // "EXPRESSION" -> "+"
n14 -> n15 // "+" -> "4"
n14 -> n16 // "+" -> "1"
}

3. Visualization of Eclipse Plugin Dependencies
The following DOT graph definition describes the Eclipse Plugin dependencies of the different GEF components. Note how certain nodes are grouped by anonymous subgraphs and the usage of thegroup and rank attributes to ensure that the nodes are properly aligned both horizontally and vertically.digraph {
node[fontcolor=white shape=box style=filled width=3]
edge[color="#14477c" arrowhead=vee]
splines=ortho
// nodes
{
// GEF DOT
rank=same
node[color="#521B93"]
"org.eclipse.gef.dot.ui"[group="ui"]
"org.eclipse.gef.dot"[group="core"]
}
{
// GEF ZEST
rank=same
node[color="#1F6EB1"]
"org.eclipse.gef.zest.fx.ui"[group="ui"]
"org.eclipse.gef.zest.fx"[group="core"]
}
{
// GEF MVC
rank=same
node[color="#021152"]
"org.eclipse.gef.mvc.fx.ui"[group="ui"]
"org.eclipse.gef.mvc.fx"[group="core"]
}
{
// GEF FX
rank=same
"org.eclipse.gef.fx"[color="#4C5F87"]
"org.eclipse.gef.fx.jface"[color="#4C5F87"]
"org.eclipse.gef.fx.swt"[color="#4C5F87"]
}
{
// GEF LAYOUT
// GEF GRAPH
rank=same
"org.eclipse.gef.layout"[color="#7C8566"]
"org.eclipse.gef.graph"[color="#941100"]
}
{
// GEF GEOMETRY
// GEF COMMON
rank=same
"org.eclipse.gef.geometry.convert.fx"[color="#2E8654"]
"org.eclipse.gef.geometry"[color="#2E8654"]
}
"org.eclipse.gef.common"[color="#5B8E92"]
// edges
"org.eclipse.gef.dot.ui"->"org.eclipse.gef.dot"
"org.eclipse.gef.dot.ui"->"org.eclipse.gef.zest.fx.ui"
"org.eclipse.gef.dot"->"org.eclipse.gef.graph"
"org.eclipse.gef.fx"->"org.eclipse.gef.common"
"org.eclipse.gef.fx"->"org.eclipse.gef.geometry.convert.fx"
"org.eclipse.gef.fx.jface"->"org.eclipse.gef.fx.swt"
"org.eclipse.gef.fx.swt"->"org.eclipse.gef.common"
"org.eclipse.gef.geometry.convert.fx"->"org.eclipse.gef.geometry"
"org.eclipse.gef.graph"->"org.eclipse.gef.common"
"org.eclipse.gef.layout"->"org.eclipse.gef.geometry"
"org.eclipse.gef.layout"->"org.eclipse.gef.graph"
"org.eclipse.gef.mvc.fx"->"org.eclipse.gef.fx"
"org.eclipse.gef.mvc.fx.ui"->"org.eclipse.gef.fx.jface"
"org.eclipse.gef.mvc.fx.ui"->"org.eclipse.gef.mvc.fx"
"org.eclipse.gef.zest.fx"->"org.eclipse.gef.layout"
"org.eclipse.gef.zest.fx"->"org.eclipse.gef.mvc.fx"
"org.eclipse.gef.zest.fx.ui"->"org.eclipse.gef.mvc.fx.ui"
"org.eclipse.gef.zest.fx.ui"->"org.eclipse.gef.zest.fx"
}

4. Visualization of Git Workflows
The DOT tooltip attribute can specify additional information that is shown while hovering over a certain node, e.g. the description and the timestamp of a git tag in a branching/merging workflow.
digraph {
// ...
// tags
node [shape=cds, fixedsize=false, fillcolor="#C6C6C6", penwidth=1, margin="0.11,0.055"]
t1 [label="4.0.0" tooltip="Eclipse Neon\n22. Juni 2016"]
t2 [label="5.0.0" tooltip="Eclipse Oxygen\n28. Juni 2017"]
t3 [label="5.0.100" tooltip="Eclipse Photon\n27. Juni 2018"]
// ...
}

All these *.dot files (and also other ones) are hosted on the corresponding GitHub repository. For further information, I suggest you to take a look at the GEF DOT User Guide or visit my GEF DOT session at EclipseCon Europe 2018.
Comments