// TODO: Rethink this implementation
// first check the validity of the timer state
this.assertTimerState();
if (this.nextExpiration == null) {
throw new NoMoreTimeoutsException("No more timeouts for timer " + this);
}
long currentTimeInMillis = System.currentTimeMillis();
long nextTimeoutInMillis = this.nextExpiration.getTime();
// if the next expiration is *not* in future and the repeat interval isn't