/**
  * @param \Donquixote\HastyPhpAst\Ast\File\AstFileInterface $astFile
  * @param \Donquixote\HastyReflectionCommon\Canvas\ClassIndex\ClassIndexInterface $autoloadSource
  *
  * @return \Donquixote\HastyReflectionParser\AstToFileReflection\AstToFileReflection
  */
 function astGetFileReflection(AstFileInterface $astFile, ClassIndexInterface $autoloadSource)
 {
     $namespace = NULL;
     $useFqcnsByAlias = array();
     $classLikeNodes = array();
     foreach ($astFile->getNodes() as $node) {
         if ($node instanceof AstNamespaceDeclarationInterface) {
             $namespace = $node->getFqcn();
         } elseif ($node instanceof AstUseStatementInterface) {
             $useFqcnsByAlias += $node->getFqcnsByAlias();
         } elseif ($node instanceof AstClassLikeInterface) {
             $classLikeNodes[] = $node;
         }
     }
     $namesByAlias = array();
     foreach ($useFqcnsByAlias as $alias => $fqcn) {
         $namesByAlias[$alias] = $fqcn->getQualifiedName();
     }
     $context = new NamespaceUseContext($namespace->getQualifiedName(), $namesByAlias);
     $classesByQcn = array();
     foreach ($classLikeNodes as $node) {
         $class = ClassLikeReflection_Ast::create($context, $node, $autoloadSource);
         $classesByQcn[$class->getName()] = $class;
     }
     return new FileReflection($classesByQcn, $context);
 }
Ejemplo n.º 2
0
 /**
  * @param \Donquixote\HastyPhpAst\Ast\File\AstFileInterface $astFile
  *
  * @return \Donquixote\HastyPhpAst\Ast\ClassLike\AstClassLikeInterface[]
  */
 private function fileAstGetClassNodes(AstFileInterface $astFile)
 {
     $classNodes = array();
     foreach ($astFile->getNodes() as $astNode) {
         if ($astNode instanceof AstClassLikeInterface) {
             $classNodes[] = $astNode;
         }
     }
     return $classNodes;
 }