[Demonstration 1]

[Buggy Method]
@Override
public void generateNewPreferenceMethod() {
    MethodSpec constructor1 = MethodSpec.constructorBuilder().addModifiers(Modifier.PUBLIC).addParameter(Context.class, "context").addStatement("super(context)").addStatement("initialize(context)").build();
    MethodSpec constructor2 = MethodSpec.constructorBuilder().addModifiers(Modifier.PUBLIC).addParameter(Context.class, "context").addParameter(AttributeSet.class, "attrs").addStatement("super(context, attrs)").addStatement("initialize(context)").build();
    MethodSpec constructor3 = MethodSpec.constructorBuilder().addModifiers(Modifier.PUBLIC).addParameter(Context.class, "context").addParameter(AttributeSet.class, "attrs").addParameter(int.class, "defStyleAttr").addStatement("super(context, attrs, defStyleAttr)").addStatement("initialize(context)").build();
    MethodSpec constructor4 = MethodSpec.constructorBuilder().addAnnotation(AnnotationSpec.builder(TargetApi.class).addMember("value", "$T.VERSION_CODES.LOLLIPOP", Build.class).build()).addModifiers(Modifier.PUBLIC).addParameter(Context.class, "context").addParameter(AttributeSet.class, "attrs").addParameter(int.class, "defStyleAttr").addParameter(int.class, "defStyleRes").addStatement("super(context, attrs, defStyleAttr, defStyleRes)").addStatement("initialize(context)").build();
    MethodSpec.Builder initialize = MethodSpec.methodBuilder("initialize").addModifiers(Modifier.PRIVATE).addParameter(Context.class, "context").addStatement("setKey($S)", key);
    if (annotation.defValue().length() > 0) {
        initialize.addStatement("setDefaultValue($S)", annotation.defValue());
    }
    if (annotation.title() > 0) {
        initialize.addStatement("setTitle($L)", annotation.title());
    } else if (annotation.titleStr() != null && annotation.titleStr().length() > 0) {
        initialize.addStatement("setTitle($S)", annotation.titleStr());
    } else {
        processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, "title or titleStr is required.");
        throw new RuntimeException("title or titleStr is required.");
    }
    ParameterizedTypeName parameterizedTypeName = ParameterizedTypeName.get(ClassName.get(List.class), TypeVariableName.get(targetClassName));
    MethodSpec getEntries = MethodSpec.methodBuilder("getEntries").addAnnotation(Override.class).addModifiers(Modifier.PROTECTED).returns(parameterizedTypeName).addStatement("$T entries = new $T<>()", List.class, ArrayList.class).beginControlFlow("for ($L value : $L.values())", targetClassName, targetClassName).beginControlFlow("if (value.minSdkVersion() <= $T.SDK_INT )", Build.VERSION.class).addStatement("entries.add(value)").endControlFlow().endControlFlow().addStatement("return entries").build();
    MethodSpec.Builder getDefaultValue = MethodSpec.methodBuilder("getDefaultValue").addAnnotation(Override.class).addModifiers(Modifier.PROTECTED).returns(String.class);
    if (annotation.defValue().isEmpty()) {
        if (!annotation.nullable()) {
            processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, "defValue is required if it's not nullable");
        }
        getDefaultValue.addStatement("return null");
    } else {
        getDefaultValue.addStatement("return $L.$L.name()", targetClassName, annotation.defValue());
    }
    MethodSpec nullable = MethodSpec.methodBuilder("nullable").addAnnotation(Override.class).addModifiers(Modifier.PROTECTED).returns(boolean.class).addStatement("return $L", annotation.nullable()).build();
    TypeSpec prefType = TypeSpec.classBuilder(simpleClassName + "_MultiSelectionPreference").addModifiers(Modifier.PUBLIC).superclass(ParameterizedTypeName.get(ClassName.get(AbstractMultiSelectionPreference.class), TypeVariableName.get(targetClassName))).addMethod(constructor1).addMethod(constructor2).addMethod(constructor3).addMethod(constructor4).addMethod(initialize.build()).addMethod(getEntries).addMethod(getDefaultValue.build()).addMethod(nullable).build();
    JavaFile prefFile = JavaFile.builder(packageName, prefType).build();
    try {
        prefFile.writeTo(processingEnv.getFiler());
    } catch (IOException e) {
        processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, e.getMessage());
    }
}

[Buggy Hunk]
getDefaultValue.addStatement("return $L.$L.name()", targetClassName, annotation.defValue());

[Patch]
getDefaultValue.addStatement("return $S", annotation.defValue());

[Demonstration 2]

[Buggy Method]
@Override
protected void onPostExecute(Void result) {
    if (this.listener != null) {
        this.listener.onSearchForDevicesOnNetworkComplete(results);
    }
}

[Buggy Hunk]
this.listener.onSearchForDevicesOnNetworkComplete(results);

[Patch]
this.listener.onSearchForDevicesOnNetworkComplete(this.results);

[Demonstration 3]

[Buggy Method]
public static <T extends Enum> List<T> getAllEnumValues(T enumValue) {
    return asList(enumValue.getDeclaringClass().getEnumConstants());
}

[Buggy Hunk]
return asList(enumValue.getDeclaringClass().getEnumConstants());

[Patch]
return asList((T[]) enumValue.getDeclaringClass().getEnumConstants());