@@ -26,20 +26,20 @@ func (g *graph) formatStateMachine(sm *StateMachine) string {
26
26
27
27
for _ , sr := range stateList {
28
28
if sr .Superstate == nil {
29
- sb . WriteString ( g .formatOneState (sr , 1 ) )
29
+ g .formatOneState (& sb , sr , 1 )
30
30
}
31
31
}
32
32
for _ , sr := range stateList {
33
33
if sr .HasInitialState {
34
34
dest := sm .stateConfig [sr .InitialTransitionTarget ]
35
35
if dest != nil {
36
36
src := clusterStr (sr .State , true , true )
37
- sb . WriteString ( g . formatOneLine (src , str (dest .State , true ), "" ) )
37
+ formatOneLine (& sb , src , str (dest .State , true ), "" )
38
38
}
39
39
}
40
40
}
41
41
for _ , sr := range stateList {
42
- sb . WriteString ( g .formatAllStateTransitions (sm , sr ) )
42
+ g .formatAllStateTransitions (& sb , sm , sr )
43
43
}
44
44
initialState , err := sm .State (context .Background ())
45
45
if err == nil {
@@ -69,12 +69,11 @@ func (g *graph) formatActions(sr *stateRepresentation) string {
69
69
return strings .Join (es , "\\ n" )
70
70
}
71
71
72
- func (g * graph ) formatOneState (sr * stateRepresentation , level int ) string {
72
+ func (g * graph ) formatOneState (sb * strings. Builder , sr * stateRepresentation , level int ) {
73
73
var indent string
74
74
for i := 0 ; i < level ; i ++ {
75
75
indent += "\t "
76
76
}
77
- var sb strings.Builder
78
77
sb .WriteString (fmt .Sprintf ("%s%s [label=\" %s" , indent , str (sr .State , true ), str (sr .State , false )))
79
78
act := g .formatActions (sr )
80
79
if act != "" {
@@ -93,11 +92,10 @@ func (g *graph) formatOneState(sr *stateRepresentation, level int) string {
93
92
sb .WriteString (fmt .Sprintf ("%s\t \" %s\" [label=\" \" , shape=point];\n " , indent , clusterStr (sr .State , false , true )))
94
93
}
95
94
for _ , substate := range sr .Substates {
96
- sb . WriteString ( g .formatOneState (substate , level + 1 ) )
95
+ g .formatOneState (sb , substate , level + 1 )
97
96
}
98
97
sb .WriteString (indent + "}\n " )
99
98
}
100
- return sb .String ()
101
99
}
102
100
103
101
func (g * graph ) getEntryActions (ab []actionBehaviour , t Trigger ) []string {
@@ -110,9 +108,7 @@ func (g *graph) getEntryActions(ab []actionBehaviour, t Trigger) []string {
110
108
return actions
111
109
}
112
110
113
- func (g * graph ) formatAllStateTransitions (sm * StateMachine , sr * stateRepresentation ) string {
114
- var sb strings.Builder
115
-
111
+ func (g * graph ) formatAllStateTransitions (sb * strings.Builder , sm * StateMachine , sr * stateRepresentation ) {
116
112
triggerList := make ([]triggerBehaviour , 0 , len (sr .TriggerBehaviours ))
117
113
for _ , triggers := range sr .TriggerBehaviours {
118
114
triggerList = append (triggerList , triggers ... )
@@ -137,25 +133,25 @@ func (g *graph) formatAllStateTransitions(sm *StateMachine, sr *stateRepresentat
137
133
if _ , ok := lines [ln ]; ! ok {
138
134
order = append (order , ln )
139
135
}
140
- lines [ln ] = append (lines [ln ], g . formatOneTransition (t .Trigger , nil , t .Guard ))
136
+ lines [ln ] = append (lines [ln ], formatOneTransition (t .Trigger , nil , t .Guard ))
141
137
case * reentryTriggerBehaviour :
142
138
actions := g .getEntryActions (sr .EntryActions , t .Trigger )
143
139
ln := line {sr .State , t .Destination }
144
140
if _ , ok := lines [ln ]; ! ok {
145
141
order = append (order , ln )
146
142
}
147
- lines [ln ] = append (lines [ln ], g . formatOneTransition (t .Trigger , actions , t .Guard ))
143
+ lines [ln ] = append (lines [ln ], formatOneTransition (t .Trigger , actions , t .Guard ))
148
144
case * internalTriggerBehaviour :
149
145
actions := g .getEntryActions (sr .EntryActions , t .Trigger )
150
146
ln := line {sr .State , sr .State }
151
147
if _ , ok := lines [ln ]; ! ok {
152
148
order = append (order , ln )
153
149
}
154
- lines [ln ] = append (lines [ln ], g . formatOneTransition (t .Trigger , actions , t .Guard ))
150
+ lines [ln ] = append (lines [ln ], formatOneTransition (t .Trigger , actions , t .Guard ))
155
151
case * transitioningTriggerBehaviour :
156
152
src := sm .stateConfig [sr .State ]
157
153
if src == nil {
158
- return ""
154
+ continue
159
155
}
160
156
dest := sm .stateConfig [t .Destination ]
161
157
var actions []string
@@ -172,21 +168,19 @@ func (g *graph) formatAllStateTransitions(sm *StateMachine, sr *stateRepresentat
172
168
if _ , ok := lines [ln ]; ! ok {
173
169
order = append (order , ln )
174
170
}
175
- lines [ln ] = append (lines [ln ], g . formatOneTransition (t .Trigger , actions , t .Guard ))
171
+ lines [ln ] = append (lines [ln ], formatOneTransition (t .Trigger , actions , t .Guard ))
176
172
case * dynamicTriggerBehaviour :
177
173
// TODO: not supported yet
178
174
}
179
175
}
180
176
181
177
for _ , ln := range order {
182
178
content := lines [ln ]
183
- sb . WriteString ( g . formatOneLine (str (ln .source , true ), str (ln .destination , true ), strings .Join (content , "\\ n" ) ))
179
+ formatOneLine (sb , str (ln .source , true ), str (ln .destination , true ), strings .Join (content , "\\ n" ))
184
180
}
185
-
186
- return sb .String ()
187
181
}
188
182
189
- func ( g * graph ) formatOneTransition (trigger Trigger , actions []string , guards transitionGuard ) string {
183
+ func formatOneTransition (trigger Trigger , actions []string , guards transitionGuard ) string {
190
184
var sb strings.Builder
191
185
sb .WriteString (str (trigger , false ))
192
186
if len (actions ) > 0 {
@@ -202,11 +196,9 @@ func (g *graph) formatOneTransition(trigger Trigger, actions []string, guards tr
202
196
return sb .String ()
203
197
}
204
198
205
- func (g * graph ) formatOneLine (fromNodeName , toNodeName , label string ) string {
206
- var sb strings.Builder
199
+ func formatOneLine (sb * strings.Builder , fromNodeName , toNodeName , label string ) {
207
200
sb .WriteString (fmt .Sprintf ("\t %s -> %s [label=\" %s\" " , fromNodeName , toNodeName , label ))
208
201
sb .WriteString ("];\n " )
209
- return sb .String ()
210
202
}
211
203
212
204
func clusterStr (state any , quote , init bool ) string {
0 commit comments