[Demonstration 1]

[Buggy Method]
public void shrink(File jarFile, File out, String... keep) {
    String jarFileName = jarFile.getName();
    int ind = jarFileName.lastIndexOf('.');
    File unpacked = new File(tmpdir.getAbsolutePath() + File.separator + jarFileName.substring(0, (ind == -1) ? jarFileName.length() : ind));
    if (unpacked.exists()) {
        Files.deleteDir(unpacked);
    }
    if (!unpacked.mkdir()) {
        unpacked.mkdirs();
    }
    String mainClass = Jars.getMainClass(jarFile);
    if ((mainClass == null || mainClass.trim().isEmpty()) && (keep == null || keep.length <= 0)) {
        printStream.println("No Main-Class found and no packages to keep.");
        return;
    }
    if (printStatus && printStream != null)
        printStream.println("Unpacking .jar");
    Jars.extract(jarFile, unpacked);
    if (printStatus && printStream != null)
        printStream.println("Analyzing dependencies");
    Map<String, String[]> dependencyMap = Dependencies.buildDependencyMap(jdepsLocation, unpacked);
    if (printStatus && printStream != null)
        printStream.println("Constructing dependency-tree");
    Set<String> classTree = ClassTreeBuilder.getClassTree(mainClass, dependencyMap, keep);
    if (printDependencyList && printStream != null) {
        printStream.println("\nDependencies:\n");
        for (String s : classTree) {
            printStream.println(s);
        }
        printStream.println();
    }
    if (printStatus && printStream != null)
        printStream.println("Scraping redundant classes");
    Dependencies.removeRedundantClasses(unpacked, classTree);
    if (printStatus && printStream != null)
        printStream.println("Building new .jar");
    Jars.create(unpacked, out);
    Files.deleteDir(unpacked);
    if (printStatus && printStream != null)
        printStream.println("Done");
}

[Buggy Hunk]
Set<String> classTree = ClassTreeBuilder.getClassTree(mainClass, dependencyMap, keep);

[Patch]
Set<String> classTree = ClassTreeBuilder.getClassTree(mainClass, dependencyMap, keep, printDependencyList, printStream);

[Demonstration 2]

[Buggy Method]
public void printStatus() {
    System.out.println(HORSES_TEXT);
    for (Horse horse : horses) {
        horse.printStatus();
    }
}

[Buggy Hunk]
horse.printStatus();

[Patch]
horse.printStatus(winningHorse);

[Demonstration 3]

[Buggy Method]
@Test
public void shouldLoadMovieData() throws FileNotFoundException {
    assertEquals(new DataService().loadMovies("data/movies_test.txt").size(), 1);
}

[Buggy Hunk]
assertEquals(new DataService().loadMovies("data/movies_test.txt").size(), 1);

[Patch]
assertEquals(new DataService().loadMovies("data/movies_test.txt").size(), 2);