Example #1
0
 /**
  * @param string der volle Name des Setters
  * 
  * @param $flags wenn dies z.B: INHERIT ist wird immer eine eigene Methode für den Setter erstellt (auch wenn es die Methode schon in der Hierarchy gibt)
  */
 public function generateSetter(ClassBuilderProperty $property, $setter = NULL, $flags = 0)
 {
     $setter = $setter ?: $property->getSetterName();
     // wenn die klasse die Methode wirklich selbst hat, überschreiben wir diesen nicht
     if ($this->class->hasOwnMethod($setter)) {
         return $this;
     }
     // die methode gibt es auch nicht in der hierarchy, dann erstelleln wir sie ganz normal
     if (!$this->class->hasMethod($setter)) {
         $gMethod = $this->class->createMethod($setter, array(new GParameter($property->getName(), $property->getPHPHint(), $property->isNullable() && $property->getPHPHint() != NULL ? NULL : GParameter::UNDEFINED)), $this->createCode('setter', array('property' => $property->getName())), GMethod::MODIFIER_PUBLIC);
         $gMethod->createDocBlock()->addSimpleAnnotation('param ' . ($property->getDocType() ?: 'undefined') . ' $' . $property->getName());
     } elseif ($flags & self::INHERIT) {
         // wir wollen die methode in dieser klasse haben (das besagt das flag), allerdings müssen wird ie methode ableiten
         $method = clone $this->class->getMethod($setter);
         if ($method->isAbstract()) {
             $method->setAbstract(FALSE);
         }
         // check ob das property->getName() richtig ist?
         if (count($method->getParameters()) === 0) {
             $method->addParameter(new GParameter($property->getName(), $property->getPHPHint()));
         } elseif (count($method->getParameters()) > 0) {
             $method->getParameterByIndex(0)->setName($property->getName());
         }
         $method->setBodyCode($this->createCode('setter', array('property' => $property->getName())));
         $this->addMethod($method);
     }
     return $this;
 }