X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=dsl%2Fxtend%2Fsrc%2Frobots%2Fmissions%2Fvalidation%2FTaskDSLValidator.xtend;h=e9f20fb319d3e2eea055eb022389ae2c34ae2d22;hb=844ff9a744d2c253bd5b76475a84370435329405;hp=96fe5acbcd48f35bebbd80b2a05ca098506f0c8f;hpb=55df69a5d4941d45bd3d860e6cea9b1357e09f98;p=des2015.git diff --git a/dsl/xtend/src/robots/missions/validation/TaskDSLValidator.xtend b/dsl/xtend/src/robots/missions/validation/TaskDSLValidator.xtend index 96fe5ac..e9f20fb 100644 --- a/dsl/xtend/src/robots/missions/validation/TaskDSLValidator.xtend +++ b/dsl/xtend/src/robots/missions/validation/TaskDSLValidator.xtend @@ -3,6 +3,14 @@ */ 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. @@ -10,30 +18,44 @@ package robots.missions.validation * See https://www.eclipse.org/Xtext/documentation/303_runtime_concepts.html#validation */ class TaskDSLValidator extends AbstractTaskDSLValidator { - -// public static val INVALID_NAME = 'invalidName' -// -// @Check -// def checkGreetingStartsWithCapital(Greeting greeting) { -// if (!Character.isUpperCase(greeting.name.charAt(0))) { -// warning('Name should start with a capital', -// MyDslPackage.Literals.GREETING__NAME, -// INVALID_NAME) -// } -// } -/* @Check - def checkStoppingExpressionShouldHaveOneBehaviourToCollectColor(Mission mission) { - var isCollectColorExist = false; - if (!mission.se.scond.colors.nullOrEmpty) { - var blist = mission.behaviours; - for (var j = 0; j < blist.size; j++) { - if (!blist.get(j).clcColor.nullOrEmpty) { - isCollectColorExist = true; - } + @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); } - if (!isCollectColorExist) { - error("Must specify one behaviour to collect color", 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); + } } - }*/ + } }