@Override
      protected DfaInstructionState @NotNull [] acceptInstruction(@NotNull DfaInstructionState instructionState) {
        Instruction instruction = instructionState.getInstruction();
        TrackingDfaMemoryState memState = (TrackingDfaMemoryState)instructionState.getMemoryState().createCopy();
        DfaInstructionState[] states = super.acceptInstruction(instructionState);
        for (DfaInstructionState state : states) {
          afterStates.add(state);
          ((TrackingDfaMemoryState)state.getMemoryState()).recordChange(instruction, memState);
        }
        if (states.length == 0) {
          killedStates.add(memState);
        }
        if (instruction instanceof ExpressionPushingInstruction pushing && pushing.getDfaAnchor() instanceof JavaExpressionAnchor anchor &&
            anchor.getExpression() == myExpression) {
          for (DfaInstructionState state : states) {
            MemoryStateChange history = ((TrackingDfaMemoryState)state.getMemoryState()).getHistory();
            myHistoryForContext = myHistoryForContext == null ? history : myHistoryForContext.merge(history);
          }
        }
        return states;
      }
@Override
      protected DfaInstructionState @NotNull [] acceptInstruction(@NotNull DfaInstructionState instructionState)