public TaskUpToDateState( TaskInternal task, TaskHistoryRepository.History history, FileCollectionSnapshotter outputFilesSnapshotter, FileCollectionSnapshotter inputFilesSnapshotter, FileCollectionSnapshotter discoveredFilesSnapshotter) { TaskExecution thisExecution = history.getCurrentExecution(); TaskExecution lastExecution = history.getPreviousExecution(); noHistoryState = NoHistoryStateChangeRule.create(task, lastExecution); taskTypeState = TaskTypeStateChangeRule.create(task, lastExecution, thisExecution); inputPropertiesState = InputPropertiesStateChangeRule.create(task, lastExecution, thisExecution); // Capture outputs state try { outputFilesState = caching( OutputFilesStateChangeRule.create( task, lastExecution, thisExecution, outputFilesSnapshotter)); } catch (UncheckedIOException e) { throw new UncheckedIOException( String.format( "Failed to capture snapshot of output files for task '%s' during up-to-date check.", task.getName()), e); } // Capture inputs state try { FileCollectionSnapshot inputFilesSnapshot = inputFilesSnapshotter.snapshot(task.getInputs().getFiles()); this.inputFilesSnapshot = inputFilesSnapshot.getSnapshot(); inputFilesState = caching( InputFilesStateChangeRule.create(lastExecution, thisExecution, inputFilesSnapshot)); } catch (UncheckedIOException e) { throw new UncheckedIOException( String.format( "Failed to capture snapshot of input files for task '%s' during up-to-date check.", task.getName()), e); } // Capture discovered inputs state from previous execution try { discoveredInputFilesState = DiscoveredInputFilesStateChangeRule.create( lastExecution, thisExecution, discoveredFilesSnapshotter); } catch (UncheckedIOException e) { throw new UncheckedIOException( String.format( "Failed to capture snapshot of input files for task '%s' during up-to-date check.", task.getName()), e); } allTaskChanges = new SummaryTaskStateChanges( MAX_OUT_OF_DATE_MESSAGES, noHistoryState, taskTypeState, inputPropertiesState, outputFilesState, inputFilesState, caching(discoveredInputFilesState)); rebuildChanges = new SummaryTaskStateChanges( 1, noHistoryState, taskTypeState, inputPropertiesState, outputFilesState); }