Skip to content

Instantly share code, notes, and snippets.

@jblang94
Last active February 28, 2017 02:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jblang94/96e4a7e8a53b64b3472771e5b8e2cc71 to your computer and use it in GitHub Desktop.
Save jblang94/96e4a7e8a53b64b3472771e5b8e2cc71 to your computer and use it in GitHub Desktop.
Issue 935 - Solution Approach 2
/*
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