private Expression transformUnary(UnaryExpression expression) { // Transform the operand: Expression operand = expression.getOperand(); if (operand == null) { throw new IllegalArgumentException("The operand in expression \"" + expression + "\" is null"); } operand = transform(operand); // Compute the type: Operator operator = expression.getOperator(); Type type; switch (operator) { case NOT: type = model.getBooleanType(); break; case SUBTRACT: type = operand.getType(); break; default: throw new IllegalArgumentException( "The operator \"" + operator + "\" in expression \"" + expression + "\" isn't supported" ); } // Return the result: UnaryExpression result = new UnaryExpression(); result.setType(type); result.setOperator(operator); result.setOperand(operand); return result; }
private Expression transformArray(ArrayExpression expression) { // Transform the array: Expression array = expression.getArray(); if (array == null) { throw new IllegalArgumentException("The array in array expression \"" + expression + "\" is null"); } array = transform(array); // Transform the index: Expression index = expression.getIndex(); if (index == null) { throw new IllegalArgumentException("The index in array expression \"" + expression + "\" is null"); } index = transform(index); // Compute the type: Type type = null; Type arrayType = array.getType(); if (arrayType instanceof ListType) { ListType listType = (ListType) arrayType; type = listType.getElementType(); } // Return the result: ArrayExpression result = new ArrayExpression(); result.setType(type); result.setArray(array); result.setIndex(index); return result; }
Type type = target.getType(); if (type instanceof StructType) { StructType struct = (StructType) type;