/**
  * @param  ClassInfo $classInfo
  * @return Assign
  */
 protected function prepareConstructStatement(ClassInfo $classInfo)
 {
     $di = $classInfo->getFirstAnnotationInstanceof('Saxulum\\RouteController\\Annotation\\DI');
     /** @var DI $di */
     return new Assign(new Variable('controller'), new New_(new Name($classInfo->getName()), $this->prepareArguments($di)));
 }
 /**
  * @param  ClassInfo   $classInfo
  * @param  string      $callback
  * @param  string      $callbackMethod
  * @param  string|null $value
  * @return Expr
  */
 protected function prepareCallbackNode(ClassInfo $classInfo, $callback, $callbackMethod, $value = null)
 {
     // controller as service callback
     if (preg_match('/^([^:]+):([^:]+)$/', $callback, $matches) === 1) {
         if ($matches[1] == '__self') {
             $matches[1] = $classInfo->getServiceId();
         }
         return $this->{$callbackMethod}($matches[1], $matches[2], $value);
     } elseif (preg_match('/^([^:]+)::([^:]+)$/', $callback, $matches) === 1) {
         if ($matches[1] == '__self') {
             $matches[1] = $classInfo->getName();
         }
         return new String_($matches[1] . '::' . $matches[2]);
     } else {
         return new String_($callback);
     }
 }
 /**
  * @param ClassInfo $classInfo
  */
 protected function checkTestClass3(ClassInfo $classInfo)
 {
     $this->assertEquals('Saxulum\\Tests\\AnnotationManager\\Classes2\\TestClass3', $classInfo->getName());
 }