Last active
February 28, 2017 02:59
-
-
Save jblang94/96e4a7e8a53b64b3472771e5b8e2cc71 to your computer and use it in GitHub Desktop.
Issue 935 - Solution Approach 2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
In this approach, the methods "exitSmOn" and "exitSmOnS1" would be generated, | |
*/ | |
public boolean e12() | |
{ | |
boolean wasEventProcessed = false; | |
SmOnS1 aSmOnS1 = smOnS1; | |
switch (aSmOnS1) | |
{ | |
case m1: | |
// exitSmOnS1(); this is the current call in the generated code | |
// Instead, call exitSm() since all transitions in Umple are considered as external transitions | |
// While my example pertains to "e12", my idea is for all event methods | |
// (e1 -> e12) to use exitSm(); | |
exitSm(); | |
setSm(Sm.off); | |
wasEventProcessed = true; | |
break; | |
default: | |
// Other states do respond to this event | |
} | |
return wasEventProcessed; | |
} | |
// No changes for exitSm() | |
private void exitSm() | |
{ | |
switch(sm) | |
{ | |
case on: | |
exitOn(); | |
// line 4 "checkExternalTransitions_withExitActions_1.ump" | |
on_exit_action(); | |
break; | |
} | |
} | |
private boolean exitOn() | |
{ | |
boolean wasEventProcessed = false; | |
SmOn aSmOn = smOn; | |
SmOnS1 aSmOnS1 = smOnS1; | |
// First check if we are in state "m1", | |
// Currently the generated code checks if we are in "s1" first | |
switch (aSmOnS1) | |
{ | |
case m1: | |
exitSmOnS1(); // Add function call | |
setSmOnS1(SmOnS1.Null); | |
wasEventProcessed = true; | |
break; | |
case m2: | |
exitSmOnS1(); // Add function call | |
setSmOnS1(SmOnS1.Null); | |
wasEventProcessed = true; | |
break; | |
default: | |
// Other states do respond to this event | |
} | |
// Now check if we are in state "s1" | |
switch (aSmOn) | |
{ | |
case s1: | |
exitSmOn(); // Add function call | |
setSmOn(SmOn.Null); | |
wasEventProcessed = true; | |
break; | |
case s2: | |
exitSmOn(); // Add function call | |
setSmOn(SmOn.Null); | |
wasEventProcessed = true; | |
break; | |
default: | |
// Other states do respond to this event | |
} | |
return wasEventProcessed; | |
} | |
private void exitSmOn() | |
{ | |
switch(smOn) | |
{ | |
case s1: | |
// remove call to exitOn() | |
// line 8 "checkExternalTransitions_withExitActions_1.ump" | |
exit_s1_execute(); | |
break; | |
} | |
} | |
private void exitSmOnS1() | |
{ | |
switch(smOnS1) | |
{ | |
case m1: | |
// line 14 "checkExternalTransitions_withExitActions_1.ump" | |
exit_m1_execute(); | |
break; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment