private function recursivelyFindChildrenBelongingToTracker(Tracker_Artifact $source_artifact, Tracker $expected_tracker, User $user, array $hierarchy)
 {
     $artifacts = array();
     $children = $source_artifact->getLinkedArtifactsOfHierarchy($user);
     if (isset($hierarchy[$source_artifact->getId()])) {
         array_walk($children, array($this, 'keepOnlyArtifactsBelongingToParentTracker'), $hierarchy[$source_artifact->getId()]);
         array_filter($children);
     }
     if ($children) {
         foreach ($children as $child) {
             if ($child->getTracker() == $expected_tracker) {
                 $artifacts[] = $child;
             } else {
                 $artifacts = array_merge($artifacts, $this->recursivelyFindChildrenBelongingToTracker($child, $expected_tracker, $user, $hierarchy));
             }
         }
     }
     return $artifacts;
 }