예제 #1
0
    /**
     * fromReflection()
     *
     * @param Zend_Reflection_Method $reflectionMethod
     * @return Zend_CodeGenerator_Php_Method
     */
    public static function fromReflection(Zend_Reflection_Method $reflectionMethod)
    {
        $method = new self();

        $method->setSourceContent($reflectionMethod->getContents(false));
        $method->setSourceDirty(false);

        if ($reflectionMethod->getDocComment() != '') {
            $method->setDocblock(Zend_CodeGenerator_Php_Docblock::fromReflection($reflectionMethod->getDocblock()));
        }

        $method->setFinal($reflectionMethod->isFinal());

        if ($reflectionMethod->isPrivate()) {
            $method->setVisibility(self::VISIBILITY_PRIVATE);
        } elseif ($reflectionMethod->isProtected()) {
            $method->setVisibility(self::VISIBILITY_PROTECTED);
        } else {
            $method->setVisibility(self::VISIBILITY_PUBLIC);
        }

        $method->setStatic($reflectionMethod->isStatic());

        $method->setName($reflectionMethod->getName());

        foreach ($reflectionMethod->getParameters() as $reflectionParameter) {
            $method->setParameter(Zend_CodeGenerator_Php_Parameter::fromReflection($reflectionParameter));
        }

        $method->setBody($reflectionMethod->getBody());

        return $method;
    }
예제 #2
0
파일: Method.php 프로젝트: theolymp/diem
 public static function fromReflection(Zend_Reflection_Method $reflectionMethod)
 {
     $method = new self();
     $method->setSourceContent($reflectionMethod->getContents(false));
     $method->setSourceDirty(false);
     if ($reflectionMethod->getDocComment() != '') {
         $method->setDocblock(Zend_CodeGenerator_Php_Docblock::fromReflection($reflectionMethod->getDocblock()));
     }
     $method->setFinal($reflectionMethod->isFinal());
     if ($reflectionMethod->isPrivate()) {
         $method->setVisibility(self::VISIBILITY_PRIVATE);
     } elseif ($reflectionMethod->isProtected()) {
         $method->setVisibility(self::VISIBILITY_PROTECTED);
     } else {
         $method->setVisibility(self::VISIBILITY_PUBLIC);
     }
     $method->setStatic($reflectionMethod->isStatic());
     $method->setName($reflectionMethod->getName());
     foreach ($reflectionMethod->getParameters() as $reflectionParameter) {
         $method->setParameter(Zend_CodeGenerator_Php_Parameter::fromReflection($reflectionParameter));
     }
     $body = $reflectionMethod->getBody();
     $body2 = str_replace("\n\n", "\n", $body);
     $body2 = preg_replace("|^\n\\s{4}|muU", "\n", $body2);
     $body2 = preg_replace("|^\\s{4}|muU", "", $body2);
     //    $body2 = str_replace(' ', '.', $body2);
     //dmDebug::kill($body, "\n".$body2);
     $method->setBody($body2);
     return $method;
 }
예제 #3
0
파일: Property.php 프로젝트: nhp/shopware-4
    /**
     * fromReflection()
     *
     * @param Zend_Reflection_Property $reflectionProperty
     * @return Zend_CodeGenerator_Php_Property
     */
    public static function fromReflection(Zend_Reflection_Property $reflectionProperty)
    {
        $property = new self();

        $property->setName($reflectionProperty->getName());

        $allDefaultProperties = $reflectionProperty->getDeclaringClass()->getDefaultProperties();

        $property->setDefaultValue($allDefaultProperties[$reflectionProperty->getName()]);

        if ($reflectionProperty->getDocComment() != '') {
            $property->setDocblock(Zend_CodeGenerator_Php_Docblock::fromReflection($reflectionProperty->getDocComment()));
        }

        if ($reflectionProperty->isStatic()) {
            $property->setStatic(true);
        }

        if ($reflectionProperty->isPrivate()) {
            $property->setVisibility(self::VISIBILITY_PRIVATE);
        } elseif ($reflectionProperty->isProtected()) {
            $property->setVisibility(self::VISIBILITY_PROTECTED);
        } else {
            $property->setVisibility(self::VISIBILITY_PUBLIC);
        }

        $property->setSourceDirty(false);

        return $property;
    }
예제 #4
0
파일: Class.php 프로젝트: theolymp/diem
 /**
  * fromReflection() - build a Code Generation PHP Object from a Class Reflection
  *
  * @param Zend_Reflection_Class $reflectionClass
  * @return dmZendCodeGeneratorPhpClass
  */
 public static function fromReflection(Zend_Reflection_Class $reflectionClass)
 {
     $class = new self();
     $class->setSourceContent($class->getSourceContent());
     $class->setSourceDirty(false);
     if ($reflectionClass->getDocComment() != '') {
         $class->setDocblock(Zend_CodeGenerator_Php_Docblock::fromReflection($reflectionClass->getDocblock()));
     }
     $class->setAbstract($reflectionClass->isAbstract());
     $class->setName($reflectionClass->getName());
     if ($parentClass = $reflectionClass->getParentClass()) {
         $class->setExtendedClass($parentClass->getName());
         $interfaces = array_diff($parentClass->getInterfaces(), $reflectionClass->getInterfaces());
     } else {
         $interfaces = $reflectionClass->getInterfaces();
     }
     $class->setImplementedInterfaces($interfaces);
     $properties = array();
     foreach ($reflectionClass->getProperties() as $reflectionProperty) {
         if ($reflectionProperty->getDeclaringClass()->getName() == $class->getName()) {
             $properties[] = Zend_CodeGenerator_Php_Property::fromReflection($reflectionProperty);
         }
     }
     $class->setProperties($properties);
     $methods = array();
     foreach ($reflectionClass->getMethods(-1, 'dmZendReflectionMethod') as $reflectionMethod) {
         if ($reflectionMethod->getDeclaringClass()->getName() == $class->getName()) {
             $methods[] = dmZendCodeGeneratorPhpMethod::fromReflection($reflectionMethod);
         }
     }
     $class->setMethods($methods);
     return $class;
 }
    public function testTagGettersAndSetters()
    {
        $this->_docblock->setTag(array('name' => 'blah'));
        $this->_docblock->setTag(new Zend_CodeGenerator_Php_Docblock_Tag_Param(array('datatype' => 'string')));
        $this->_docblock->setTag(new Zend_CodeGenerator_Php_Docblock_Tag_Return(array('datatype' => 'int')));
        $this->assertEquals(3, count($this->_docblock->getTags()));
        $target = <<<EOS
/**
 * @blah
 * @param string
 * @return int
 */

EOS;
        $this->assertEquals($target, $this->_docblock->generate());
    }
