public void onFire(W window, Timers timers, StateAccessor<?> state) throws Exception {
   // shouldFire should be false.
   // However it is too expensive to assert.
   FinishedTriggersBitSet finishedSet = readFinishedBits(state.access(FINISHED_BITS_TAG)).copy();
   TriggerStateMachine.TriggerContext context =
       contextFactory.base(window, timers, rootTrigger, finishedSet);
   rootTrigger.invokeOnFire(context);
   persistFinishedSet(state, finishedSet);
 }