/** * @dataProvider provideCalls */ public function testExternalCallsAreFound($expected, $n, $code) { $searcher = new Searcher(); $callExtractor = new CallExtractor($searcher); $tokens = new TokenCollection(token_get_all($code)); $name = $callExtractor->extract($n, $tokens); $this->assertEquals($expected, $name); }
public function testClassMemberDirectAccessOnInstanciationIsParsed() { $code = '<?php class A { function foo() { (new B)->doAny(); } }'; $searcher = new Searcher(); $callExtractor = new CallExtractor($searcher); $tokens = new TokenCollection(token_get_all($code)); $n = 16; $name = $callExtractor->extract($n, $tokens); $this->assertEquals('B', $name); }
/** * Extracts content of method * * @param ReflectedMethod $method * @param integer $n * @param TokenCollection $tokens * @return $this */ private function extractDependencies(ReflectedMethod $method, $n, TokenCollection $tokens) { // // Object creation $extractor = new CallExtractor($this->searcher); $start = $n; $len = sizeof($tokens, COUNT_NORMAL); for ($i = $start; $i < $len; $i++) { $token = $tokens[$i]; switch ($token->getType()) { case T_PAAMAYIM_NEKUDOTAYIM: case T_NEW: $call = $extractor->extract($i, $tokens); $method->pushDependency($call); break; } } // // Parameters in Method API foreach ($method->getArguments() as $argument) { $name = $argument->getType(); if (!in_array($argument->getType(), array(null, 'array'))) { $method->pushDependency($name); } } return $this; }
/** * Extracts content of method * * @param ReflectedMethod $method * @param integer $n * @param TokenCollection $tokens * @param ReflectedClass $currentClass * @return $this */ private function extractDependencies(ReflectedMethod $method, $n, TokenCollection $tokens, ReflectedClass $currentClass = null) { // // Object creation $extractor = new CallExtractor($this->searcher, $currentClass); $start = $n; $len = sizeof($tokens, COUNT_NORMAL); for ($i = $start; $i < $len; $i++) { $token = $tokens[$i]; switch ($token->getType()) { case T_PAAMAYIM_NEKUDOTAYIM: case T_NEW: $call = $extractor->extract($i, $tokens, $currentClass); if ($call !== 'class') { // anonymous class $method->pushDependency($call); $method->pushInstanciedClass($call); } break; } } // // Parameters in Method API $resolver = new TypeResolver(); foreach ($method->getArguments() as $argument) { $name = $argument->getType(); if (strlen($name) > 0 && !$resolver->isNative($name)) { $method->pushDependency($name); } } return $this; }