private void doMove(ConstructionHeuristicMoveScope moveScope) { ScoreDirector scoreDirector = moveScope.getScoreDirector(); Move move = moveScope.getMove(); Move undoMove = move.createUndoMove(scoreDirector); moveScope.setUndoMove(undoMove); move.doMove(scoreDirector); processMove(moveScope); undoMove.doMove(scoreDirector); if (assertExpectedUndoMoveScore) { ConstructionHeuristicSolverPhaseScope phaseScope = moveScope.getStepScope().getPhaseScope(); phaseScope.assertExpectedUndoMoveScore(move, undoMove); } logger.trace( " Move index ({}), score ({}) for move ({}).", moveScope.getMoveIndex(), moveScope.getScore(), moveScope.getMove()); }