[Demonstration 1]

[Buggy Method]
@Override
public boolean onTouchEvent(MotionEvent e) {
    /**
     * Select unit -> single-pathing
     * Don't select unit -> panning
     * Select unit then select unit -> multi-pathing
     * Select unit then don't select unit -> zooming if non-unit pointer, pathing if unit pointer
     * Don't select unit then don't select unit -> zooming
     * Don't select unit then select unit -> zooming if non-unit pointer, pathing if unit pointer
     */
    if (e.getActionMasked() == MotionEvent.ACTION_MOVE) {
        if (!pathingUnits.isEmpty()) {
            for (int pi : pathingUnits.keySet()) {
                int indexi = e.findPointerIndex(pi);
                float[] worldCoorsi = mRenderer.screenToWorld(mRenderer.getScreenCoors(e.getX(indexi), e.getY(indexi)));
                float xi = worldCoorsi[0];
                float yi = worldCoorsi[1];
                Unit pathingUnit = pathingUnits.get(pi);
                float[] pathEnd = pathingUnit.getPathEnd();
                if (Math.abs(xi - pathEnd[0]) >= TOUCH_MOVE_TOLERANCE || Math.abs(yi - pathEnd[1]) >= TOUCH_MOVE_TOLERANCE) {
                    pathingUnit.updatePathing(xi, yi);
                }
            }
        } else {
            if (e.getPointerCount() == 1) {
                mGestureDetector.onTouchEvent(e);
            } else {
                mScaleGestureDetector.onTouchEvent(e);
            }
        }
        return true;
    }
    int index = e.getActionIndex();
    int pointerId = e.getPointerId(index);
    float[] worldCoors = mRenderer.screenToWorld(mRenderer.getScreenCoors(e.getX(index), e.getY(index)));
    float x = worldCoors[0];
    float y = worldCoors[1];
    ArrayList<Unit> selectedUnits = game.getUnitsWithinRadius(x, y, mRenderer.getFieldOfViewY() / 50f * TOUCH_SELECT_TOLERANCE);
    Unit selectedUnit = null;
    if (!selectedUnits.isEmpty()) {
        selectedUnit = game.getClosestUnit(x, y, selectedUnits);
    }
    if (pathingUnits.keySet().contains(pointerId)) {
        // pointer associated with pathing unit
        // (must be ACTION_UP or ACTION_POINTER_UP, b/c ACTION_MOVE handled above)
        Unit pathingUnit = pathingUnits.get(pointerId);
        pathingUnit.endPathing(x, y);
        pathingUnits.remove(pointerId);
    } else if (selectedUnit != null) {
        // pointer selected new unit
        if (selectedUnit instanceof Soldier) {
            // test if splitting
            for (Unit unit : pathingUnits.values()) {
                if (unit.equals(selectedUnit)) {
                    selectedUnit = ((Soldier) selectedUnit).split(x, y);
                }
            }
        }
        selectedUnit.beginPathing();
        pathingUnits.put(pointerId, selectedUnit);
    } else {
        // pointer did not select unit
        if (e.getPointerCount() == 1) {
            mGestureDetector.onTouchEvent(e);
        } else {
            mScaleGestureDetector.onTouchEvent(e);
        }
    }
    return true;
}

[Buggy Hunk]
selectedUnit.beginPathing();

[Patch]
selectedUnit.beginPathing(x, y);

[Demonstration 2]

