diff --git a/src/main/java/tmltranslator/TMLSyntaxChecking.java b/src/main/java/tmltranslator/TMLSyntaxChecking.java index 3f935dfef75c002f787cb4027d5f29d141e78695..14c761a3cb90de4641d63250f5fe1954da0586a9 100755 --- a/src/main/java/tmltranslator/TMLSyntaxChecking.java +++ b/src/main/java/tmltranslator/TMLSyntaxChecking.java @@ -77,6 +77,8 @@ public class TMLSyntaxChecking { private final String WRONG_PARAMS = "The number of params is not compatible"; private final String DUPLICATE_NAMES = "Two elements have the same name"; + private final String INVALID_NB_OF_GUARD = "The number of guards is not equal to the number of next elements"; + private final String TOO_MANY_MEMORIES = "Channel is mapped on more than one memory"; private final String INVALID_CHANNEL_PATH = "Channel path is invalid"; private final String INVALID_BUS_PATH = "Bus path is invalid for channel"; // Should be a warning only @@ -124,6 +126,8 @@ public class TMLSyntaxChecking { checkNextActions(); + checkChoices(); + checkPortName(); //added by minh hiep @@ -207,6 +211,21 @@ public class TMLSyntaxChecking { } } + public void checkChoices() { + for (TMLTask t : tmlm.getTasks()) { + TMLActivity tactivity = t.getActivityDiagram(); + int n = tactivity.nElements(); + for (int i = 0; i < n; i++) { + TMLActivityElement elt = tactivity.get(i); + if (elt instanceof TMLChoice) { + if (elt.getNbNext() != ((TMLChoice) elt).getNbGuard()) { + addError(t, elt, elt.getName() + ": " + INVALID_NB_OF_GUARD, TMLError.ERROR_BEHAVIOR); + } + } + } + } + } + public void checkDuplicateNames() { List<TMLElement> elts; diff --git a/src/main/java/tmltranslator/tonetwork/TaskNetworkInterfaceOUT.java b/src/main/java/tmltranslator/tonetwork/TaskNetworkInterfaceOUT.java index 101a1712164356f0d434caa7f1e94b0de27db3b9..69be81ef1f4e8aebc82ad7ef67daaeabb6d55eee 100644 --- a/src/main/java/tmltranslator/tonetwork/TaskNetworkInterfaceOUT.java +++ b/src/main/java/tmltranslator/tonetwork/TaskNetworkInterfaceOUT.java @@ -186,6 +186,7 @@ public class TaskNetworkInterfaceOUT extends TMLTask { if (packetsAvailable.size() == 0) { TMLStopState stopOfLeftBranchOfChoice = new TMLStopState("stopNoDestinationTask", referenceObject); addElement(packetChoice, stopOfLeftBranchOfChoice); + packetChoice.addGuard(""); return; } diff --git a/src/main/java/tmltranslator/tonetwork/TaskOUTForDispatch.java b/src/main/java/tmltranslator/tonetwork/TaskOUTForDispatch.java index f69e1b2d985363d704d3bbafa4c0f5a17d86dc9b..145c3d83ea616c200f3ef43944ae05adf7d49f9b 100644 --- a/src/main/java/tmltranslator/tonetwork/TaskOUTForDispatch.java +++ b/src/main/java/tmltranslator/tonetwork/TaskOUTForDispatch.java @@ -137,7 +137,7 @@ public class TaskOUTForDispatch extends TMLTask { mainChoice = new TMLChoice("ChoiceOf" + i, referenceObject); activity.addLinkElement(notified, mainChoice); - activity.addLinkElement(notified, new TMLStopState("StopAfterMainChoice", referenceObject)); + activity.addLinkElement(mainChoice, new TMLStopState("StopAfterMainChoice", referenceObject)); mainChoice.addGuard("nEvt == 0"); TMLForLoop loopInside = new TMLForLoop("LoopInside" + i, referenceObject);