protected function createPrototypeRemoveMethod(PropertyDefinition $property, PhpVariableName $reversePropertyName = null, $reversePropertyIsMany = false)
 {
     $name = $property->getName()->singularize();
     $methodName = new PhpVariableName('remove' . $name->toUpperCamelCase());
     $newType = $this->resolveElementType($property);
     $parameter = new ParameterDefinition($newType, $name);
     $method = new MethodDefinition($methodName, [$parameter]);
     $method->setVisibility(Visibility::PUBLIC_VISIBILITY());
     if (null !== $reversePropertyName) {
         $line = true === $reversePropertyIsMany ? '$%s->remove%s($this);' : '$%s->set%s(null);';
         $method->addLine(sprintf($line, $name->toLowerCamelCase(), $reversePropertyName->toUpperCamelCase()));
     }
     return $method;
 }
 /**
  * @return string class name without namespace
  */
 public function getName()
 {
     return $this->className->toUpperCamelCase();
 }