mQueryInfo.addAll(other.getResultInfo());
    protected QueryOperation combineOps(QueryOperation other, boolean union) {        assert(!mHaveRunSearch);        if (union) {            if (other.hasNoResults()) {                // a query for (other OR nothing) == other                return this;            }        } else {            if (other.hasAllResults()) {                if (other.hasSpamTrashSetting()) {                    forceHasSpamTrashSetting();                }                // we match all results.  (other AND anything) == other                return this;            }        }        if (other instanceof LuceneQueryOperation) {            LuceneQueryOperation otherLuc = (LuceneQueryOperation)other;            if (union) {                mQueryString = '('+mQueryString+") OR ("+otherLuc.mQueryString+')';            } else {                mQueryString = '('+mQueryString+") AND ("+otherLuc.mQueryString+')';            }            BooleanQuery top = new BooleanQuery();            BooleanClause lhs = new BooleanClause(mQuery, !union, false);            BooleanClause rhs = new BooleanClause(otherLuc.mQuery, !union, false);            top.add(lhs);            top.add(rhs);            mQuery = top;            return this;        }        return null;    }