in src/main/software/amazon/event/ruler/ByteMachine.java [1351:1380]
private ByteTransition extendShortcutTransition(final ByteState state, final ByteTransition trans,
final InputCharacter character, final int currentIndex) {
if (!trans.isShortcutTrans()) {
return trans;
}
ShortcutTransition shortcut = (ShortcutTransition) trans;
Patterns shortcutPattern = shortcut.getMatch().getPattern();
String valueInCurrentPos = ((ValuePatterns) shortcutPattern).pattern();
final InputCharacter[] charactersInCurrentPos = getParser().parse(shortcutPattern.type(), valueInCurrentPos);
ByteState firstNewState = null;
ByteState currentState = state;
for (int k = currentIndex; k < charactersInCurrentPos.length-1; k++) {
// we need keep the current state always pointed to last character.
final ByteState newByteState = new ByteState();
newByteState.setIndeterminatePrefix(currentState.hasIndeterminatePrefix());
if (k != currentIndex) {
putTransitionNextState(currentState, charactersInCurrentPos[k], shortcut, newByteState);
} else {
firstNewState = newByteState;
}
currentState = newByteState;
}
putTransitionMatch(currentState, charactersInCurrentPos[charactersInCurrentPos.length-1],
EmptyByteTransition.INSTANCE, shortcut.getMatch());
removeTransition(currentState, charactersInCurrentPos[charactersInCurrentPos.length-1], shortcut);
putTransitionNextState(state, character, shortcut, firstNewState);
return getTransition(state, character);
}