/** * @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; }