[Demonstration 1]

[Buggy Method]
@Override
public void internalReceiveCommand(String itemName, Command command) {
    logger.debug("Received command from {}", itemName);
    // resolve serial number for item
    String serialNumber = null;
    for (MaxCubeBindingProvider provider : providers) {
        serialNumber = provider.getSerialNumber(itemName);
        if (serialNumber.equals(null)) {
            continue;
        }
        // send command to MAX!Cube LAN Gateway
        Device device = findDevice(serialNumber, devices);
        if (device == null) {
            logger.debug("Cannot send command to device with serial number {}, device not listed.", serialNumber);
            continue;
        }
        String rfAddress = device.getRFAddress();
        String commandString = null;
        if (command instanceof DecimalType || command instanceof OnOffType) {
            DecimalType decimalType = DEFAULT_OFF_TEMPERATURE;
            if (command instanceof DecimalType) {
                decimalType = (DecimalType) command;
            } else if (command instanceof OnOffType) {
                decimalType = OnOffType.ON.equals(command) ? DEFAULT_ON_TEMPERATURE : DEFAULT_OFF_TEMPERATURE;
            }
            S_Command cmd = new S_Command(rfAddress, device.getRoomId(), ((HeatingThermostat) device).getMode(), decimalType.doubleValue());
            commandString = cmd.getCommandString();
        } else if (command instanceof StringType) {
            String commandContent = command.toString().trim().toUpperCase();
            S_Command cmd = null;
            ThermostatModeType commandThermoType = null;
            if (commandContent.contentEquals(ThermostatModeType.AUTOMATIC.toString())) {
                commandThermoType = ThermostatModeType.AUTOMATIC;
                cmd = new S_Command(rfAddress, device.getRoomId(), commandThermoType);
            } else if (commandContent.contentEquals(ThermostatModeType.BOOST.toString())) {
                commandThermoType = ThermostatModeType.BOOST;
                Double setTemp = Double.parseDouble(((HeatingThermostat) device).getTemperatureSetpoint().toString());
                cmd = new S_Command(rfAddress, device.getRoomId(), commandThermoType, setTemp);
            } else if (commandContent.contentEquals(ThermostatModeType.MANUAL.toString())) {
                commandThermoType = ThermostatModeType.MANUAL;
                Double setTemp = Double.parseDouble(((HeatingThermostat) device).getTemperatureSetpoint().toString());
                cmd = new S_Command(rfAddress, device.getRoomId(), commandThermoType, setTemp);
                logger.debug("updates to MANUAL mode with temperature '{}'", setTemp);
            } else {
                logger.debug("Only updates to AUTOMATIC, MANUAL & BOOST supported, received value ;'{}'", commandContent);
                continue;
            }
            commandString = cmd.getCommandString();
        }
        if (commandString != null) {
            try {
                if (socket == null) {
                    this.socketConnect();
                }
                /*DataOutputStream stream = new DataOutputStream(socket.getOutputStream());

					byte[] b = commandString.getBytes();
					stream.write(b);*/
                writer.write(commandString);
                logger.debug(commandString);
                writer.flush();
                String raw = reader.readLine();
                Message message = processRawMessage(raw);
                if (message != null) {
                    if (message.getType() == MessageType.S) {
                        sMessageProcessing((S_Message) message);
                    }
                }
                if (!exclusive) {
                    socket.close();
                    socket = null;
                }
            } catch (UnknownHostException e) {
                logger.info("Host error occurred while connecting to MAX! Cube lan gateway '{}': {}", ip, e.getMessage());
                socketClose();
            } catch (IOException e) {
                logger.info("IO error occurred while writing to MAX! Cube lan gateway '{}': {}", ip, e.getMessage());
                //reconnect on next execution
                socketClose();
            } catch (Exception e) {
                logger.info("Error occurred while writing to MAX! Cube lan gateway '{}': {}", ip, e.getMessage());
                logger.info(Utils.getStackTrace(e));
                //reconnect on next execution
                socketClose();
            }
            logger.debug("Command Sent to {}", ip);
        } else {
            logger.debug("Null Command not sent to {}", ip);
        }
    }
}

