docs: public void addItem(final InvoiceItem invoiceItem) {
          Preconditions.checkState(!isBuilt, "Tree already built, unable to add new invoiceItem=%s", invoiceItem);
  
          switch (invoiceItem.getInvoiceItemType()) {
              case RECURRING:
                  if (invoiceItem.getAmount().compareTo(BigDecimal.ZERO) == 0) {
                      // Nothing to repair -- https://github.com/killbill/killbill/issues/783
                      existingIgnoredItems.add(invoiceItem);
                  } else {
                      root.addExistingItem(new ItemsNodeInterval(root, new Item(invoiceItem, targetInvoiceId, ItemAction.ADD)));
                  }
                  break;
  
              case REPAIR_ADJ:
                  root.addExistingItem(new ItemsNodeInterval(root, new Item(invoiceItem, targetInvoiceId, ItemAction.CANCEL)));
                  break;
  
              case FIXED:
                  existingIgnoredItems.add(invoiceItem);
                  break;
  
              case ITEM_ADJ:
                  pendingItemAdj.add(invoiceItem);
                  break;
  
              default:
                  break;
          }
      }