Ejemplo n.º 1
0
 private function getUseImports(ReflectionClass $class)
 {
     if (isset($this->useImports[$class->class])) {
         return $this->useImports[$class->class];
     }
     $content = file_get_contents($class->path);
     $tokenizer = new TokenParser('<?php ' . $content);
     $useImports = $tokenizer->parseUseStatements($class->namespace);
     $this->useImports[$class->class] = $useImports;
     return $useImports;
 }
Ejemplo n.º 2
0
 /**
  * Parses a class.
  *
  * @param  \ReflectionClass $class A <code>ReflectionClass</code> object.
  * @return array            A list with use statements in the form (Alias => FQN).
  */
 public function parseClass(\ReflectionClass $class)
 {
     if (method_exists($class, 'getUseStatements')) {
         return $class->getUseStatements();
     }
     if (false === ($filename = $class->getFilename())) {
         return array();
     }
     $content = $this->getFileContent($filename, $class->getStartLine());
     $namespace = str_replace('\\', '\\\\', $class->getNamespaceName());
     $content = preg_replace('/^.*?(\\bnamespace\\s+' . $namespace . '\\s*[;{].*)$/s', '\\1', $content);
     $tokenizer = new TokenParser('<?php ' . $content);
     $statements = $tokenizer->parseUseStatements($class->getNamespaceName());
     return $statements;
 }
Ejemplo n.º 3
0
 /**
  * Class constructor.
  *
  * @param \Reflector $context A reflection of the context in which the types will be resolved.
  *                            The context can be a class, property, method or parameter.
  *
  * @throws \InvalidArgumentException If the class or file name cannot be inferred from the context.
  */
 public function __construct(\Reflector $context)
 {
     $class = $this->getDeclaringClass($context);
     if ($class === null) {
         throw $this->invalidArgumentException('declaring class', $context);
     }
     $fileName = $class->getFileName();
     if ($fileName === false) {
         throw $this->invalidArgumentException('file name', $context);
     }
     $source = @file_get_contents($fileName);
     if ($source === false) {
         throw new \RuntimeException('Could not read ' . $fileName);
     }
     $parser = new TokenParser($source);
     $this->namespace = $class->getNamespaceName();
     $this->aliases = $parser->parseUseStatements($this->namespace);
 }
 /**
  * @param mixed           $value
  * @param array           $annotations
  * @param ReflectionClass $reflection
  *
  * @return object
  */
 protected static function parseAnnotation($value, array $annotations, ReflectionClass $reflection)
 {
     if (null !== $value && !empty($annotations)) {
         $tokenParse = new TokenParser(file_get_contents($reflection->getFileName()));
         $useStatements = $tokenParse->parseUseStatements($reflection->getNamespaceName());
         foreach ($annotations as $annotation) {
             if (false !== strrpos($annotation, 'var')) {
                 $class = trim(str_replace('var ', '', $annotation));
                 if (class_exists($class)) {
                     $value = static::deserializeValue($class, $value);
                 } elseif (class_exists(sprintf('%s\\%s', $reflection->getNamespaceName(), $class))) {
                     $class = sprintf('%s\\%s', $reflection->getNamespaceName(), $class);
                     $value = static::deserializeValue($class, $value);
                 } elseif (isset($useStatements[strtolower($class)])) {
                     $class = $useStatements[strtolower($class)];
                     $value = static::deserializeValue($class, $value);
                 }
                 break;
             }
         }
     }
     return $value;
 }