From be4f78978faba3d3ceb88df02a7f93a2e09ff1e0 Mon Sep 17 00:00:00 2001 From: Kenji Hosokawa Date: Tue, 3 Aug 2021 18:42:39 +0900 Subject: Initial commit Bug-AGL: SPEC-4033 Signed-off-by: Kenji Hosokawa --- .../validators/ObjectCompareValidator.xtend | 71 ++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 rba.tool.editor/src/rba/tool/editor/validation/validators/ObjectCompareValidator.xtend (limited to 'rba.tool.editor/src/rba/tool/editor/validation/validators/ObjectCompareValidator.xtend') diff --git a/rba.tool.editor/src/rba/tool/editor/validation/validators/ObjectCompareValidator.xtend b/rba.tool.editor/src/rba/tool/editor/validation/validators/ObjectCompareValidator.xtend new file mode 100644 index 0000000..ba897e1 --- /dev/null +++ b/rba.tool.editor/src/rba/tool/editor/validation/validators/ObjectCompareValidator.xtend @@ -0,0 +1,71 @@ +package rba.tool.editor.validation.validators + +import org.eclipse.xtext.validation.Check +import org.eclipse.xtext.validation.EValidatorRegistrar +import rba.core.ExpressionType +import rba.core.ObjectCompare +import rba.core.RBACorePackage +import rba.tool.editor.messages.Messages +import rba.tool.editor.validation.AbstractRBAModelValidator +import static rba.tool.editor.validation.validators.ValidatorUtils.*; +import rba.core.Expression +import java.util.List + +class ObjectCompareValidator extends AbstractRBAModelValidator { + + override register(EValidatorRegistrar registrar) { + // not needed for classes used as ComposedCheck + } + + def protected getOperatorName() { + return ObjectCompare.simpleName; + } + + @Check(NORMAL) + def checkObjectCompare(ObjectCompare objectCompare) { + doCheck(objectCompare.operand); + } + + /** Check points. + * * operand size is 2. + * * type of operands are AREA/CONTENT/ZONE/SOUND. + */ + def protected doCheck(List operands) { + if (!operandSizeMustBeTwo(operands, getOperatorName, [ msg | error(msg, RBACorePackage.Literals.OPERATOR__OPERAND, 0)])) { + return; + } + + val first = operands.get(0) + switch (first.type) { + case ExpressionType.VALUE: { + val message = String.format(Messages.FIRST_OPERAND_MUST_BE_OBJECT, getOperatorName); + error(message, RBACorePackage.Literals.OPERATOR__OPERAND, 0, null) + return; + } + case AREA, + case CONTENT, + case CONTENT_STATE, + case ZONE, + case SOUND: { + } + default: { + val message = String.format(Messages.OPERANDS_MUST_BE_OBJECT, getOperatorName); + error(message, RBACorePackage.Literals.OPERATOR__OPERAND, 0, null) + return; + } + } + + for (var i = 1; i < operands.size; i++) { + var operand = operands.get(i) + if (operand.type !== first.type && ObjectsMustBeAreaOrContent(operand.type, first.type)) { + val message = String.format(Messages.OPERANDS_MUST_BE_OBJECT, getOperatorName); + error(message, RBACorePackage.Literals.OPERATOR__OPERAND, i, null) + return; + } + } + } + + def private boolean ObjectsMustBeAreaOrContent(ExpressionType type1, ExpressionType type2) { + return true + } +} -- cgit 1.2.3-korg