docs: private void restoreDescendantComponentWithoutRestoreState(UIComponent parent, boolean iterateFacets,
                                                                 boolean restoreChildFacets) {
          if (iterateFacets && parent.getFacetCount() > 0) {
              Iterator<UIComponent> childIterator = parent.getFacets().values().iterator();
  
              while (childIterator.hasNext()) {
                  UIComponent component = childIterator.next();
  
                  // reset the client id (see spec 3.1.6)
                  component.setId(component.getId());
                  if (!component.isTransient()) {
                      restoreDescendantComponentWithoutRestoreState(component, restoreChildFacets, true);
                  }
              }
          }
  
          if (parent.getChildCount() > 0) {
              for (int i = 0; i < parent.getChildCount(); i++) {
                  UIComponent component = parent.getChildren().get(i);
  
                  // reset the client id (see spec 3.1.6)
                  component.setId(component.getId());
                  if (!component.isTransient()) {
                      restoreDescendantComponentWithoutRestoreState(component, restoreChildFacets, true);
                  }
              }
          }
      }