Пример #1
0
 /**
  * @param FileReflection $fileReflection
  * @return \ReflectionException[]
  * @throws \ReflectionException
  */
 public function getDependencies(FileReflection $fileReflection)
 {
     foreach ($fileReflection->getClasses() as $class) {
         /** @var ClassReflection $class */
         foreach ($class->getMethods() as $method) {
             /** @var \Zend\Code\Reflection\MethodReflection $method */
             if ($method->getDeclaringClass()->getName() != $class->getName()) {
                 continue;
             }
             foreach ($method->getParameters() as $parameter) {
                 try {
                     /** @var ParameterReflection $parameter */
                     $dependency = $parameter->getClass();
                     if ($dependency instanceof ClassReflection) {
                         $this->dependencies[] = $dependency->getName();
                     }
                 } catch (\ReflectionException $e) {
                     if (preg_match('#^Class ([A-Za-z0-9_\\\\]+) does not exist$#', $e->getMessage(), $result)) {
                         $this->dependencies[] = $result[1];
                     } else {
                         throw $e;
                     }
                 }
             }
         }
     }
     return $this->dependencies;
 }
Пример #2
0
 /**
  * @param  FileReflection $fileReflection
  * @return FileGenerator
  */
 public static function fromReflection(FileReflection $fileReflection)
 {
     $file = new static();
     $file->setSourceContent($fileReflection->getContents());
     $file->setSourceDirty(false);
     $uses = $fileReflection->getUses();
     foreach ($fileReflection->getClasses() as $class) {
         $phpClass = ClassGenerator::fromReflection($class);
         $phpClass->setContainingFileGenerator($file);
         foreach ($uses as $fileUse) {
             $phpClass->addUse($fileUse['use'], $fileUse['as']);
         }
         $file->setClass($phpClass);
     }
     $namespace = $fileReflection->getNamespace();
     if ($namespace != '') {
         $file->setNamespace($namespace);
     }
     if ($uses) {
         $file->setUses($uses);
     }
     if ($fileReflection->getDocComment() != '') {
         $docBlock = $fileReflection->getDocBlock();
         $file->setDocBlock(DocBlockGenerator::fromReflection($docBlock));
     }
     return $file;
 }
Пример #3
0
 /**
  * @param  FileReflection $fileReflection
  * @return FileGenerator
  */
 public static function fromReflection(FileReflection $fileReflection)
 {
     $file = new static();
     $file->setSourceContent($fileReflection->getContents());
     $file->setSourceDirty(false);
     $body = $fileReflection->getContents();
     $uses = $fileReflection->getUses();
     foreach ($fileReflection->getClasses() as $class) {
         $phpClass = ClassGenerator::fromReflection($class);
         $phpClass->setContainingFileGenerator($file);
         foreach ($uses as $fileUse) {
             $phpClass->addUse($fileUse['use'], $fileUse['as']);
         }
         $file->setClass($phpClass);
         $classStartLine = $class->getStartLine(true);
         $classEndLine = $class->getEndLine();
         $bodyLines = explode("\n", $body);
         $bodyReturn = array();
         for ($lineNum = 1, $count = count($bodyLines); $lineNum <= $count; $lineNum++) {
             if ($lineNum == $classStartLine) {
                 $bodyReturn[] = str_replace('?', $class->getName(), '/* Zend_Code_Generator_Php_File-ClassMarker: {?} */');
                 $lineNum = $classEndLine;
             } else {
                 $bodyReturn[] = $bodyLines[$lineNum - 1];
                 // adjust for index -> line conversion
             }
         }
         $body = implode("\n", $bodyReturn);
         unset($bodyLines, $bodyReturn, $classStartLine, $classEndLine);
     }
     $namespace = $fileReflection->getNamespace();
     if ($namespace != '') {
         $file->setNamespace($namespace);
     }
     if ($uses) {
         $file->setUses($uses);
     }
     if ($fileReflection->getDocComment() != '') {
         $docBlock = $fileReflection->getDocBlock();
         $file->setDocBlock(DocBlockGenerator::fromReflection($docBlock));
         $bodyLines = explode("\n", $body);
         $bodyReturn = array();
         for ($lineNum = 1, $count = count($bodyLines); $lineNum <= $count; $lineNum++) {
             if ($lineNum == $docBlock->getStartLine()) {
                 $bodyReturn[] = str_replace('?', $class->getName(), '/* Zend_Code_Generator_FileGenerator-DocBlockMarker */');
                 $lineNum = $docBlock->getEndLine();
             } else {
                 $bodyReturn[] = $bodyLines[$lineNum - 1];
                 // adjust for index -> line conversion
             }
         }
         $body = implode("\n", $bodyReturn);
         unset($bodyLines, $bodyReturn, $classStartLine, $classEndLine);
     }
     $file->setBody($body);
     return $file;
 }
Пример #4
0
 /**
  * Gets SK ITCBundle Code Generator PHPUnit Abstract Generator Generator Class Reflection
  *
  * @return ClassReflection[]
  */
 public function getClassReflections()
 {
     if (NULL === $this->classReflections) {
         $classReflections = array();
         $directoryScanner = $this->getDirectoryScanner();
         /* @var $fileScanners FileScanner[] */
         $fileScanners = $directoryScanner->getFiles(TRUE);
         /* @var $classScanner FileScanner */
         foreach ($fileScanners as $fileScanner) {
             $file = new FileReflection($fileScanner->getFile(), TRUE);
             $classReflections = array_merge($classReflections, $file->getClasses());
         }
         $this->setClassReflections($classReflections);
     }
     return $this->classReflections;
 }