private function assertOutCallSites(AbstractFunction $function, array $outMethods, array $outFunctions)
 {
     $this->assertSame(count($outMethods) + count($outFunctions), count($function->getOutCallSites()));
     $this->assertSame(count($outMethods), count($function->getOutMethodCallSites()));
     $this->assertSame(count($outFunctions), count($function->getOutFunctionCallSites()));
     $i = 0;
     foreach ($function->getOutMethodCallSites() as $site) {
         $this->assertTrue(isset($outMethods[$i]));
         $this->assertSame($function, $site->getSource());
         $this->assertSame($outMethods[$i], $site->getTarget());
         $i += 1;
     }
     $i = 0;
     foreach ($function->getOutFunctionCallSites() as $site) {
         $this->assertTrue(isset($outFunctions[$i]));
         $this->assertSame($function, $site->getSource());
         $this->assertSame($outFunctions[$i], $site->getTarget());
         $i += 1;
     }
 }
 private function removeOutCallSites(AbstractFunction $function)
 {
     foreach ($function->getOutCallSites() as $site) {
         $site->getTarget()->removeCallSite($site);
     }
 }