[Demonstration 1]

[Buggy Method]
public static int createMeal(Database db, User u, Food.Update[] f, String name) {
    if ((this.db == null) || (this.u == null) || (f == null) || (name == null)) {
        return -1;
    }
    name = Algorithm.Clean(name);
    int uid = u.getUid();
    /* Ensure each item in f is not null. */
    /* Create Food.Update objects to get Nutrition. */
    Nutrition sum = new Nutrition(0, 0, 0, 0);
    for (int i = 0; i < f.length; i++) {
        if (f[i] == null) {
            return -2;
        }
        sum.addNutrition(f[i].getNutrition(db));
    }
    /* Create meal record in database */
    int r = db.update("insert into meals (uid, name, calories, " + "carbohydrates, protein, fat) values (" + uid + ", '" + name + "', " + sum.getCalories() + ", " + sum.getCarbohydrates() + ", " + sum.getProtein() + ", " + sum.getFat() + ");");
    /* Check to see if it went correctly. */
    if (r != 1) {
        return -3;
    }
    /* Now get the mid.. probably not the best way. */
    int mid = 0;
    ResultSet rs = db.execute("select mid from meals where uid = " + uid + " and name = '" + name + "';");
    try {
        if (rs == null) {
            return -4;
        } else {
            rs.next();
            mid = rs.getInt("mid");
        }
    } catch (SQLException e) {
        return -5;
    }
    /* Not optimal but works to add components to database. */
    for (Food.Update i : f) {
        r = db.update("insert into components(mid, fid, count) values (" + mid + ", " + i.getFid() + ", " + i.getCount() + ");");
        if (r != 1) {
            /* This is an unclean exit but this shouldn't happen. */
            return -6;
        }
    }
    return mid;
}

[Buggy Hunk]
if ((this.db == null) || (this.u == null) || (f == null) ||

[Patch]
if ((db == null) || (u == null) || (f == null) ||

[Demonstration 2]

[Buggy Method]
@Override
public long getHeaderId(int position) {
    //return the first character of the country as ID because this is what headers are based upon
    return data[position][0].subSequence(0, 1).charAt(0);
}

[Buggy Hunk]
return data[position][0].subSequence(0, 1).charAt(0);

[Patch]
return data[position][0].hashCode();

[Demonstration 3]

[Buggy Method]
public void setAdapter(BaseRecyclerViewAdapter adapter) {
    mAdapter = adapter;
    recyclerView.setAdapter(mAdapter);
    if (mSwipeRefreshLayout != null) {
        mSwipeRefreshLayout.setRefreshing(false);
    }
    mAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {

        @Override
        public void onItemRangeChanged(int positionStart, int itemCount) {
            super.onItemRangeChanged(positionStart, itemCount);
            update();
        }

        @Override
        public void onItemRangeInserted(int positionStart, int itemCount) {
            super.onItemRangeInserted(positionStart, itemCount);
            update();
        }

        @Override
        public void onItemRangeRemoved(int positionStart, int itemCount) {
            super.onItemRangeRemoved(positionStart, itemCount);
            update();
        }

        @Override
        public void onItemRangeMoved(int fromPosition, int toPosition, int itemCount) {
            super.onItemRangeMoved(fromPosition, toPosition, itemCount);
            update();
        }

        @Override
        public void onChanged() {
            super.onChanged();
            update();
        }

        private void update() {
            isLoadingMore = false;
            if (mSwipeRefreshLayout != null) {
                mSwipeRefreshLayout.setRefreshing(false);
            }
            if (recyclerView.getAdapter().getItemCount() == 0 && mEmptyId != 0) {
                mEmpty.setVisibility(View.VISIBLE);
            } else if (mEmptyId != 0) {
                mEmpty.setVisibility(View.GONE);
            }
            if (mAdapter.getItemCount() >= showLoadMoreItemNum && mAdapter.getInfiniteScrollView() != null && mAdapter.getInfiniteScrollView().getVisibility() == View.GONE) {
                mAdapter.getInfiniteScrollView().setVisibility(View.VISIBLE);
            }
            if (mAdapter.getItemCount() < showLoadMoreItemNum && mAdapter.getInfiniteScrollView() != null) {
                mAdapter.getInfiniteScrollView().setVisibility(View.GONE);
            }
        }
    });
    if ((adapter == null || adapter.getItemCount() == 0) && mEmptyId != 0) {
        mEmpty.setVisibility(View.VISIBLE);
    }
}

[Buggy Hunk]
if ((adapter == null || adapter.getItemCount() == 0) && mEmptyId != 0) {

[Patch]
if ((mAdapter == null || mAdapter.getItemCount() == 0) && mEmptyId != 0) {