StateMachine { public void handle(C context) { handle(null, context); } StateMachine(State<T, C> start,
      ImmutableTable<State<T, C>, T, State<T, C>> table,
      boolean explRecurTrns); void handle(C context); void handle(@Nullable T trigger, C context); State<T, C> getCurrentState(); boolean stateIs(State<T, C> s); @SafeVarargs final boolean stateIsOneOf(State<T, C>... states); ImmutableCollection<State<T, C>> getStates(); U getStateOfType(Class<U> type); boolean isSupported(T trigger); EventAPI getEventAPI(); @Override int hashCode(); @Override boolean equals(@Nullable Object other); @Override String toString(); @CheckReturnValue static StateMachineBuilder<T, C> create(
      State<T, C> initialState);  }
@Test(expected = IllegalArgumentException.class) public void impossibleTransition() { fsm.handle(Events.START, CONTEXT); fsm.handle(Events.START, CONTEXT); }