[Demonstration 1]

[Buggy Method]
public ArrayList<EnumFiremode> getFiremodes() {
    if (type == EnumGunType.PISTOL || type == EnumGunType.SHOTGUN || type == EnumGunType.SNIPER_RIFLE) {
        //noinspection ArraysAsListWithZeroOrOneArgument
        return (ArrayList<EnumFiremode>) Arrays.asList(EnumFiremode.SINGLE);
    }
    ArrayList<EnumFiremode> firemodes = new ArrayList<>();
    switch(this) {
        case C8_SFW:
            {
                firemodes.add(EnumFiremode.SINGLE);
                firemodes.add(EnumFiremode.AUTO);
                break;
            }
        case L85A2:
            {
                firemodes.add(EnumFiremode.SINGLE);
                firemodes.add(EnumFiremode.AUTO);
                break;
            }
        case AR33:
            {
                firemodes.add(EnumFiremode.SINGLE);
                firemodes.add(EnumFiremode.DOUBLE);
                firemodes.add(EnumFiremode.AUTO);
                break;
            }
        case SIG_556xi:
            {
                firemodes.add(EnumFiremode.SINGLE);
                firemodes.add(EnumFiremode.AUTO);
                break;
            }
        case G36_C:
            {
                firemodes.add(EnumFiremode.SINGLE);
                firemodes.add(EnumFiremode.AUTO);
                break;
            }
        case R4_C:
            {
                firemodes.add(EnumFiremode.SINGLE);
                firemodes.add(EnumFiremode.AUTO);
                break;
            }
        case FAMAS_F2:
            {
                firemodes.add(EnumFiremode.SINGLE);
                firemodes.add(EnumFiremode.TRIPLE);
                firemodes.add(EnumFiremode.AUTO);
                break;
            }
        case AK12:
            {
                firemodes.add(EnumFiremode.SINGLE);
                firemodes.add(EnumFiremode.TRIPLE);
                firemodes.add(EnumFiremode.AUTO);
                break;
            }
        case HK_416_C:
            {
                firemodes.add(EnumFiremode.AUTO);
                firemodes.add(EnumFiremode.SINGLE);
                break;
            }
        case SIG_552_C:
            {
                firemodes.add(EnumFiremode.SINGLE);
                firemodes.add(EnumFiremode.TRIPLE);
                firemodes.add(EnumFiremode.AUTO);
                break;
            }
        case AUG_A2:
            {
                firemodes.add(EnumFiremode.AUTO);
                break;
            }
        case Mk17_CQB:
            {
                firemodes.add(EnumFiremode.SINGLE);
                firemodes.add(EnumFiremode.AUTO);
                break;
            }
        case PARA_308:
            {
                firemodes.add(EnumFiremode.SINGLE);
                firemodes.add(EnumFiremode.AUTO);
                break;
            }
        case TYPE_89:
            {
                firemodes.add(EnumFiremode.AUTO);
                firemodes.add(EnumFiremode.TRIPLE);
                firemodes.add(EnumFiremode.SINGLE);
                break;
            }
        case G8A1:
            {
                firemodes.add(EnumFiremode.AUTO);
                break;
            }
        case PKP_6P41:
            {
                firemodes.add(EnumFiremode.AUTO);
                break;
            }
        case M249:
            {
                firemodes.add(EnumFiremode.AUTO);
                break;
            }
        case K9X19VSN:
            {
                firemodes.add(EnumFiremode.SINGLE);
                firemodes.add(EnumFiremode.AUTO);
                break;
            }
        case FMG9:
            {
                firemodes.add(EnumFiremode.SINGLE);
                firemodes.add(EnumFiremode.AUTO);
                break;
            }
        case MP5K:
            {
                firemodes.add(EnumFiremode.SINGLE);
                firemodes.add(EnumFiremode.TRIPLE);
                firemodes.add(EnumFiremode.AUTO);
                break;
            }
        case MP5:
            {
                firemodes.add(EnumFiremode.SINGLE);
                firemodes.add(EnumFiremode.TRIPLE);
                firemodes.add(EnumFiremode.AUTO);
                break;
            }
        case MP7:
            {
                firemodes.add(EnumFiremode.SINGLE);
                firemodes.add(EnumFiremode.AUTO);
                break;
            }
        case P90:
            {
                firemodes.add(EnumFiremode.SINGLE);
                firemodes.add(EnumFiremode.AUTO);
                break;
            }
        case STEN_9MM_C1:
            {
                firemodes.add(EnumFiremode.AUTO);
                break;
            }
        case UMP45:
            {
                firemodes.add(EnumFiremode.SINGLE);
                firemodes.add(EnumFiremode.TRIPLE);
                firemodes.add(EnumFiremode.AUTO);
                break;
            }
        case MPX:
            {
                firemodes.add(EnumFiremode.SINGLE);
                firemodes.add(EnumFiremode.AUTO);
                break;
            }
        case M12:
            {
                firemodes.add(EnumFiremode.SINGLE);
                firemodes.add(EnumFiremode.AUTO);
                break;
            }
        case MP5SD:
            {
                break;
            }
        case SMG11:
            {
                firemodes.add(EnumFiremode.AUTO);
                break;
            }
        case BEARING_9:
            {
                firemodes.add(EnumFiremode.AUTO);
                firemodes.add(EnumFiremode.SINGLE);
                break;
            }
    }
    return firemodes;
}

[Buggy Hunk]
return (ArrayList<EnumFiremode>) Arrays.asList(EnumFiremode.SINGLE);

[Patch]
return new ArrayList<>(Arrays.asList(EnumFiremode.SINGLE));

[Demonstration 2]

[Buggy Method]
public List<Bar> getBarDataPeriod(Date date, int size) {
    Calendar c = null;
    int errorCount = 0;
    String key = df.format(date);
    Integer idx = barDataMap.get(key);
    while (idx == null) {
        errorCount++;
        if (errorCount >= 5) {
            throw new NullPointerException("No Bar in this Period: " + df.format(date) + " size: " + size);
        }
        if (c == null) {
            c = new GregorianCalendar();
        }
        c.setTime(date);
        c.add(Calendar.DAY_OF_YEAR, -1);
        date = c.getTime();
        key = df.format(date);
        idx = barDataMap.get(key);
    }
    return barDataList.subList(idx - size, idx);
}

[Buggy Hunk]
return barDataList.subList(idx - size, idx);

[Patch]
return new ArrayList<Bar>(barDataList.subList(idx - size, idx));

[Demonstration 3]

[Buggy Method]
private Map.Entry<B, Integer> leftEntry(B key) {
    return idx.lowerEntry(key);
}

[Buggy Hunk]
return idx.lowerEntry(key);

[Patch]
return idx.floorEntry(key);