docs: @Override
      public Collection<BlockingState> computeAddonsBlockingStatesForFutureSubscriptionBaseEvents() {
          if (!ProductCategory.BASE.equals(subscription.getCategory())) {
              // Only base subscriptions have add-ons
              return ImmutableList.of();
          }
  
          // We need to find the first "trigger" transition, from which we will create the add-ons cancellation events.
          // This can either be a future entitlement cancel...
          if (isEntitlementFutureCancelled()) {
              // Note that in theory we could always only look subscription base as we assume entitlement cancel means subscription base cancel
              // but we want to use the effective date of the entitlement cancel event to create the add-on cancel event
              final BlockingState futureEntitlementCancelEvent = getEntitlementCancellationEvent(subscription.getId());
              return computeAddonsBlockingStatesForNextSubscriptionBaseEvent(futureEntitlementCancelEvent.getEffectiveDate(), false);
          } else if (isEntitlementFutureChanged()) {
              // ...or a subscription change (i.e. a change plan where the new plan has an impact on the existing add-on).
              // We need to go back to subscription base as entitlement doesn't know about these
              return computeAddonsBlockingStatesForNextSubscriptionBaseEvent(utcNow, true);
          } else {
              return ImmutableList.of();
          }
      }