예제 #6
0
파일: File.php 프로젝트: travisj/zf
 /**
  * fromReflection()
  *
  * @param Zend_Reflection_File $reflectionFile
  * @return Zend_CodeGenerator_Php_File
  */
 public static function fromReflection(Zend_Reflection_File $reflectionFile)
 {
     $file = new self();
     $file->setSourceContent($reflectionFile->getContents());
     $file->setSourceDirty(false);
     $body = $reflectionFile->getContents();
     // @todo this whole area needs to be reworked with respect to how body lines are processed
     foreach ($reflectionFile->getClasses() as $class) {
         $file->setClass(Zend_CodeGenerator_Php_Class::fromReflection($class));
         $classStartLine = $class->getStartLine(true);
         $classEndLine = $class->getEndLine();
         $bodyLines = explode("\n", $body);
         $bodyReturn = array();
         for ($lineNum = 1; $lineNum <= count($bodyLines); $lineNum++) {
             if ($lineNum == $classStartLine) {
                 $bodyReturn[] = str_replace('?', $class->getName(), self::$_markerClass);
                 //'/* Zend_CodeGenerator_Php_File-ClassMarker: {' . $class->getName() . '} */';
                 $lineNum = $classEndLine;
             } else {
                 $bodyReturn[] = $bodyLines[$lineNum - 1];
                 // adjust for index -> line conversion
             }
         }
         $body = implode("\n", $bodyReturn);
         unset($bodyLines, $bodyReturn, $classStartLine, $classEndLine);
     }
     if ($reflectionFile->getDocComment() != '') {
         $docblock = $reflectionFile->getDocblock();
         $file->setDocblock(Zend_CodeGenerator_Php_Docblock::fromReflection($docblock));
         $bodyLines = explode("\n", $body);
         $bodyReturn = array();
         for ($lineNum = 1; $lineNum <= count($bodyLines); $lineNum++) {
             if ($lineNum == $docblock->getStartLine()) {
                 $bodyReturn[] = str_replace('?', $class->getName(), self::$_markerDocblock);
                 //'/* Zend_CodeGenerator_Php_File-ClassMarker: {' . $class->getName() . '} */';
                 $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;
 }
예제 #7
0
 /**
  * @see models_ClassGenerator_Defaults_Interface::createAttributesSqlConstants
  */
 public function createAttributesSqlConstants()
 {
     //Table
     $constTable = new Zend_CodeGenerator_Php_Property();
     $constTable->setConst(true);
     $constTable->setName($this->_provideTableConstant());
     $constTable->setDefaultValue($this->getPersistenceInformation()->getTableName());
     $tableDocblock = new Zend_CodeGenerator_Php_Docblock();
     $tableDocblock->setLongDescription('The SQL table to persist all properties to.');
     $tableTagType = new Zend_CodeGenerator_Php_Docblock_Tag();
     $tableTagType->setName('var');
     $tableTagType->setDescription(Zend_CodeGenerator_Php_Property_DefaultValue::TYPE_STRING);
     $tableDocblock->setTag($tableTagType);
     $constTable->setDocblock($tableDocblock);
     //Einfügen!
     $this->getClass()->setProperty($constTable);
     //Columns
     $columnConstants = $this->_provideSqlColumnConstants();
     if (!empty($columnConstants)) {
         foreach ($columnConstants as $columnConstant => $attribute) {
             /* @var $attribute Zend_CodeGenerator_Php_Property */
             $constCol = new Zend_CodeGenerator_Php_Property();
             $constCol->setConst(true);
             $constCol->setName($columnConstant);
             $constCol->setDefaultValue(Model_ClassGenerator_PersistenceInformation::toColumnName($attribute));
             $colDocblock = new Zend_CodeGenerator_Php_Docblock();
             $colDocblock->setLongDescription('The SQL table colum to persist the attribute $' . $attribute->getName() . ' to.');
             $colTagType = new Zend_CodeGenerator_Php_Docblock_Tag();
             $colTagType->setName('var');
             $colTagType->setDescription(Zend_CodeGenerator_Php_Property_DefaultValue::TYPE_STRING);
             $colDocblock->setTag($colTagType);
             $constCol->setDocblock($colDocblock);
             //Einfügen!
             $this->getClass()->setProperty($constCol);
         }
     }
 }
예제 #8
0
 public function testLongDescriptionGetterAndSetter()
 {
     $this->_docblock->setLongDescription('Long Description');
     $this->assertEquals('Long Description', $this->_docblock->getLongDescription());
 }