示例#1
0
 /**
  * @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);
 }
示例#2
0
    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);
    }
示例#3
0
 /**
  * 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;
 }
示例#4
0
 /**
  * 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;
 }