package main.nl.uva.parser.expression; import main.nl.uva.parser.Line; import main.nl.uva.validation.ASTValidation; import main.nl.uva.validation.Scope; import main.nl.uva.validation.error.InvalidTypeError; import main.nl.uva.validation.type.Invalid; import main.nl.uva.validation.type.Money; import main.nl.uva.validation.type.Value; import main.nl.uva.validation.type.Value.Type; public class Minus extends Expression { private final Expression _expression; public Minus(final Expression expression, final Line lineInfo) { super(lineInfo); _expression = expression; } @Override public Value getValue() { if (!_expression.getValue().isTypeOf(Type.MONEY)) { return new Invalid(); } Money money = (Money) _expression.getValue(); return new Money(-money.getValue()); } @Override public ASTValidation validateAndCalculate(final Scope scope) { ASTValidation valid = _expression.validateAndCalculate(scope); if (!_expression.getValue().isTypeOf(Type.MONEY)) { valid.addError(new InvalidTypeError(this.toString(), getLineInfo())); } notifyListenersAboutValueChange(); return valid; } @Override public String toString() { return "-" + _expression; } }