[Demonstration 1]

[Buggy Method]
public static List<Class<?>> pojocClassesForPackageName(String packageName, PojoClassFilter... classFilters) {
    List<PojoClassFilter> filters = new ArrayList<>();
    filters.addAll(Arrays.asList(new PojoClassFilter[] { new FilterPackageInfo(), excludeTestClasses(), new FilterCloverClasses() }));
    filters.addAll(Arrays.asList(classFilters));
    List<PojoClass> pojoClasses = PojoClassFactory.getPojoClassesRecursively(packageName, new FilterChain(filters.toArray(new PojoClassFilter[] {})));
    return pojoClasses.stream().map(pc -> pc.getClazz()).collect(toList());
}

[Buggy Hunk]
new PojoClassFilter[] { new FilterPackageInfo(), excludeTestClasses(), new FilterCloverClasses() }));

[Patch]
new PojoClassFilter[] { new FilterPackageInfo(), PojoClassFilters.excludeTestClasses(), new FilterCloverClasses() }));

[Demonstration 2]

[Buggy Method]
protected void filters(Map<String, Object> filters) {
    this.filters = filters;
}

[Buggy Hunk]
protected void filters(Map<String, Object> filters)

[Patch]
public void filters(Map<String, Object> filters)

[Demonstration 3]

[Buggy Method]
private void checkAlerts() {
    final PackageInfo packageInfo = getWalletApplication().packageInfo();
    final int versionNameSplit = packageInfo.versionName.indexOf('-');
    final HttpUrl.Builder url = HttpUrl.parse(Constants.VERSION_URL + (versionNameSplit >= 0 ? packageInfo.versionName.substring(versionNameSplit) : "")).newBuilder();
    url.addEncodedQueryParameter("package", packageInfo.packageName);
    url.addQueryParameter("current", Integer.toString(packageInfo.versionCode));
    new HttpGetThread(url.build(), application.httpUserAgent()) {

        @Override
        protected void handleLine(final String line, final long serverTime) {
            final int serverVersionCode = Integer.parseInt(line.split("\\s+")[0]);
            log.info("according to \"" + url + "\", strongly recommended minimum app version is " + serverVersionCode);
            if (serverTime > 0) {
                final long diffMinutes = Math.abs((System.currentTimeMillis() - serverTime) / DateUtils.MINUTE_IN_MILLIS);
                if (diffMinutes >= 60) {
                    log.info("according to \"" + url + "\", system clock is off by " + diffMinutes + " minutes");
                    runOnUiThread(new Runnable() {

                        @Override
                        public void run() {
                            if (!isFinishing())
                                return;
                            final Bundle args = new Bundle();
                            args.putLong("diff_minutes", diffMinutes);
                            showDialog(DIALOG_TIMESKEW_ALERT, args);
                        }
                    });
                    return;
                }
            }
            if (serverVersionCode > packageInfo.versionCode) {
                runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        if (isFinishing())
                            return;
                        showDialog(DIALOG_VERSION_ALERT);
                    }
                });
                return;
            }
        }

        @Override
        protected void handleException(final Exception x) {
            if (x instanceof UnknownHostException || x instanceof SocketException || x instanceof SocketTimeoutException) {
                // swallow
                log.debug("problem reading", x);
            } else {
                CrashReporter.saveBackgroundTrace(new RuntimeException(url.toString(), x), packageInfo);
            }
        }
    }.start();
    if (CrashReporter.hasSavedCrashTrace()) {
        final StringBuilder stackTrace = new StringBuilder();
        try {
            CrashReporter.appendSavedCrashTrace(stackTrace);
        } catch (final IOException x) {
            log.info("problem appending crash info", x);
        }
        final ReportIssueDialogBuilder dialog = new ReportIssueDialogBuilder(this, R.string.report_issue_dialog_title_crash, R.string.report_issue_dialog_message_crash) {

            @Override
            protected CharSequence subject() {
                return Constants.REPORT_SUBJECT_CRASH + " " + packageInfo.versionName;
            }

            @Override
            protected CharSequence collectApplicationInfo() throws IOException {
                final StringBuilder applicationInfo = new StringBuilder();
                CrashReporter.appendApplicationInfo(applicationInfo, application);
                return applicationInfo;
            }

            @Override
            protected CharSequence collectStackTrace() throws IOException {
                if (stackTrace.length() > 0)
                    return stackTrace;
                else
                    return null;
            }

            @Override
            protected CharSequence collectDeviceInfo() throws IOException {
                final StringBuilder deviceInfo = new StringBuilder();
                CrashReporter.appendDeviceInfo(deviceInfo, WalletActivity.this);
                return deviceInfo;
            }

            @Override
            protected CharSequence collectWalletDump() {
                return wallet.toString(false, true, true, null);
            }
        };
        dialog.show();
    }
}

[Buggy Hunk]
return Constants.REPORT_SUBJECT_CRASH + " " + packageInfo.versionName;

[Patch]
return Constants.REPORT_SUBJECT_CRASH + ": " + WalletApplication.versionLine(packageInfo);