killbill-memoizeit

fix NullPointerException generating invoice when there is

1/1/2018 11:19:15 AM

Details

diff --git a/invoice/src/main/java/org/killbill/billing/invoice/tree/SubscriptionItemTree.java b/invoice/src/main/java/org/killbill/billing/invoice/tree/SubscriptionItemTree.java
index d194140..061c6c3 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/tree/SubscriptionItemTree.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/tree/SubscriptionItemTree.java
@@ -124,9 +124,19 @@ public class SubscriptionItemTree {
         Preconditions.checkState(!isBuilt);
 
         for (final InvoiceItem item : pendingItemAdj) {
-            final Item fullyAdjustedItem = root.addAdjustment(item, targetInvoiceId);
-            if (fullyAdjustedItem != null) {
-                existingFullyAdjustedItems.add(fullyAdjustedItem);
+
+            // if the linked item was ignore, ignore this adjustment too
+            final InvoiceItem ignoredLinkedItem = Iterables.tryFind(existingIgnoredItems, new Predicate<InvoiceItem>() {
+                @Override
+                public boolean apply(final InvoiceItem input) {
+                    return input.getId().equals(item.getLinkedItemId());
+                }
+            }).orNull();
+            if (ignoredLinkedItem == null) {
+                final Item fullyAdjustedItem = root.addAdjustment(item, targetInvoiceId);
+                if (fullyAdjustedItem != null) {
+                    existingFullyAdjustedItems.add(fullyAdjustedItem);
+                }
             }
         }
         pendingItemAdj.clear();