[Demonstration 1]

[Buggy Method]
@Override
public boolean poll() {
    if (apiRequestSummary == null) {
        return true;
    }
    Long requestId = apiRequestSummary.getApiRequestInfo().getRequestId();
    ApiRequest apiRequest = apiManager.getRequestWithTasks(clusterName, requestId);
    ClusterRequestStatus clusterRequestStatus = ClusterRequestStatus.valueOf(apiRequest.getApiRequestInfo().getRequestStatus());
    Map<String, NodeReport> nodeReports = currentReport.getNodeReports();
    for (String nodeReportKey : nodeReports.keySet()) {
        for (ApiTask apiTask : apiRequest.getApiTasks()) {
            NodeReport nodeReport = nodeReports.get(nodeReportKey);
            nodeReport.setUseClusterMsg(false);
            ApiTaskInfo apiTaskInfo = apiTask.getApiTaskInfo();
            if (nodeReport.getHostname().equals(apiTaskInfo.getHostName())) {
                TaskStatus taskStatus = TaskStatus.valueOf(apiTask.getApiTaskInfo().getStatus());
                if (taskStatus.isRunningState()) {
                    if (clusterRequestStatus.isFailedState() && apiTaskInfo.getStderr() != null && !apiTaskInfo.getStderr().isEmpty()) {
                        nodeReport.setAction(apiTaskInfo.getCommandDetail() + ": " + apiTaskInfo.getStderr());
                    } else {
                        nodeReport.setAction(apiTaskInfo.getCommandDetail());
                    }
                    nodeReports.put(nodeReportKey, nodeReport);
                }
            }
        }
    }
    currentReport.setNodeReports(nodeReports);
    int provisionPercent = (int) apiRequest.getApiRequestInfo().getProgressPercent();
    if (provisionPercent != 0) {
        int currentProgress = currentReport.getProgress();
        int toProgress = beginProgress + provisionPercent / 2;
        if (toProgress >= endProgress) {
            toProgress = endProgress;
        }
        boolean isCompletedState = clusterRequestStatus.isCompletedState();
        if ((toProgress != currentProgress) && (provisionPercent % 10 == 0) || isCompletedState) {
            if (isCompletedState) {
                logger.info("Cluster request " + requestId + " is completed.");
            } else {
                logger.info("Waiting for cluster request " + requestId + " to complete.");
            }
            currentReport.setProgress(toProgress);
            if (reportQueue != null) {
                reportQueue.addClusterReport(currentReport.clone());
            }
        }
    }
    if (clusterRequestStatus.isCompletedState()) {
        return true;
    }
    return false;
}

[Buggy Hunk]
if (nodeReport.getHostname().equals(apiTaskInfo.getHostName())) {

[Patch]
if (nodeReport.getHostname() != null && nodeReport.getHostname().equals(apiTaskInfo.getHostName())) {

[Demonstration 2]

[Buggy Method]
public boolean applyTimeoutRole(User user, Server server, Channel invocationChannel) {
    String serverId = server.getId();
    ServerTimeoutStorage storage = timeoutStorage.get(serverId);
    String serverName = server.getName();
    if (storage != null && storage.getTimeoutRoleId() != null) {
        String timeoutRoleId = storage.getTimeoutRoleId();
        Role timeoutRole = apiClient.getRole(timeoutRoleId, server);
        if (timeoutRole != NO_ROLE) {
            //  Add role to user
            Set<Role> userRoles = apiClient.getMemberRoles(apiClient.getUserMember(user, server), server);
            //  Push the ban role to the front
            LinkedHashSet<String> newRoles = new LinkedHashSet<>(userRoles.size() + 1);
            newRoles.add(timeoutRoleId);
            userRoles.stream().map(Role::getId).forEach(newRoles::add);
            //  Update
            apiClient.updateRoles(user, server, newRoles);
            return true;
        } else {
            LOGGER.warn("Timeout role ID {} for server {} ({}) does not exist", timeoutRoleId, serverName, serverId);
            apiClient.sendMessage(loc.localize("message.mod.timeout.bad_role", timeoutRoleId), invocationChannel);
        }
    } else {
        storage = new ServerTimeoutStorage(serverId);
        timeoutStorage.put(serverId, storage);
        LOGGER.warn("Timeout role for server {} ({}) is not configured", storage.getTimeoutRoleId(), serverName, serverId);
        apiClient.sendMessage(loc.localize("message.mod.timeout.not_configured"), invocationChannel);
    }
    return false;
}

[Buggy Hunk]
return true;

[Patch]
return userRoles.size() < newRoles.size();

[Demonstration 3]

[Buggy Method]
private void getTableSchema(Table table) {
    queryString.append(table.getSchema() == null ? table.getTableName() : table.getSchema().getSchemaName() + "." + table.getTableName());
}

[Buggy Hunk]
queryString.append(table.getSchema() == null

[Patch]
queryString.append(table.getSchema().getSchemaName() == null