[Buggy Hunk]
if (serialNumber.equals(null)) {

[Patch]
if (serialNumber==null || StringUtils.isBlank(serialNumber)) {

[Demonstration 2]

[Buggy Method]
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.home);
    addNew = (Button) findViewById(R.id.home_add_new_button);
    logout = (Button) findViewById(R.id.home_logout_button);
    listView = (ListView) findViewById(R.id.home_listView);
    if (userDataManager == null) {
        userDataManager = new UserDataManager(this);
        userDataManager.openDataBase();
    }
    SimpleAdapter adapter = new SimpleAdapter(this, getData(), R.layout.vlist, new String[] { "sitename", "siteUsername", "time", "lNumber", "nNumber", "pNumber" }, new int[] { R.id.vlist_sitename, R.id.vlist_siteUsername, R.id.vlist_time, R.id.vlist_lNumber, R.id.vlist_nNumber, R.id.vlist_pNumber });
    //            listView = (ListView) findViewById(R.id.home_listView);
    listView.setAdapter(adapter);
    listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

        @Override
        public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
            final View tempView = view;
            new AlertDialog.Builder(homeActivity.this).setTitle("复选框").setSingleChoiceItems(new String[] { "传送", "删除" }, 0, new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    mode = i;
                }
            }).setPositiveButton("确定", new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    if (mode == 0) {
                        TextView sitename = (TextView) tempView.findViewById(R.id.vlist_sitename);
                        TextView siteUsername = (TextView) tempView.findViewById(R.id.vlist_siteUsername);
                        TextView lNumber = (TextView) tempView.findViewById(R.id.vlist_lNumber);
                        TextView nNumber = (TextView) tempView.findViewById(R.id.vlist_nNumber);
                        TextView pNumber = (TextView) tempView.findViewById(R.id.vlist_pNumber);
                        plainText = sitename.toString() + siteUsername.toString() + lNumber.toString() + nNumber.toString() + pNumber.toString();
                        Toast.makeText(homeActivity.this, sitename.getText().toString() + " " + mode + "", Toast.LENGTH_SHORT).show();
                        intent.setClass(homeActivity.this, CaptureActivity.class);
                        startActivityForResult(intent, 101);
                    } else if (mode == 1) {
                        TextView sitename = (TextView) tempView.findViewById(R.id.vlist_sitename);
                        TextView siteUsername = (TextView) tempView.findViewById(R.id.vlist_siteUsername);
                        userDataManager.deleteUserData(sitename.getText().toString(), siteUsername.getText().toString());
                        SimpleAdapter adapter = new SimpleAdapter(homeActivity.this, getData(), R.layout.vlist, new String[] { "sitename", "siteUsername", "time", "lNumber", "nNumber", "pNumber" }, new int[] { R.id.vlist_sitename, R.id.vlist_siteUsername, R.id.vlist_time, R.id.vlist_lNumber, R.id.vlist_nNumber, R.id.vlist_pNumber });
                        listView.setAdapter(adapter);
                    }
                }
            }).setNegativeButton("取消", new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    dialogInterface.dismiss();
                }
            }).show();
            return false;
        }
    });
    addNew.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {
            intent.setClass(homeActivity.this, editActivity.class);
            startActivityForResult(intent, 100);
        }
    });
    logout.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {
            userDataManager.deleteAllUserDatas();
            User user = userDataManager.getUser();
            if (user.getPhone() == null) {
                intent.setClass(homeActivity.this, loginActivity.class);
                startActivity(intent);
            }
        }
    });
}

[Buggy Hunk]
plainText = sitename.toString()+siteUsername.toString()+lNumber.toString()+nNumber.toString()+pNumber.toString();

[Patch]
plainText = sitename.getText().toString()+siteUsername.getText().toString()+lNumber.getText().toString()+nNumber.getText().toString()+pNumber.getText().toString();

[Demonstration 3]

[Buggy Method]
private List<Run> fromMemoryImprintToBuilds(MemoryImprint memoryImprint) {
    final List<Run> runs = new ArrayList<Run>(memoryImprint.getEntries().length);
    for (Entry entry : memoryImprint.getEntries()) {
        if (entry == null) {
            continue;
        }
        runs.add(entry.getBuild());
    }
    return runs;
}

[Buggy Hunk]
if (entry == null) {

[Patch]
if (entry == null || entry.getBuild() == null) {