[Buggy Method]
@Override
protected List<TeamAnalysis> doInBackground(Object... data) {
    Elements elements = doc.select("a.name");
    Map<String, List<String>> players = new HashMap<String, List<String>>();
    ParseRankings.handleHashes();
    for (Element elem : elements) {
        String playerName = ParseRankings.fixDefenses(ParseRankings.fixNames(elem.text()));
        String team = "";
        Elements parent = elem.parent().parent().parent().parent().parent().parent().parent().parent().children();
        for (Element children : parent) {
            if (children.children().size() > 0) {
                Element child = parent.get(0);
                team = child.text();
                String[] teamSet = team.split(" ");
                StringBuilder teamBuilder = new StringBuilder(40);
                for (String teamIter : teamSet) {
                    teamBuilder.append(ManageInput.capitalize(teamIter) + " ");
                }
                String intermediate = teamBuilder.toString().replaceAll("[^a-zA-Z0-9\\s]", "");
                team = (intermediate.substring(0, intermediate.length() - 1) + "@@@" + child.child(0).html());
            }
        }
        if (players.containsKey(team)) {
            List<String> tempList = players.get(team);
            tempList.add(playerName);
            players.put(team, tempList);
        } else {
            List<String> newList = new ArrayList<String>();
            newList.add(playerName);
            players.put(team, newList);
        }
    }
    Set<String> teamNames = players.keySet();
    List<TeamAnalysis> teamSet = new ArrayList<TeamAnalysis>();
    Roster r = ReadFromFile.readRoster(cont, "");
    for (String team : teamNames) {
        List<String> onTeam = players.get(team);
        List<String> qbs = new ArrayList<String>();
        List<String> rbs = new ArrayList<String>();
        List<String> wrs = new ArrayList<String>();
        List<String> tes = new ArrayList<String>();
        List<String> def = new ArrayList<String>();
        List<String> ks = new ArrayList<String>();
        StringBuilder qb = new StringBuilder(1000);
        StringBuilder rb = new StringBuilder(1000);
        StringBuilder wr = new StringBuilder(1000);
        StringBuilder te = new StringBuilder(1000);
        StringBuilder d = new StringBuilder(1000);
        StringBuilder k = new StringBuilder(1000);
        team = team.split("@@@")[0];
        qb.append("Quarterbacks: ");
        rb.append("Running Backs: ");
        wr.append("Wide Receivers: ");
        te.append("Tight Ends: ");
        d.append("D/ST: ");
        k.append("Kickers: ");
        for (String member : onTeam) {
            for (PlayerObject player : holder.players) {
                if (player.info.name.equals(member)) {
                    if (player.info.position.equals("QB")) {
                        qbs.add(member);
                    }
                    if (player.info.position.equals("RB")) {
                        rbs.add(member);
                    }
                    if (player.info.position.equals("WR")) {
                        wrs.add(member);
                    }
                    if (player.info.position.equals("TE")) {
                        tes.add(member);
                    }
                    if (player.info.position.equals("D/ST")) {
                        def.add(member);
                    }
                    if (player.info.position.equals("K")) {
                        ks.add(member);
                    }
                    break;
                }
            }
        }
        if (qbs.size() == 0) {
            qb.append("None Selected\n");
        } else {
            for (String name : qbs) {
                qb.append(name + ", ");
            }
        }
        if (rbs.size() == 0) {
            rb.append("None Selected\n");
        } else {
            for (String name : rbs) {
                rb.append(name + ", ");
            }
        }
        if (wrs.size() == 0) {
            wr.append("None Selected\n");
        } else {
            for (String name : wrs) {
                wr.append(name + ", ");
            }
        }
        if (tes.size() == 0) {
            te.append("None Selected\n");
        } else {
            for (String name : tes) {
                te.append(name + ", ");
            }
        }
        if (def.size() == 0) {
            d.append("None Selected\n");
        } else {
            for (String name : def) {
                d.append(name + ", ");
            }
        }
        if (ks.size() == 0) {
            k.append("None Selected\n");
        } else {
            for (String name : ks) {
                k.append(name + ", ");
            }
        }
        String qbStr = qb.toString();
        if (!qbStr.contains("None Selected")) {
            qbStr = qbStr.substring(0, qbStr.length() - 2) + "\n";
        }
        String rbStr = rb.toString();
        if (!rbStr.contains("None Selected")) {
            rbStr = rbStr.substring(0, rbStr.length() - 2) + "\n";
        }
        String wrStr = wr.toString();
        if (!wrStr.contains("None Selected")) {
            wrStr = wrStr.substring(0, wrStr.length() - 2) + "\n";
        }
        String teStr = te.toString();
        if (!teStr.contains("None Selected")) {
            teStr = teStr.substring(0, teStr.length() - 2) + "\n";
        }
        String dStr = d.toString();
        if (!dStr.contains("None Selected")) {
            dStr = dStr.substring(0, dStr.length() - 2) + "\n";
        }
        String kStr = k.toString();
        if (!kStr.contains("None Selected")) {
            kStr = kStr.substring(0, kStr.length() - 2) + "\n";
        }
        TeamAnalysis teamObj = new TeamAnalysis(team, qbStr + rbStr + wrStr + teStr + dStr + kStr, holder, cont, r);
        System.out.println("Adding teamObj: " + teamObj.team.length() + ", " + team);
        teamSet.add(teamObj);
    }
    return teamSet;
}

[Buggy Hunk]
.parent().parent().parent().parent().children();

[Patch]
.parent().parent().parent().children();

[Demonstration 3]

[Buggy Method]
@Override
public boolean equals(Object o) {
    if (o == this) {
        return true;
    }
    if (o == null) {
        return false;
    }
    if (!o instanceof AutoCompletePossibilities) {
        return false;
    }
    AutoCompletePossibilities otherObject = (AutoCompletePossibilities) o;
    return stub.equals(otherObject.getStub());
}

[Buggy Hunk]
if (!o instanceof AutoCompletePossibilities) {

[Patch]
if (!(o instanceof AutoCompletePossibilities)) {