diff --git a/src/avatartranslator/AvatarStateMachine.java b/src/avatartranslator/AvatarStateMachine.java index 9cfdbb88d170a009986eaede12f3547ec60fc041..77fc44eec864d2428cfcfddd6e8f650a235098c5 100644 --- a/src/avatartranslator/AvatarStateMachine.java +++ b/src/avatartranslator/AvatarStateMachine.java @@ -194,13 +194,37 @@ public class AvatarStateMachine extends AvatarElement { // Add missing implicit states. public void makeFullStates(AvatarBlock _block) { + addStatesToEmptyNonTerminalEmptyNext(_block); addStatesToTransitionsBetweenTwoNonStates(_block); addStatesToActionTransitions(_block); - addStateToNonEmptyTransitionsBetweenNonStateToState(_block); - } - - - private void addStateToNonEmptyTransitionsBetweenNonStateToState(AvatarBlock _block) { + addStatesToNonEmptyTransitionsBetweenNonStateToState(_block); + } + + + private void addStatesToEmptyNonTerminalEmptyNext(AvatarBlock _b) { + ArrayList<AvatarStateMachineElement> toConsider = new ArrayList<AvatarStateMachineElement>(); + for(AvatarStateMachineElement elt: elements) { + if (!(elt instanceof AvatarStopState)) { + if (elt.getNext(0) == null) { + // Missing state + toConsider.add(elt); + } + } + } + + for(AvatarStateMachineElement elt: toConsider) { + AvatarStopState stopMe = new AvatarStopState("stopCreated", elt.getReferenceObject()); + addElement(stopMe); + AvatarTransition tr = new AvatarTransition(_b, "trForStopCreated", elt.getReferenceObject()); + addElement(tr); + elt.addNext(tr); + tr.addNext(stopMe); + } + + } + + + private void addStatesToNonEmptyTransitionsBetweenNonStateToState(AvatarBlock _block) { AvatarStateMachineElement next; AvatarStateMachineElement previous; ArrayList<AvatarStateMachineElement> toAdd = new ArrayList<AvatarStateMachineElement>();