[Demonstration 1]

[Buggy Method]
public static Result service(String ownerName, String projectName, String service, boolean isAdvertise) throws IOException, UnsupportedOperationException, ServletException {
    if (!isSupportedService(service)) {
        return forbidden(String.format("Unsupported service: '%s'", service));
    }
    Project project = Project.findByOwnerAndProjectName(ownerName, projectName);
    if (project == null) {
        return notFound();
    }
    models.User user = UserApp.currentUser();
    if (!isAllowed(project, service)) {
        if (user.isAnonymous()) {
            return BasicAuthAction.unauthorized(response());
        } else {
            // If you want the Git client showing your custom message to
            // the user, the Content-Type should be exact "text/plain"
            // without any parameter. For more details, see the code at
            // https://github.com/git/git/commit/426e70d4a11ce3b4f70636d57c6a0ab16ae08a00#diff-eea0ad565ec5903a11b6023755d491cfR154
            response().setHeader("Content-Type", "text/plain");
            return forbidden(String.format("'%s' has no permission to '%s/%s'.", user.name, ownerName, projectName));
        }
    }
    if (isAdvertise) {
        return ok(RepositoryService.gitAdvertise(project, service, response()));
    } else {
        if (request().body().isMaxSizeExceeded()) {
            return status(REQUEST_ENTITY_TOO_LARGE);
        } else {
            user.visits(project);
            return ok(RepositoryService.gitRpc(project, service, request(), response()));
        }
    }
}

[Buggy Hunk]
user.name, ownerName, projectName));

[Patch]
user.loginId, ownerName, projectName));

[Demonstration 2]

[Buggy Method]
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    // Runnable runnable = new ExecuteRunnable(req);
    // java.util.concurrent.Executor executor = new MyExecutor();
    // executor.execute(runnable);
    System.out.println("doPost");
    TestData testData = null;
    try {
        testData = this.parseTestData(req);
    } catch (ZipException | InterruptedException e) {
        e.printStackTrace();
    }
    TestPlatform testPlatform = (TestPlatform) this.getServletContext().getAttribute("testPlatform");
    List<String> output = testPlatform.execute(testData);
    ServletContext application = this.getServletContext();
    //		application.setAttribute(TAG_REPORT_SIZE, output.size());
    //		int lineCnt = 1;
    //		for (String line : output) {
    //			application.setAttribute(TAG_REPORT + "_" + lineCnt++, line);
    //		}
    application.setAttribute(TAG_REPORT_LIST, output);
    // go to "report.jsp"
    resp.sendRedirect("report.jsp");
}

[Buggy Hunk]
List<String> output = testPlatform.execute(testData);

[Patch]
List<HashMap<String, Object>> output = testPlatform.execute(testData);

[Demonstration 3]

[Buggy Method]
@Test
public void shouldPerformAnalysisWithAllActions() {
    // given
    List<A> data = giveData(Integer.valueOf(1), Integer.valueOf(2), null, Integer.valueOf(3));
    Map<String, Date> dates = giveChangeDates(data);
    Function<A, B> accessFunction = giveAccessFunction();
    Function<B, Comparable> compareFunction = giveCompareFunction();
    List<B> changes = CarAnalysisUtils.detectChanges(accessFunction, compareFunction, data, dates);
    Set<AnalysisOutputData> output = Sets.newHashSet();
    // when
    CarAnalysisUtils.performAnalysis(changes, "test", dates, compareFunction, output);
    // then
    assertThat(output).hasSize(4);
    assertThat(output).onProperty("historyAction").containsOnly(TimestampAnalysisAction.NEW, TimestampAnalysisAction.CHANGED, TimestampAnalysisAction.REMOVED, TimestampAnalysisAction.ADDED);
    assertThat(output).onProperty("subject").containsOnly("test");
    // TODO
}

[Buggy Hunk]
Set<AnalysisOutputData> output = Sets.newHashSet();

[Patch]
List<AnalysisOutputData> output = Lists.newArrayList();