private function visitElement(PHPClass $class, Schema $schema, ElementSingle $element, $arrayize = true)
{
$property = new PHPProperty();
$property->setName($this->getNamingStrategy()->getPropertyName($element));
$property->setDoc($element->getDoc());
$t = $element->getType();
if ($arrayize) {
if ($itemOfArray = $this->isArrayType($t)) {
if (!$itemOfArray->getName()) {
$classType = $this->visitTypeAnonymous($itemOfArray, $element->getName(), $class);
} else {
$classType = $this->visitType($itemOfArray);
}
$arg = new PHPArg($this->getNamingStrategy()->getPropertyName($element));
$arg->setType($classType);
$property->setType(new PHPClassOf($arg));
return $property;
} elseif ($itemOfArray = $this->isArrayNestedElement($t)) {
if (!$t->getName()) {
$classType = $this->visitTypeAnonymous($t, $element->getName(), $class);
} else {
$classType = $this->visitType($t);
}
$elementProp = $this->visitElement($classType, $schema, $itemOfArray, false);
$property->setType(new PHPClassOf($elementProp));
return $property;
} elseif ($this->isArrayElement($element)) {
$arg = new PHPArg($this->getNamingStrategy()->getPropertyName($element));
$arg->setType($this->findPHPClass($class, $element));
$arg->setDefault('array()');
$property->setType(new PHPClassOf($arg));
return $property;
}
}
$property->setType($this->findPHPClass($class, $element, true));
return $property;
}