private function doRemove($document, &$visited)
{
$oid = \spl_object_hash($document);
if (isset($visited[$oid])) {
return;
}
$visited[$oid] = true;
$this->scheduledRemovals[$oid] = $document;
$this->documentState[$oid] = self::STATE_REMOVED;
if ($this->evm->hasListeners(Event::preRemove)) {
$this->evm->dispatchEvent(Event::preRemove, new Event\LifecycleEventArgs($document, $this->dm));
}
$this->cascadeRemove($document, $visited);
}