/**
  * @param PhpAnalyzer $analyzer
  * @param string      $definition
  *
  * @return bool Success
  */
 private function tryGetInfo(PhpAnalyzer $analyzer, $definition)
 {
     if (in_array($definition, array('self', 'AutoCompleteTestRepository', 'PHPUnit_Framework_TestCase', 'PHPUnit_TextUI_ResultPrinter'))) {
         return true;
     }
     try {
         $analyzer->getInfo($definition);
         return true;
     } catch (Exception $e) {
         $suffix = ' (used in';
         foreach ($analyzer->usedDefinitions[$definition] as $filename => $lines) {
             $suffix .= ' "' . $filename . '" on line';
             if (count($lines) == 1) {
                 $suffix .= ' ' . $lines[0];
             } else {
                 $suffix .= 's ' . \Sledgehammer\human_implode(' and ', $lines);
             }
         }
         $suffix .= ')';
         $this->fail($e->getMessage() . $suffix);
         return false;
     }
 }
 /**
  * Analyze the PHP file and check all used classes and functions again the known extension mapping.
  *
  * @param string $filename
  */
 private function checkFile($filename)
 {
     $analyser = new PhpAnalyzer();
     $analyser->open($filename);
     $definitions = array_merge(array_keys($analyser->usedDefinitions), array_keys($analyser->usedFunctions));
     $extentions = [];
     foreach ($definitions as $definition) {
         $key = strtolower($definition);
         if (isset($this->definitionToExtension[$key])) {
             // function/class belongs to an extension?
             $extentions[$this->definitionToExtension[$key]] = true;
             if (function_exists($key) == false && class_exists($key) == false) {
                 $this->missingExtensions[$this->definitionToExtension[$key]] = $key;
             }
         }
     }
     foreach (array_keys($extentions) as $extention) {
         $this->extensionUsedIn[$extention][] = $filename;
     }
 }