@Override
 protected void handleAssumptionViolation(AssumptionViolatedException e) {
   super.handleAssumptionViolation(e);
   for (GuesserQueue queue : queues) {
     queue.update(e);
   }
 }
 @Override
 protected void runWithIncompleteAssignment(Assignments incomplete) throws Throwable {
   GuesserQueue guessers = createGuesserQueue(incomplete);
   queues.add(guessers);
   while (!guessers.isEmpty()) {
     runWithAssignment(incomplete.assignNext(guessers.remove(0)));
   }
   queues.remove(guessers);
 }
    private GuesserQueue createGuesserQueue(Assignments incomplete) throws Exception {
      ParameterSignature nextUnassigned = incomplete.nextUnassigned();

      if (nextUnassigned.hasAnnotation(Stub.class)) {
        GuesserQueue queue = new GuesserQueue();
        queue.add(new Guesser<Object>((Class<?>) nextUnassigned.getType()));
        return queue;
      }

      return GuesserQueue.forSingleValues(incomplete.potentialsForNextUnassigned());
    }