Exemple #1
0
 /**
  * Parse and return class dependencies
  *
  * @param string $path
  * @return array
  */
 protected function parseClassDependencies($path)
 {
     $session = ReflectionSession::createDefaultSession(new PearNamingResolver(array($path)));
     $query = $session->createDirectoryQuery();
     $query->exclude('((?<!\\.php|\\.inc|\\.class)$)i');
     $classes = array();
     foreach ($query->find($path) as $class) {
         if (strpos($class->getFileName(), 'tests/') !== false) {
             continue;
         }
         $fullName = $class->getNamespaceName() . '\\' . $class->getName();
         $classSpec = array('file' => str_replace($path, '', $class->getFileName()), 'abstract' => $class->isAbstract(), 'interface' => $class->isInterface(), 'extends' => array(), 'uses' => array());
         if ($parent = $class->getParentClass()) {
             $classSpec['extends'][] = $parent->getNamespaceName() . '\\' . $parent->getName();
         }
         foreach ($class->getInterfaces() as $interface) {
             $classSpec['extends'][] = $interface->getNamespaceName() . '\\' . $interface->getName();
         }
         foreach ($class->getMethods() as $method) {
             foreach ($method->getParameters() as $parameter) {
                 if ($usedClass = $parameter->getClass()) {
                     $classSpec['uses'][] = $usedClass->getNamespaceName() . '\\' . $usedClass->getName();
                 }
             }
         }
         $classSpec['uses'] = array_unique($classSpec['uses']);
         $classes[$fullName] = $classSpec;
     }
     file_put_contents($this->resultDir . '/classes.php', "<?php\n\nreturn " . var_export($classes, true) . ";\n\n");
     return $classes;
 }