Source:
<code>protected Object execute(InternalCDOObject object, InternalCDOTransaction transaction, CDOFeatureDelta featureDelta, InternalCDORevision revision) { Map<InternalCDOObject, InternalCDORevision> cleanRevisions = transaction.getCleanRevisions(); InternalCDORevision cleanRevision = cleanRevisions.get(object); Object result = null; if (featureDelta != null) { result = featureDelta.applyTo(revision); if (!transaction.hasMultipleSavepoints()) { CDOUndoDetector undoDetector = transaction.options().getUndoDetector(); if (undoDetector.detectUndo(transaction, cleanRevision, revision, featureDelta)) { CDOID id = revision.getID(); InternalCDOSavepoint lastSavepoint = transaction.getLastSavepoint(); Map<CDOID, CDORevisionDelta> revisionDeltas = lastSavepoint.getRevisionDeltas2(); InternalCDORevisionDelta revisionDelta = (InternalCDORevisionDelta)revisionDeltas.get(id); if (revisionDelta != null) { Map<EStructuralFeature, CDOFeatureDelta> featureDeltas = revisionDelta.getFeatureDeltaMap(); featureDeltas.remove(featureDelta.getFeature()); if (featureDeltas.isEmpty()) { cleanRevisions.remove(object); revisionDeltas.remove(id); lastSavepoint.getDirtyObjects().remove(id); if (lastSavepoint.getReattachedObjects().containsKey(id)) { lastSavepoint.getReattachedObjects().remove(id); lastSavepoint.getDetachedObjects().remove(id); } <START> lastSavepoint.getDirtyObjects().remove(id); <END> object.cdoInternalSetRevision(cleanRevision); changeState(object, CDOState.CLEAN); } } if (revisionDeltas.isEmpty()) { transaction.setDirty(false); } CDOTransactionHandler1[] handlers = transaction.getTransactionHandlers1(); for (int i = 0; i < handlers.length; i++) { CDOTransactionHandler1 handler = handlers[i]; if (handler instanceof WithUndo) { WithUndo withUndo = (WithUndo)handler; withUndo.undoingObject(transaction, object, featureDelta); } } return result; } } } transaction.registerFeatureDelta(object, featureDelta, cleanRevision); return result; }</code><technical_language>Is this line a duplicate</technical_language>

Target:
protected Object execute(InternalCDOObject object, InternalCDOTransaction transaction, CDOFeatureDelta featureDelta, InternalCDORevision revision) { Map<InternalCDOObject, InternalCDORevision> cleanRevisions = transaction.getCleanRevisions(); InternalCDORevision cleanRevision = cleanRevisions.get(object); Object result = null; if (featureDelta != null) { result = featureDelta.applyTo(revision); if (!transaction.hasMultipleSavepoints()) { CDOUndoDetector undoDetector = transaction.options().getUndoDetector(); if (undoDetector.detectUndo(transaction, cleanRevision, revision, featureDelta)) { CDOID id = revision.getID(); InternalCDOSavepoint lastSavepoint = transaction.getLastSavepoint(); Map<CDOID, CDORevisionDelta> revisionDeltas = lastSavepoint.getRevisionDeltas2(); InternalCDORevisionDelta revisionDelta = (InternalCDORevisionDelta)revisionDeltas.get(id); if (revisionDelta != null) { Map<EStructuralFeature, CDOFeatureDelta> featureDeltas = revisionDelta.getFeatureDeltaMap(); featureDeltas.remove(featureDelta.getFeature()); if (featureDeltas.isEmpty()) { cleanRevisions.remove(object); revisionDeltas.remove(id); lastSavepoint.getDirtyObjects().remove(id); if (lastSavepoint.getReattachedObjects().containsKey(id)) { lastSavepoint.getReattachedObjects().remove(id); lastSavepoint.getDetachedObjects().remove(id); } object.cdoInternalSetRevision(cleanRevision); changeState(object, CDOState.CLEAN); } } if (revisionDeltas.isEmpty()) { transaction.setDirty(false); } CDOTransactionHandler1[] handlers = transaction.getTransactionHandlers1(); for (int i = 0; i < handlers.length; i++) { CDOTransactionHandler1 handler = handlers[i]; if (handler instanceof WithUndo) { WithUndo withUndo = (WithUndo)handler; withUndo.undoingObject(transaction, object, featureDelta); } } return result; } } } transaction.registerFeatureDelta(object, featureDelta, cleanRevision); return result; }