@Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        OperatorNode that = (OperatorNode) o;

        if (!annotations.equals(that.annotations)) return false;
        // Probably incorrect - comparing Object[] arrays with Arrays.equals
        if (!Arrays.equals(args, that.args)) return false;
        if (!operator.equals(that.operator)) return false;

        return true;
    }
Represents a use of an operator against concrete arguments. The types of arguments depend on the operator.
The extension point of this scheme is the Operator rather than new types of Nodes.
Operators SHOULD take a fixed number of arguments -- wrap variable argument counts in Lists.
container-search/src/main/java/com/yahoo/search/yql/OperatorNode.java