Skip to content

AbstractStateMachine.canAccept(E event) does not work for events acceptable from parent state  #128

@azhuchkov

Description

@azhuchkov

If we are in a nested state method canAccept() returns false for transitions available from parent state.

Workaround (subclass override):

  @Override
  public boolean canAccept(Object event) {
    ImmutableState<?, ?, ?, ?> testRawState = getCurrentRawState();
    if (testRawState == null) { // assuming auto_start enabled
      testRawState = getInitialRawState();
    }
    return canAccept(testRawState, event);
  }

  private boolean canAccept(ImmutableState<?, ?, ?, ?> state, Object event) {
    final ImmutableState<?, ?, ?, ?> parentState = state.getParentState();

    return state.getAcceptableEvents().contains(event) ||
           (parentState != null && canAccept(parentState, event));
  }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions