Wiki
Clone wikiscenariotools-sml / Xtext: Tips, Tricks & Tutorials
Xtext: Tips, Tricks & Tutorials
This section is for useful tips about implementing or debugging with Xtext. It contains code examples and links to interesting tutorials.
Printing out constraint messages in correct order
The constraint messages are contained in 4 individual lists in the meta model. So if you want to get the messages in the correct order, you have to concider the Nodemodel of the Xtext document. This was necessary for the LaTeX diagram generator. The following example shows how to print constraint messages in the correct order:
-
Code:
#!xtend def printConstraintMessages(Scenario scenario) { if (scenario.ownedInteraction.constraints != null) { println("Constraints for Scenario " + scenario.name + " in correct order:") val constraints = scenario.ownedInteraction.constraints val node = NodeModelUtils.getNode(constraints) val children = node.children // children of the node: messages, keywords, whitespaces, etc for (var i = 0; i < children.size - 1; i++) { val leaf = children.get(i) // keywords: consider, interrupt, etc val composite = children.get(i + 1) // the actual message // Filter out whitespaces, etc if (leaf instanceof LeafNode && composite instanceof CompositeNodeWithSemanticElement) { println(leaf.text + composite.text) } } } }
-
Example Scenario:
#!sml specification scenario MyScenario { message env -> controller.request() message strict requested controller -> env.response() } constraints [ consider message env -> controller.request() forbidden message env -> controller.request() ignore message env -> controller.request() interrupt message env -> controller.request() interrupt message env -> controller.request() ignore message env -> controller.request() forbidden message env -> controller.request() consider message env -> controller.request() ]
-
Output:
#!txt Constraints for Scenario MyScenario in correct order: consider message env -> controller.request() forbidden message env -> controller.request() ignore message env -> controller.request() interrupt message env -> controller.request() interrupt message env -> controller.request() ignore message env -> controller.request() forbidden message env -> controller.request() consider message env -> controller.request()
Updated