Code Duplication    Length = 21-22 lines in 2 locations

lib/Doctrine/ODM/MongoDB/UnitOfWork.php 2 locations

@@ 2308-2328 (lines=21) @@
2305
     * @param object $document
2306
     * @param array $visited
2307
     */
2308
    private function cascadeDetach($document, array &$visited)
2309
    {
2310
        $class = $this->dm->getClassMetadata(get_class($document));
2311
        foreach ($class->fieldMappings as $mapping) {
2312
            if ( ! $mapping['isCascadeDetach']) {
2313
                continue;
2314
            }
2315
            $relatedDocuments = $class->reflFields[$mapping['fieldName']]->getValue($document);
2316
            if (($relatedDocuments instanceof Collection || is_array($relatedDocuments))) {
2317
                if ($relatedDocuments instanceof PersistentCollectionInterface) {
2318
                    // Unwrap so that foreach() does not initialize
2319
                    $relatedDocuments = $relatedDocuments->unwrap();
2320
                }
2321
                foreach ($relatedDocuments as $relatedDocument) {
2322
                    $this->doDetach($relatedDocument, $visited);
2323
                }
2324
            } elseif ($relatedDocuments !== null) {
2325
                $this->doDetach($relatedDocuments, $visited);
2326
            }
2327
        }
2328
    }
2329
    /**
2330
     * Cascades a merge operation to associated documents.
2331
     *
@@ 2428-2449 (lines=22) @@
2425
     * @param object $document
2426
     * @param array $visited
2427
     */
2428
    private function cascadeRemove($document, array &$visited)
2429
    {
2430
        $class = $this->dm->getClassMetadata(get_class($document));
2431
        foreach ($class->fieldMappings as $mapping) {
2432
            if ( ! $mapping['isCascadeRemove']) {
2433
                continue;
2434
            }
2435
            if ($document instanceof Proxy && ! $document->__isInitialized__) {
2436
                $document->__load();
2437
            }
2438
2439
            $relatedDocuments = $class->reflFields[$mapping['fieldName']]->getValue($document);
2440
            if (($relatedDocuments instanceof Collection || is_array($relatedDocuments))) {
2441
                // If its a PersistentCollection initialization is intended! No unwrap!
2442
                foreach ($relatedDocuments as $relatedDocument) {
2443
                    $this->doRemove($relatedDocument, $visited);
2444
                }
2445
            } elseif ($relatedDocuments !== null) {
2446
                $this->doRemove($relatedDocuments, $visited);
2447
            }
2448
        }
2449
    }
2450
2451
    /**
2452
     * Acquire a lock on the given document.