Source:
public ReviewResult call() throws EmailException, InvalidChangeOperationException, NoSuchChangeException, OrmException { final ReviewResult result = new ReviewResult(); result.setChangeId(changeId); final ChangeControl control = changeControlFactory.validateFor(changeId); final Change change = db.changes().get(changeId); final PatchSet.Id patchSetId = change.currentPatchSetId(); final PatchSet patch = db.patchSets().get(patchSetId); if (!control.canAbandon()) { result.addError(new ReviewResult.Error( ReviewResult.Error.Type.ABANDON_NOT_PERMITTED)); } else if (patch == null) { throw new NoSuchChangeException(changeId); } else { final ChangeMessage cmsg = new ChangeMessage( new ChangeMessage.Key(changeId, ChangeUtil.messageUUID(db)), currentUser.getAccountId(), patchSetId); final StringBuilder msgBuf = new StringBuilder("Patch Set " + patchSetId.get() + ": Abandoned"); if (message != null && message.length() > 0) { msgBuf.append("\n\n"); msgBuf.append(message); } cmsg.setMessage(msgBuf.toString()); final Change updatedChange = db.changes().atomicUpdate(changeId, new AtomicUpdate<Change>() { @Override public Change update(Change change) { if (change.getStatus().isOpen() && change.currentPatchSetId().equals(patchSetId)) { change.setStatus(Change.Status.ABANDONED); ChangeUtil.updated(change); return change; } else { return null; } } }); ChangeUtil.updatedChange( db, currentUser, updatedChange, cmsg, abandonedSenderFactory, "Change is no longer open or patchset is not latest"); hooks.doChangeAbandonedHook(updatedChange, currentUser.getAccount(), message, db); } return result; }

Target:
public ReviewResult call() throws EmailException, InvalidChangeOperationException, NoSuchChangeException, OrmException { if (changeId == null) { throw new InvalidChangeOperationException("changeId is required"); } final ReviewResult result = new ReviewResult(); result.setChangeId(changeId); final ChangeControl control = changeControlFactory.validateFor(changeId); final Change change = db.changes().get(changeId); final PatchSet.Id patchSetId = change.currentPatchSetId(); final PatchSet patch = db.patchSets().get(patchSetId); if (!control.canAbandon()) { result.addError(new ReviewResult.Error( ReviewResult.Error.Type.ABANDON_NOT_PERMITTED)); } else if (patch == null) { throw new NoSuchChangeException(changeId); } else { final ChangeMessage cmsg = new ChangeMessage( new ChangeMessage.Key(changeId, ChangeUtil.messageUUID(db)), currentUser.getAccountId(), patchSetId); final StringBuilder msgBuf = new StringBuilder("Patch Set " + patchSetId.get() + ": Abandoned"); if (message != null && message.length() > 0) { msgBuf.append("\n\n"); msgBuf.append(message); } cmsg.setMessage(msgBuf.toString()); final Change updatedChange = db.changes().atomicUpdate(changeId, new AtomicUpdate<Change>() { @Override public Change update(Change change) { if (change.getStatus().isOpen() && change.currentPatchSetId().equals(patchSetId)) { change.setStatus(Change.Status.ABANDONED); ChangeUtil.updated(change); return change; } else { return null; } } }); ChangeUtil.updatedChange( db, currentUser, updatedChange, cmsg, abandonedSenderFactory, "Change is no longer open or patchset is not latest"); hooks.doChangeAbandonedHook(updatedChange, currentUser.getAccount(), message, db); } return result; }