Пример #1
0
 private function implementExist(ClassMetadata $metadata, ClassCollector $classCollector, $implements)
 {
     // Class is in actual namespace
     if (array_key_exists($metadata->getNamespace() . '\\' . $implements, $classCollector->getCollected())) {
         return true;
     }
     foreach ($metadata->getClasses() as $use) {
         if (substr(strrchr($use, "\\"), 1) === $implements) {
             return true;
         }
     }
     throw new \Exception(sprintf('interface %s does not exist', $implements));
 }
 /**
  * @param Node\Name     $node
  * @param ClassMetadata $metadata
  * @param array         $classCollected
  *
  * @return string
  */
 public function findRightClass(Node\Name $node, ClassMetadata $metadata, array $classCollected = array())
 {
     $class = implode('\\', $node->parts);
     $lastPartsClass = array_map(function ($value) {
         return substr(strrchr($value, '\\'), 1);
     }, $classCollected);
     $class = $this->reservedWordReplacer->replace($class);
     if (in_array($class, $classCollected)) {
         return '\\' . $class;
     } elseif (array_key_exists($class, $metadata->getClassesAlias())) {
         $alias = $metadata->getClassesAlias();
         return '\\' . $alias[$class];
     } elseif (false !== ($key = array_search($class, $lastPartsClass))) {
         return '\\' . $classCollected[$key];
     } elseif (false !== ($key = array_search($metadata->getNamespace() . '\\' . $class, $classCollected))) {
         return '\\' . $classCollected[$key];
     } else {
         return $class;
     }
 }
 /**
  * @param array         $nodes
  * @param ClassMetadata $classMetadata
  *
  * @return ClassMetadata
  */
 public function build(array $nodes, ClassMetadata $classMetadata)
 {
     $class = null;
     foreach ($this->nodeFetcher->foreachNodes($nodes) as $nodeData) {
         $node = $nodeData['node'];
         if ($node instanceof Stmt\UseUse) {
             $classMetadata->addUse($node);
             $classMetadata->addClasses($this->reservedWordReplacer->replace(implode('\\', $node->name->parts)));
             if ($node->name->getLast() !== $node->alias) {
                 $classMetadata->addClassesAlias($node->alias, $this->reservedWordReplacer->replace(implode('\\', $node->name->parts)));
             }
         } elseif ($node instanceof Stmt\Namespace_) {
             $classMetadata->setNamespace(implode('\\', $node->name->parts));
         } elseif ($node instanceof Stmt\Interface_ || $node instanceof Stmt\Class_) {
             if ($class !== null) {
                 throw new \Exception('Multiple class find in ' . $fileName);
             }
             $class = $this->reservedWordReplacer->replace($node->name);
             $classMetadata->setClass($class);
             if ($node instanceof Stmt\Interface_) {
             } elseif ($node instanceof Stmt\Class_ && $node->implements !== null) {
                 $implementsClean = array();
                 foreach ($node->implements as $implement) {
                     $implementsClean[] = $this->reservedWordReplacer->replace(implode('\\', $implement->parts));
                 }
                 $classMetadata->setImplements($implementsClean);
             }
         } elseif ($node instanceof Stmt\Interface_ || $node instanceof Stmt\Class_) {
             if ($class !== null) {
                 throw new \Exception('Multiple class find in ' . $fileName);
             }
             $class = $this->reservedWordReplacer->replace($node->name);
             $classMetadata->setClass($class);
         }
     }
     return $classMetadata;
 }
Пример #4
0
 /**
  * @param string   $actualNamespace
  * @param array    $definition
  * @param array    $use
  * @param array    $classes
  * @param DocBlock $phpdoc
  *
  * @return array
  */
 private function findReturnTag($phpdoc = null, array $definition, ClassMetadata $classMetadata, ClassMethod $node)
 {
     $implements = $classMetadata->getImplements();
     if (is_array($implements) === true) {
         foreach ($implements as $implement) {
             foreach ($this->classCollector->getCollected() as $className => $classInfo) {
                 if ($classMetadata->getNamespace() . '\\' . $implement === $className) {
                     try {
                         $phpdoc = $this->nodeToDocBlock($this->findMethod($classInfo, $node->name));
                     } catch (\InvalidArgumentException $e) {
                     }
                 }
                 foreach ($classMetadata->getClasses() as $use) {
                     if ($use . '/' . $implement === $className) {
                         try {
                             $phpdoc = $this->nodeToDocBlock($this->findMethod($classInfo, $node->name));
                         } catch (\InvalidArgumentException $e) {
                         }
                     }
                 }
             }
         }
     }
     if ($phpdoc !== null) {
         foreach ($phpdoc->getTags() as $tag) {
             if ($this->isReturnTag($tag) === true) {
                 $definition['return'] = array('type' => $this->findType($tag));
                 break;
             }
         }
     }
     return $definition;
 }