[Demonstration 1]

[Buggy Method]
public static Iterable<Object[]> configsWithErrors() {
    List<Object[]> result = new ArrayList<>();
    // First element is config name, second element is expected JSON error.
    result.add(new Object[] { "missingStages", Messages.JSONParser_MissingRequiredProperties("'stages'") });
    result.add(new Object[] { "missingAgent", Messages.JSONParser_MissingRequiredProperties("'agent'") });
    result.add(new Object[] { "emptyStages", Messages.JSONParser_TooFewItems(0, 1) });
    result.add(new Object[] { "emptyEnvironment", Messages.JSONParser_TooFewItems(0, 1) });
    result.add(new Object[] { "emptyPostBuild", Messages.JSONParser_TooFewItems(0, 1) });
    result.add(new Object[] { "rejectStageInSteps", Messages.ModelValidatorImpl_BlockedStep("stage", ModelASTStep.getBlockedSteps().get("stage")) });
    result.add(new Object[] { "rejectParallelMixedInSteps", Messages.ModelValidatorImpl_BlockedStep("parallel", ModelASTStep.getBlockedSteps().get("parallel")) });
    result.add(new Object[] { "stageWithoutName", Messages.JSONParser_MissingRequiredProperties("'name'") });
    result.add(new Object[] { "emptyParallel", Messages.ModelValidatorImpl_NothingForStage("foo") });
    result.add(new Object[] { "emptyJobProperties", Messages.JSONParser_TooFewItems(0, 1) });
    result.add(new Object[] { "emptyParameters", Messages.JSONParser_TooFewItems(0, 1) });
    result.add(new Object[] { "emptyTriggers", Messages.JSONParser_TooFewItems(0, 1) });
    result.add(new Object[] { "emptyWhen", Messages.JSONParser_TooFewItems(0, 1) });
    result.add(new Object[] { "mixedMethodArgs", Messages.ModelValidatorImpl_MixedNamedAndUnnamedParameters() });
    result.add(new Object[] { "rejectPropertiesStepInMethodCall", Messages.ModelValidatorImpl_BlockedStep("properties", ModelASTStep.getBlockedSteps().get("properties")) });
    result.add(new Object[] { "wrongParameterNameMethodCall", Messages.ModelValidatorImpl_InvalidStepParameter("namd", "name") });
    result.add(new Object[] { "invalidParameterTypeMethodCall", Messages.ModelValidatorImpl_InvalidParameterType("class java.lang.String", "name", "1234") });
    result.add(new Object[] { "perStageConfigEmptySteps", Messages.JSONParser_TooFewItems(0, 1) });
    result.add(new Object[] { "perStageConfigMissingSteps", Messages.JSONParser_MissingRequiredProperties("'steps'") });
    result.add(new Object[] { "perStageConfigUnknownSection", "additional properties are not allowed" });
    result.add(new Object[] { "unknownAgentType", Messages.ModelValidatorImpl_InvalidAgentType("foo", "[otherField, docker, dockerfile, label, any, none]") });
    result.add(new Object[] { "invalidWrapperType", Messages.ModelValidatorImpl_InvalidSectionType("option", "echo", "[buildDiscarder, catchError, disableConcurrentBuilds, overrideIndexTriggers, retry, script, skipDefaultCheckout, timeout, waitUntil, withContext, withEnv, ws]") });
    result.add(new Object[] { "unknownBareAgentType", Messages.ModelValidatorImpl_NoAgentType("[otherField, docker, dockerfile, label, any, none]") });
    result.add(new Object[] { "agentMissingRequiredParam", Messages.ModelValidatorImpl_MultipleAgentParameters("otherField", "[label, otherField]") });
    result.add(new Object[] { "agentUnknownParamForType", Messages.ModelValidatorImpl_InvalidAgentParameter("fruit", "otherField", "[label, otherField]") });
    result.add(new Object[] { "notificationsSectionRemoved", "additional properties are not allowed" });
    result.add(new Object[] { "unknownWhenConditional", Messages.ModelValidatorImpl_UnknownWhenConditional("banana", "branch, environment, expression") });
    result.add(new Object[] { "whenInvalidParameterType", Messages.ModelValidatorImpl_InvalidUnnamedParameterType("class java.lang.String", 4) });
    result.add(new Object[] { "whenMissingRequiredParameter", Messages.ModelValidatorImpl_MissingRequiredStepParameter("value") });
    result.add(new Object[] { "whenUnknownParameter", Messages.ModelValidatorImpl_InvalidStepParameter("banana", "name") });
    result.add(new Object[] { "malformed", "Unexpected close marker ']': expected '}'" });
    return result;
}

