code: public void setCurrentSolution(SolutionType solution, Evaluation evaluation, Validation validation){
          // synchronize with status updates
          synchronized(getStatusLock()){
              // assert idle
              assertIdle("Cannot set current solution.");
              // check not null
              if(solution == null || evaluation == null || validation == null){
                  throw new NullPointerException(
                          "Cannot set current solution: solution, evaluation and validation can not be null."
                  );
              }
              // update current solution and check for new best solution
              updateCurrentAndBestSolution(solution, evaluation, validation);
          }
      }
docs: Sets the current solution given that it has already been evaluated and validated.
  It is checked whether the new current solution is a valid first/new best solution.
  Note that this method may only be called when the search is idle.
  
  @param solution current solution to be adopted
  @param evaluation current solution evaluation
  @param validation current solution validation
  @throws SearchException if the search is not idle
  @throws NullPointerException if any argument is <code>null</code>