private ByteTransition extendShortcutTransition()

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);
    }