private StringInItem fillStringIn(OperatorNode<ExpressionOperator> ast,
                                      OperatorNode<ExpressionOperator> arg,
                                      StringInItem out) {
        assertHasOperator(arg, ExpressionOperator.ARRAY);
        List<OperatorNode<ExpressionOperator>> values = arg.getArgument(0);
        for (var value : values) {
            switch (value.getOperator()) {
                case LITERAL -> {
                    String tokenValue = value.getArgument(0, String.class);
                    out.addToken(tokenValue);
                }
                case VARREF -> {
                    Preconditions.checkState(userQuery != null, "Query properties are not available");
                    String varRef = value.getArgument(0, String.class);
                    ParameterListParser.addStringTokensFromString(userQuery.properties().getString(varRef), out);
                }
                default -> throw newUnexpectedArgumentException(value.getOperator(),
                        ExpressionOperator.LITERAL, ExpressionOperator.VARREF);
            }
        }
        return out;
    }
The YQL query language.

This class <em>must</em> be kept in lockstep with {@link VespaSerializer}.
Adding anything here will usually require a corresponding addition in
VespaSerializer.

@author Steinar Knutsen
@author Stian Kristoffersen
@author Simon Thoresen Hult
container-search/src/main/java/com/yahoo/search/yql/YqlParser.java