/** * @return a new builder initialized to "contain" this query */ public Builder asBuilder() { Builder b = new Builder(); b.fragments = new ArrayList<>(Arrays.asList(fragments)); for (Query subTree : subTrees) { Builder childBuilder = subTree.asBuilder(); childBuilder.parent = b; b.children.add(childBuilder); } return b; }
/** * Creates a new branch in the tree and returns a builder of that branch. * @return a new builder instance for building the child */ public Builder branch() { if (fragments.isEmpty()) { fragments.add(new PathFragment(new NoopFilter())); } Builder child = new Builder(); child.parent = this; children.add(child); return child; }
public static Builder builder() { return new Query.Builder(); }
/** * @return an empty query */ public static Query empty() { return new Builder().build(); }