code: @Override
      public QueuedValuePlacer buildEntityPlacer(HeuristicConfigPolicy configPolicy) {
          EntityDescriptor entityDescriptor = deduceEntityDescriptor(configPolicy.getSolutionDescriptor(), entityClass);
          boolean reinitializeVariableFilterEnabled = configPolicy.isReinitializeVariableFilterEnabled();
          configPolicy.setReinitializeVariableFilterEnabled(false);
          ValueSelectorConfig valueSelectorConfig_ = buildValueSelectorConfig(configPolicy, entityDescriptor);
          ValueSelector valueSelector = valueSelectorConfig_.buildValueSelector(configPolicy, entityDescriptor,
                  SelectionCacheType.PHASE, SelectionOrder.ORIGINAL);
          configPolicy.setReinitializeVariableFilterEnabled(reinitializeVariableFilterEnabled);
  
          MoveSelectorConfig moveSelectorConfig;
          if (ConfigUtils.isEmptyCollection(moveSelectorConfigList)) {
              moveSelectorConfig = buildChangeMoveSelectorConfig(configPolicy,
                      valueSelectorConfig_.getId(), valueSelector.getVariableDescriptor());
          } else if (moveSelectorConfigList.size() == 1) {
              moveSelectorConfig = moveSelectorConfigList.get(0);
          } else {
              // TODO moveSelectorConfigList is only a List because of XStream limitations.
              throw new IllegalArgumentException("The moveSelectorConfigList (" + moveSelectorConfigList
                      + ") must be a singleton or empty. Use a single " + UnionMoveSelectorConfig.class.getSimpleName()
                      + " or " + CartesianProductMoveSelectorConfig.class.getSimpleName()
                      + " element to nest multiple MoveSelectors.");
          }
          MoveSelector moveSelector = moveSelectorConfig.buildMoveSelector(
                  configPolicy, SelectionCacheType.JUST_IN_TIME, SelectionOrder.ORIGINAL);
          if (!(valueSelector instanceof EntityIndependentValueSelector)) {
              throw new IllegalArgumentException("The queuedValuePlacer (" + this
                      + ") needs to be based on an EntityIndependentValueSelector (" + valueSelector + ")."
                      + " Check your @" + ValueRangeProvider.class.getSimpleName() + " annotations.");
  
          }
          return new QueuedValuePlacer((EntityIndependentValueSelector) valueSelector, moveSelector);
      }
docs: ************************************************************************