Source:
private LocalSearchDecider buildDecider(HeuristicConfigPolicy configPolicy, Termination termination) { MoveSelector moveSelector = buildMoveSelector(configPolicy); Acceptor acceptor = buildAcceptor(configPolicy); LocalSearchForager forager = buildForager(configPolicy); if (moveSelector.isNeverEnding() && !forager.supportsNeverEndingMoveSelector()) { throw new IllegalStateException("The moveSelector (" + moveSelector + ") has neverEnding (" + moveSelector.isNeverEnding() + "), but the forager (" + forager + ") does not support it.\n" + "Maybe configure the <forager> with an <acceptedCountLimit>."); } LocalSearchDecider decider; Integer moveThreadCount = configPolicy.getMoveThreadCount(); if (moveThreadCount == null) { decider = new LocalSearchDecider(configPolicy.getLogIndentation(), termination, moveSelector, acceptor, forager); } else { Integer moveThreadBufferSize = configPolicy.getMoveThreadBufferSize(); if (moveThreadBufferSize == null) { moveThreadBufferSize = 10; } ThreadFactory threadFactory = configPolicy.buildThreadFactory(ChildThreadType.MOVE_THREAD); int selectedMoveBufferSize = moveThreadCount * moveThreadBufferSize; decider = new MultiThreadedLocalSearchDecider(configPolicy.getLogIndentation(), termination, moveSelector, acceptor, forager, threadFactory, moveThreadCount, selectedMoveBufferSize); } EnvironmentMode environmentMode = configPolicy.getEnvironmentMode(); if (environmentMode.isNonIntrusiveFullAsserted()) { decider.setAssertMoveScoreFromScratch(true); } if (environmentMode.isIntrusiveFastAsserted()) { decider.setAssertExpectedUndoMoveScore(true); } return decider; }

Target:
private LocalSearchDecider buildDecider(HeuristicConfigPolicy configPolicy, Termination termination) { MoveSelector moveSelector = buildMoveSelector(configPolicy); Acceptor acceptor = buildAcceptor(configPolicy); LocalSearchForager forager = buildForager(configPolicy); if (moveSelector.isNeverEnding() && !forager.supportsNeverEndingMoveSelector()) { throw new IllegalStateException("The moveSelector (" + moveSelector + ") has neverEnding (" + moveSelector.isNeverEnding() + "), but the forager (" + forager + ") does not support it.\n" + "Maybe configure the <forager> with an <acceptedCountLimit>."); } Integer moveThreadCount = configPolicy.getMoveThreadCount(); EnvironmentMode environmentMode = configPolicy.getEnvironmentMode(); LocalSearchDecider decider; if (moveThreadCount == null) { decider = new LocalSearchDecider(configPolicy.getLogIndentation(), termination, moveSelector, acceptor, forager); } else { Integer moveThreadBufferSize = configPolicy.getMoveThreadBufferSize(); if (moveThreadBufferSize == null) { moveThreadBufferSize = 10; } ThreadFactory threadFactory = configPolicy.buildThreadFactory(ChildThreadType.MOVE_THREAD); int selectedMoveBufferSize = moveThreadCount * moveThreadBufferSize; MultiThreadedLocalSearchDecider multiThreadedDecider = new MultiThreadedLocalSearchDecider( configPolicy.getLogIndentation(), termination, moveSelector, acceptor, forager, threadFactory, moveThreadCount, selectedMoveBufferSize); if (environmentMode.isNonIntrusiveFullAsserted()) { multiThreadedDecider.setAssertStepScoreFromScratch(true); } if (environmentMode.isIntrusiveFastAsserted()) { multiThreadedDecider.setAssertExpectedStepScore(true); multiThreadedDecider.setAssertShadowVariablesAreNotStaleAfterStep(true); } decider = multiThreadedDecider; } if (environmentMode.isNonIntrusiveFullAsserted()) { decider.setAssertMoveScoreFromScratch(true); } if (environmentMode.isIntrusiveFastAsserted()) { decider.setAssertExpectedUndoMoveScore(true); } return decider; }