[Buggy Hunk]
result.add(new Object[]{"unknownBareAgentType", Messages.ModelValidatorImpl_NoAgentType("[otherField, docker, dockerfile, label, any, none]")});

[Patch]
result.add(new Object[]{"unknownBareAgentType", Messages.ModelValidatorImpl_InvalidAgentType("foo", "[otherField, docker, dockerfile, label, any, none]")});

[Demonstration 2]

[Buggy Method]
private List<String> complete(CommandSource src, CommandArgs args, CommandContext context, int index) {
    List<String> completions = new ArrayList<>();
    for (ListIterator<CommandElement> it = this.elements.listIterator(index); it.hasNext(); ) {
        final CommandElement element = it.next();
        // Try first for completions with the optional
        if (element.isOptional(src)) {
            final CommandArgs.Snapshot argsSnapshot = args.createSnapshot();
            final CommandContext.Snapshot contextSnapshot = context.createSnapshot();
            List<String> ret = complete(src, args, context, element);
            if (ret != null) {
                add(completions, ret);
            } else {
                add(completions, complete(src, args, context, it.nextIndex()));
                break;
            }
            final CommandArgs.Snapshot optArgsSnapshot = args.createSnapshot();
            final CommandContext.Snapshot optContextSnapshot = context.createSnapshot();
            args.restoreSnapshot(argsSnapshot);
            context.restoreSnapshot(contextSnapshot);
            // Complete without the optional
            add(completions, complete(src, args, context, it.nextIndex()));
            // Reset to optional parsed snapshots, to avoid issues with the
            // firstParsing element
            args.restoreSnapshot(optArgsSnapshot);
            context.restoreSnapshot(optContextSnapshot);
            break;
        } else {
            List<String> ret = complete(src, args, context, element);
            if (ret != null) {
                add(completions, ret);
                break;
            }
        }
    }
    return ImmutableList.copyOf(completions);
}

[Buggy Hunk]
List<String> ret = complete(src, args, context, element);

[Patch]
final List<String> ret = complete(src, args, context, element);

[Demonstration 3]

[Buggy Method]
void loadItems(final String timeLapse, final SimpleDateFormat format) {
    Integer loaderId = LOADER_ITEMS_EXPENSE;
    if (type.equals(Item.TYPE_INCOME))
        loaderId = LOADER_ITEMS_INCOME;
    getActivity().getSupportLoaderManager().restartLoader(loaderId, null, new LoaderManager.LoaderCallbacks<List<Item>>() {

        @Override
        public Loader<List<Item>> onCreateLoader(int id, Bundle args) {
            return new AsyncTaskLoader<List<Item>>(getContext()) {

                @Override
                public List<Item> loadInBackground() {
                    try {
                        MoneyTrackerDbHelper dbHelper = new MoneyTrackerDbHelper(getContext());
                        return dbHelper.getItems(dbHelper.getReadableDatabase(), type);
                    } catch (Exception e) {
                        e.printStackTrace();
                        return null;
                    }
                }
            };
        }

        @Override
        public void onLoadFinished(Loader<List<Item>> loader, List<Item> data) {
            if (data == null) {
                Toast.makeText(getContext(), R.string.error, Toast.LENGTH_SHORT).show();
            } else {
                adapter.clear();
                adapter.addAll(ItemsSortingUtil.prepareItemsForItemsFragment(data, timeLapse, getContext(), format, type));
                ((MainActivity) getActivity()).setAllItems(data, type);
            }
        }

        @Override
        public void onLoaderReset(Loader<List<Item>> loader) {
        }
    }).forceLoad();
}

[Buggy Hunk]
return dbHelper.getItems(dbHelper.getReadableDatabase(), type);

[Patch]
return dbHelper.getItems(dbHelper.getWritableDatabase(), type);