killbill-memoizeit

entitlement: fix potential NPE in DefaultSubscription getBaseSubscription()

12/12/2013 10:35:54 AM

Details

diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultEntitlement.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultEntitlement.java
index 5576a98..102806e 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultEntitlement.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultEntitlement.java
@@ -124,10 +124,12 @@ public class DefaultEntitlement extends EntityBase implements Entitlement {
         return eventsStream.getAccountTimeZone();
     }
 
+    // Subscription associated with this entitlement (equals to baseSubscription for base subscriptions)
     public SubscriptionBase getSubscriptionBase() {
         return eventsStream.getSubscription();
     }
 
+    // Base subscription for the bundle if it exists, null otherwise
     public SubscriptionBase getBaseSubscription() {
         return eventsStream.getBaseSubscription();
     }
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultSubscription.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultSubscription.java
index 3938659..35bc11c 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultSubscription.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultSubscription.java
@@ -41,7 +41,12 @@ public class DefaultSubscription extends DefaultEntitlement implements Subscript
     @Override
     public LocalDate getBillingEndDate() {
         final DateTime futureOrCurrentEndDateForSubscription = getSubscriptionBase().getEndDate() != null ? getSubscriptionBase().getEndDate() : getSubscriptionBase().getFutureEndDate();
-        final DateTime futureOrCurrentEndDateForBaseSubscription = getBaseSubscription().getEndDate() != null ? getBaseSubscription().getEndDate() : getBaseSubscription().getFutureEndDate();
+        final DateTime futureOrCurrentEndDateForBaseSubscription;
+        if (getBaseSubscription() == null) {
+            futureOrCurrentEndDateForBaseSubscription = null;
+        } else {
+            futureOrCurrentEndDateForBaseSubscription = getBaseSubscription().getEndDate() != null ? getBaseSubscription().getEndDate() : getBaseSubscription().getFutureEndDate();
+        }
 
         final DateTime futureOrCurrentEndDate;
         if (futureOrCurrentEndDateForBaseSubscription != null && futureOrCurrentEndDateForBaseSubscription.isBefore(futureOrCurrentEndDateForSubscription)) {