protected SolutionDescriptor buildSolutionDescriptor() {
   if (solutionClass == null) {
     throw new IllegalArgumentException(
         "Configure a <solutionClass> in the solver configuration.");
   }
   SolutionDescriptor solutionDescriptor = new SolutionDescriptor(solutionClass);
   solutionDescriptor.processAnnotations();
   if (CollectionUtils.isEmpty(planningEntityClassList)) {
     throw new IllegalArgumentException(
         "Configure at least 1 <planningEntityClass> in the solver configuration.");
   }
   for (Class<?> planningEntityClass : planningEntityClassList) {
     PlanningEntityDescriptor entityDescriptor =
         new PlanningEntityDescriptor(solutionDescriptor, planningEntityClass);
     solutionDescriptor.addPlanningEntityDescriptor(entityDescriptor);
     entityDescriptor.processAnnotations();
   }
   solutionDescriptor.afterAnnotationsProcessed();
   return solutionDescriptor;
 }