docs: public List<InvoiceItem> getView() {
  
          final List<InvoiceItem> tmp = new LinkedList<InvoiceItem>();
          tmp.addAll(remainingIgnoredItems);
          tmp.addAll(Collections2.filter(Collections2.transform(items, new Function<Item, InvoiceItem>() {
              @Override
              public InvoiceItem apply(final Item input) {
                  final InvoiceItem resultingCandidate = input.toInvoiceItem();
  
                  // Post merge, the ADD items are the candidates for the resulting RECURRING items (see toInvoiceItem()).
                  // We will ignore any resulting item matching existing items on disk though as these are the result of full item adjustments.
                  // See https://github.com/killbill/killbill/issues/654
                  if (isMerged) {
                      for (final Item existingAdjustedItem : existingFullyAdjustedItems) {
                          // Note: we DO keep the item in case of partial matches, e.g. if the new proposed item end date is before
                          // the existing (adjusted) item. See TestSubscriptionItemTree#testMaxedOutProRation
                          final InvoiceItem fullyAdjustedInvoiceItem = existingAdjustedItem.toInvoiceItem();
                          if (resultingCandidate.matches(fullyAdjustedInvoiceItem)) {
                              return null;
                          }
                      }
                  }
  
                  return resultingCandidate;
              }
          }), new Predicate<InvoiceItem>() {
              @Override
              public boolean apply(@Nullable final InvoiceItem input) {
                  return input != null;
              }
          }));
  
          final List<InvoiceItem> result = Ordering.<InvoiceItem>from(INVOICE_ITEM_COMPARATOR).sortedCopy(tmp);
          checkItemsListState(result);
          return result;
      }