[Demonstration 1]

[Buggy Method]
public void updateGrid(int id, ByteBuffer data) {
    switch(id) {
        case 10:
            break;
        case 11:
            for (int x = 0; x < 7; x++) {
                for (int y = 0; y < 7; y++) {
                    dFromStart[x][y] = data.get();
                    heuristicDistance[x][y] = data.get();
                }
            }
            break;
        case 12:
            for (int x = 0; x < 7; x++) {
                for (int y = 0; y < 7; y++) {
                    parents[x][y] = new Point(data.get(), data.get());
                    isClosed[x][y] = (data.get() == 1);
                }
            }
            break;
        case 13:
            robotX = data.get();
            robotY = data.get();
            break;
        case 14:
            robotFacing = data.get();
        default:
            System.err.println("Nav Panel got wrong data!");
    }
    repaint();
}

[Buggy Hunk]
System.err.println("Nav Panel got wrong data!");

[Patch]
System.err.println("Nav Panel got wrong data! (" + id + ")");

[Demonstration 2]

[Buggy Method]
@Transactional
public void handleMessage(TransactionMessage message) throws Throwable {
    try {
        //从消息中获取事务的标识和业务序列号
        TXContext ctx = new TXContextSupport(message.getTxId(), message.getBusinessId());
        //设置到上下文中
        TXContextHolder.setTXContext(ctx);
        Connection conn = DataSourceUtils.getConnection(dataSourceAdaptor.getDataSource());
        TransactionInfo transactionInfo;
        try {
            transactionInfo = transactionRepository.lockById(conn, message.getTxId());
        } catch (Exception e) {
            logger.warn("Lock failed, txId = " + message.getTxId());
            throw new DistributedTransactionException(e);
        }
        if (validation(message, transactionInfo)) {
            ServiceExecutePayload payload = JSON.parseObject(transactionInfo.getContext(), ServiceExecutePayload.class);
            Object bean = applicationContext.getBean(payload.getTarget());
            String methodName = null;
            if (TransactionStatusEnum.CANCELLING.getCode() == message.getTxStatus()) {
                // 补偿
                methodName = payload.getCancelMethod();
                if (StringUtils.isEmpty(methodName)) {
                    logger.error("miss cancel method, serviceExecutePayload: " + payload);
                    return;
                }
            } else if (TransactionStatusEnum.CONFIRMING.getCode() == message.getTxStatus()) {
                // 确认
                methodName = payload.getConfirmMethod();
                if (StringUtils.isEmpty(methodName)) {
                    logger.error("miss confirm method, serviceExecutePayload: " + payload);
                    return;
                }
            }
            // 执行消息对应的操作
            ProxyUtil.proxyMethod(bean, methodName, payload.getTypes(), payload.getArgs());
        } else {
            logger.warn("validation error, txMsg=" + message + " txInfo=" + transactionInfo);
        }
    } finally {
        TXContextHolder.setTXContext(null);
    }
}

[Buggy Hunk]
ServiceExecutePayload payload = JSON.parseObject(transactionInfo.getContext(), ServiceExecutePayload.class);

[Patch]
ServiceExecutePayload payload = parsePayload(transactionInfo);

[Demonstration 3]

[Buggy Method]
public static boolean getBoolean(String sql) {
    String s = getString(sql);
    return s != null && (Boolean.parseBoolean(s.trim()) || !"0".equals(s.trim()));
}

[Buggy Hunk]
return s!=null && (Boolean.parseBoolean(s.trim()) || !"0".equals(s.trim()));

[Patch]
return s!=null && s.trim().length()!=0 && (Boolean.parseBoolean(s.trim()) || !"0".equals(s.trim()));