/** * @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; } }