protected final DataType setInputType(DataType inputType, DataType requiredType, TypeContext context) {
        if (requiredType != null && inputType == null)
            throw new VerificationException(this, "Expected " + requiredType.getName() + " input, but no input is provided");
        if (requiredType != null && ! (inputType.isAssignableTo(requiredType)))
            throw new VerificationException(this, "Expected " + requiredType.getName() + " input, got " + inputType.getName());
        return assignInputType(inputType);
    }
Sets the input type of this and returns the resulting output type, or null if it cannot be
uniquely determined.
This default implementation returns the same type, which is appropriate for all statements
that do not change the type.

@param inputType the type to set as the input type of this, or null if it cannot be determined
@param requiredType the type the input type must be assignable to
@param context the context of this
@return input the input type of this expression resolved from this call and current state
@throws IllegalArgumentException if inputType isn't assignable to requiredType
indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/Expression.java