/** * Method validate() * * @see msi.gaml.compilation.IDescriptionValidator#validate(msi.gaml.descriptions.IDescription) */ @Override public void validate(final IDescription description) { // Verify that the state is inside a species with fsm control SpeciesDescription species = description.getSpeciesContext(); String keyword = description.getKeyword(); IArchitecture control = species.getControl(); // String control = species.getControlName(); if (!(control instanceof FsmArchitecture)) { if (keyword.equals(STATE)) { description.error( "A state can only be defined in an fsm-controlled or user-controlled species", IGamlIssue.WRONG_CONTEXT); return; } else if (control.getClass() == FsmArchitecture.class) { description.error( "A " + description.getKeyword() + " can only be defined in a user-controlled species (one of" + AllowedArchitectures + ")", IGamlIssue.WRONG_CONTEXT); return; } } if (!Assert.nameIsValid(description)) { return; } Facets ff = description.getFacets(); IExpression expr = ff.getExpr(INITIAL); if (IExpressionFactory.TRUE_EXPR.equals(expr)) { assertNoOther(description, INITIAL); } else { expr = ff.getExpr(FINAL); if (IExpressionFactory.TRUE_EXPR.equals(expr)) { assertNoOther(description, FINAL); } else { assertAtLeastOne(description, INITIAL); } } }