[Demonstration 1]

[Buggy Method]
@Override
public void start() {
    if (spawnTask != null) {
        stop();
    }
    loadConfig();
    // Update sign visibility
    setDevMode(devMode);
    if (!enabled) {
        return;
    }
    // Register events
    Bukkit.getPluginManager().registerEvents(this, plugin);
    // Start ticking
    spawnTask = new BukkitRunnable() {

        @Override
        public void run() {
            if (devMode) {
                return;
            }
            spawnLoop: for (MobSpawn spawn : spawns) {
                for (Player player : Bukkit.getOnlinePlayers()) {
                    if (player.getLocation().distanceSquared(spawn.getLocation()) > playerRadiusThresholdSquared) {
                        continue;
                    }
                    spawn.tick();
                    break spawnLoop;
                }
            }
        }
    }.runTaskTimer(Goldiriath.plugin, 2, // Run every other tick
    2);
}

[Buggy Hunk]
for (Player player : Bukkit.getOnlinePlayers()) {

[Patch]
for (Player player : Bukkit.getServer().getOnlinePlayers()) {

[Demonstration 2]

[Buggy Method]
public String getMonitorInfoByItemId() {
    MonitorItem item = monitorService.findMonitorItemById(itemId);
    MonitorTask task = item.getTask();
    List<MonitorConfig> configs = monitorService.findMonitorConfigsByTaskId(task.getId());
    if (item == null) {
        ret.put("retCode", "1002");
        ret.put("retMSG", "监控项不存在");
        return "success";
    }
    int num = configs.size();
    String[] configStrs = new String[num];
    String[][] times = new String[num][];
    CpuInfo[][] cpus = new CpuInfo[num][];
    CpuInfo[][] cpus1 = new CpuInfo[num][];
    CpuInfo[][] cpus2 = new CpuInfo[num][];
    CpuInfo[][] cpus3 = new CpuInfo[num][];
    int[][] memorys = new int[num][];
    int[][] dReads = new int[num][];
    int[][] dWrites = new int[num][];
    int[][] nReceives = new int[num][];
    int[][] nSends = new int[num][];
    for (int i = 0; i < num; i++) {
        MonitorConfig MonitorConfig = configs.get(i);
        configStrs[i] = MonitorConfig.getComment() + "-" + MonitorConfig.getVm().getIp();
        List<MonitorInfo> infos = monitorService.findMonitorInfosByConfigIdAndItemId(MonitorConfig.getId(), itemId);
        int n = infos.size();
        String[] time = new String[n];
        CpuInfo[] cpu = new CpuInfo[n];
        CpuInfo[] cpu1 = new CpuInfo[n];
        CpuInfo[] cpu2 = new CpuInfo[n];
        CpuInfo[] cpu3 = new CpuInfo[n];
        int[] memory = new int[n];
        int[] dRead = new int[n];
        int[] dWrite = new int[n];
        int[] nReceive = new int[n];
        int[] nSend = new int[n];
        for (int j = 0; j < n; j++) {
            MonitorInfo info = infos.get(j);
            // 给定模式
            SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
            String t = sdf.format(info.getTime());
            time[j] = t;
            CpuInfo cpuInfo = new CpuInfo();
            cpuInfo.setTime(t);
            cpuInfo.setData1(0);
            cpuInfo.setData2(info.getCpu());
            cpu[j] = cpuInfo;
            CpuInfo cpuInfo1 = new CpuInfo();
            cpuInfo1.setTime(t);
            cpuInfo1.setData1(info.getCpu());
            cpuInfo1.setData2(info.getCpu() + info.getCpu1());
            cpu1[j] = cpuInfo1;
            CpuInfo cpuInfo2 = new CpuInfo();
            cpuInfo2.setTime(t);
            cpuInfo2.setData1(info.getCpu());
            cpuInfo2.setData2(info.getCpu() + info.getCpu1() + info.getCpu2());
            cpu2[j] = cpuInfo2;
            CpuInfo cpuInfo3 = new CpuInfo();
            cpuInfo3.setTime(t);
            cpuInfo3.setData1(info.getCpu() + info.getCpu1() + info.getCpu2());
            cpuInfo3.setData2(info.getCpu() + info.getCpu1() + info.getCpu2() + info.getCpu3());
            cpu3[j] = cpuInfo3;
            memory[j] = info.getMemory();
            dRead[j] = -info.getDiskRead();
            dWrite[j] = info.getDiskWrite();
            nReceive[j] = -info.getNetworkReceive();
            nSend[j] = info.getNetworkSend();
        }
        times[i] = time;
        cpus[i] = cpu;
        cpus1[i] = cpu1;
        cpus2[i] = cpu2;
        cpus3[i] = cpu3;
        memorys[i] = memory;
        dReads[i] = dRead;
        dWrites[i] = dWrite;
        nReceives[i] = nReceive;
        nSends[i] = nSend;
    }
    ret.put("configStrs", configStrs);
    ret.put("times", times);
    ret.put("cpus", cpus);
    ret.put("cpus1", cpus1);
    ret.put("cpus2", cpus2);
    ret.put("cpus3", cpus3);
    ret.put("memorys", memorys);
    ret.put("dReads", dReads);
    ret.put("dWrites", dWrites);
    ret.put("nReceives", nReceives);
    ret.put("nSends", nSends);
    ret.put("retCode", "1000");
    ret.put("retMSG", "加入监控信息成功");
    return "success";
}

[Buggy Hunk]
cpuInfo2.setData1(info.getCpu());

[Patch]
cpuInfo2.setData1(info.getCpu()+info.getCpu1());

[Demonstration 3]

[Buggy Method]
void airportPanel() {
    this.setVisible(false);
    this.panel = new JPanel();
    this.panel.setLayout(new FlowLayout());
    this.departure_airport = new JComboBox(this.m.getDepartureAirports());
    this.destination_airport = new JComboBox(this.m.getDestinationAirports());
    this.submit_airport = new JButton("Submit");
    this.panel.add(this.departure_airport);
    this.panel.add(this.destination_airport);
    this.panel.add(this.submit_airport);
    this.add(panel);
    this.submit_airport.addActionListener(this.c);
    this.departure_airport.addActionListener(this.c);
    this.destination_airport.addActionListener(this.c);
    this.setVisible(true);
}

[Buggy Hunk]
this.setVisible(false);

[Patch]
this.remove(this.panel);