[Demonstration 1]

[Buggy Method]
public String toString() {
    SinglyLinkedNode<E> current = head;
    if (current == null) {
        //list is empty
        return "[]";
    }
    StringBuilder sb = new StringBuilder();
    sb.append("[" + current.data);
    while (current.next != null) {
        current = current.next;
        sb.append(", ").append(current.data);
    }
    sb.append("]");
    return sb.toString();
}

[Buggy Hunk]
if (current == null) { //list is empty

[Patch]
if (this.isEmpty()) {

[Demonstration 2]

[Buggy Method]
@Override
public boolean unregister(@NonNull FingerLockResultCallback listener) {
    if (mCallback == listener) {
        mCallback = null;
        mContext = null;
        stop();
        Log.e(TAG, "unregister: OK");
        return true;
    }
    return false;
}

[Buggy Hunk]
Log.e(TAG, "unregister: OK");

[Patch]
if(BuildConfig.DEBUG) Log.d(TAG, "unregister: OK");

[Demonstration 3]

[Buggy Method]
private void copyImageHostToHost(final State current) {
    if (current.sourceDatastore.equals(current.destinationDatastore)) {
        ServiceUtils.logInfo(this, "Skip copying image to source itself");
        sendStageProgressPatch(current, TaskState.TaskStage.FINISHED, null);
        return;
    }
    if (current.host.equals(current.destinationHost)) {
        invokeCopyImage(current);
    } else {
        invokeTransferImage(current);
    }
}

[Buggy Hunk]
if (current.host.equals(current.destinationHost)) {

[Patch]
if (current.host.equals(current.destinationHost.getHost())) {