/* * generated by Xtext */ package robots.missions.validation import java.util.LinkedList import java.util.List import org.eclipse.xtext.validation.Check import robots.missions.taskDSL.Action import robots.missions.taskDSL.Behaviour import robots.missions.taskDSL.Mission import robots.missions.taskDSL.Robot //import org.eclipse.xtext.validation.Check /** * This class contains custom validation rules. * * See https://www.eclipse.org/Xtext/documentation/303_runtime_concepts.html#validation */ class TaskDSLValidator extends AbstractTaskDSLValidator { @Check def checkRobot(Robot r){ if(r.acc == 0){ warning("Acceleration set to zero, this could lead to non moving robot", null); } if(r.spd == 0){ warning("Acceleration set to zero, this could lead to non moving robot", null); } } @Check def checkBehavioursl(Mission m) { var List empty = new LinkedList(); var List all = new LinkedList(); var List warned = new LinkedList(); for(Behaviour b : m.behaviours){ if(b.tc == null){ empty.add(b.name); } if(all.contains(b.name) && !warned.contains(b.name)){ warning("Behaviour '" + b.name + "' multiple times in the behaviourlist.", null); warned.add(b.name); } all.add(b.name); } if(empty.size() > 1){ warning("Multiple behaviours without takeControl predicate. You might want to remove some of: " + empty.toString(), null); } } @Check def checkActions(Action a) { if(a.turnType != null && a.turnType.turnDir == null){ if(a.turnType.start == a.turnType.end){ error("Start and end cannot be the same", null); } else if(a.turnType.start > a.turnType.end){ error("Start should be smaller then end", null); } } } }