[Demonstration 1]

[Buggy Method]
public void startDownloading(final String sourceUrl, Context context) {
    if (!isRequestError() && !isParsingError()) {
        if (isOnline(context)) {
            if (isWaitingForDownloading()) {
                OkHttpClient client = new OkHttpClient();
                client.setConnectTimeout(5 * 1000, TimeUnit.MILLISECONDS);
                client.setReadTimeout(5 * 1000, TimeUnit.MILLISECONDS);
                Request request = new Request.Builder().url(sourceUrl).build();
                Call newCall = client.newCall(request);
                newsState = NewsState.DOWNLOADING;
                mainActivity.runOnUiThread(startRunnable);
                newCall.enqueue(new Callback() {

                    @Override
                    public void onFailure(Request request, IOException e) {
                        newsState = NewsState.REQUEST_ERROR;
                        mainActivity.runOnUiThread(failureRequestRunnable);
                    }

                    @Override
                    public void onResponse(Response response) throws IOException {
                        try {
                            if (response.isSuccessful()) {
                                NewsRssParser rssParser = new NewsRssParser();
                                news = rssParser.parseNews(response.body().string());
                                newsState = NewsState.REVIEW;
                                mainActivity.runOnUiThread(successRunnable);
                            } else {
                                newsState = NewsState.REQUEST_ERROR;
                                mainActivity.runOnUiThread(failureRequestRunnable);
                            }
                        } catch (Exception e) {
                            newsState = NewsState.PARSING_ERROR;
                            mainActivity.runOnUiThread(failureParsingRunnable);
                        }
                    }
                });
            }
        } else {
            newsState = NewsState.IDLE_BEFORE_DOWNLOADING;
            mainActivity.runOnUiThread(failureConnectionRunnable);
        }
    }
}

[Buggy Hunk]
if (!isRequestError() && !isParsingError()) {

[Patch]
if (!isRequestError() && !isParsingError() && !isReviewing()) {

[Demonstration 2]

[Buggy Method]
@Override
protected Integer doInBackground(UploadFilePayload... uploadFilePayloads) {
    final int MAX_BUFFER_SZ = 1 * 1024;
    Integer response_code = 0;
    JSONObject json = uploadFilePayloads[0].mJSONObject;
    mCallback = uploadFilePayloads[0].mCallbackContext;
    String file_path = json.optString("filePath");
    String upload_url = json.optString("serverUrl");
    JSONObject headers = json.optJSONObject("headers");
    HttpURLConnection huc = null;
    try {
        // retrieve params from JS
        int bytes_read, bytes_available, buffer_size, total_bytes;
        byte[] buffer;
        huc = (HttpURLConnection) new URL(upload_url).openConnection();
        // get file sz
        File file = new File(file_path);
        FileInputStream fis = new FileInputStream(file);
        bytes_available = fis.available();
        final int FILE_SZ = bytes_available;
        // set custom headers
        Iterator<?> keys = headers.keys();
        while (keys.hasNext()) {
            String key = (String) keys.next();
            String val = headers.getString(key);
            huc.setRequestProperty(key, val);
        }
        // urlConnection.setRequestProperty("Connection", "Keep-Alive");
        huc.setRequestProperty("Content-Length", "" + FILE_SZ);
        huc.setRequestProperty("User-Agent", System.getProperty("http.agent"));
        // config request
        huc.setUseCaches(false);
        huc.setDoInput(true);
        huc.setDoOutput(true);
        huc.setRequestMethod("POST");
        // urlConnection.setInstanceFollowRedirects(false);
        huc.setChunkedStreamingMode(1024 * 1000);
        // urlConnection.setFixedLengthStreamingMode(bytesAvailable);
        // read input file chunks + publish progress
        OutputStream out = huc.getOutputStream();
        buffer_size = Math.min(bytes_available, MAX_BUFFER_SZ);
        buffer = new byte[buffer_size];
        bytes_read = fis.read(buffer, 0, buffer_size);
        total_bytes = bytes_read;
        while (bytes_read > 0 && huc.getErrorStream() == null) {
            out.write(buffer, 0, buffer_size);
            bytes_available = fis.available();
            buffer_size = Math.min(bytes_available, MAX_BUFFER_SZ);
            bytes_read = fis.read(buffer, 0, buffer_size);
            total_bytes += bytes_read;
            publishProgress(buffer_size, total_bytes, FILE_SZ);
        }
        out.flush();
        out.close();
        // get server response
        response_code = huc.getResponseCode();
        String response_message = huc.getResponseMessage();
        // back to JS
        if (response_code / 100 != 2) {
            // error
            JSONObject json_error = new JSONObject();
            json_error.put("code", response_code);
            json_error.put("source", file_path);
            json_error.put("target", upload_url);
            json_error.put("message", response_message);
            PluginResult pr = new PluginResult(PluginResult.Status.ERROR, json_error);
            mCallback.sendPluginResult(pr);
        } else {
            // ok
            InputStream is = huc.getInputStream();
            StringBuilder sb = new StringBuilder();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String read;
            while ((read = br.readLine()) != null) {
                sb.append(read);
            }
            br.close();
            PluginResult pr = new PluginResult(PluginResult.Status.OK, sb.toString());
            mCallback.sendPluginResult(pr);
        }
    } catch (Exception e) {
        e.printStackTrace();
        JSONObject json_error = new JSONObject();
        try {
            json_error.put("code", -1);
            json_error.put("source", file_path);
            json_error.put("target", upload_url);
            json_error.put("message", e.getLocalizedMessage());
        } catch (JSONException ex) {
        }
        PluginResult pr = new PluginResult(PluginResult.Status.ERROR, json_error);
        mCallback.sendPluginResult(pr);
    } finally {
        if (huc != null) {
            huc.disconnect();
        }
    }
    return response_code;
}

[Buggy Hunk]
while (bytes_read > 0 && huc.getErrorStream() == null) {

[Patch]
while (bytes_read > 0) {

[Demonstration 3]

[Buggy Method]
public void AddFlag(String gameName, String teamName, String flagName, String tagSerial) {
    SetFlagCapturedStatus(gameName, teamName, tagSerial, Global.FlagStatus.Not_Captured);
    SetFlagName(gameName, teamName, tagSerial, flagName);
}

[Buggy Hunk]
public void AddFlag(String gameName, String teamName, String flagName, String tagSerial)

[Patch]
public void AddFlag(String gameName, String teamName, String tagSerial, String flagName)