// todo: Condense this into one run where we collect all bounds for all parents ...
  private void recurse(final LogicalPageBox box, final Section section) {
    if (section != null) {
      this.ids.clear();
      this.ids.add(section.getObjectID());
      this.bounds = null;
      startProcessing(box);
      if (this.bounds == null) {
        DebugLog.log("Failed to collect bounds for report of section " + section);
        recurse(box, section.getParentSection());
        return;
      }

      DebugLog.log("Generating bounds for empty section " + section);
      this.bounds.setRect(this.bounds.getX(), this.bounds.getY(), this.bounds.getWidth(), 0);
    }
  }
 public StrictBounds select(
     final HashSet<InstanceID> ids, final LogicalPageBox box, final Section section) {
   if (ids == null) {
     throw new NullPointerException();
   }
   this.ids.clear();
   this.ids.addAll(ids);
   this.bounds = null;
   startProcessing(box);
   if (this.bounds == null) {
     recurse(box, section.getParentSection());
     if (this.bounds == null) {
       return new StrictBounds();
     }
   }
   return this.bounds;
 }