private function visitElement(&$class, Schema $schema, ElementItem $element, $arrayize = true)
{
$property = array();
$property["expose"] = true;
$property["access_type"] = "public_method";
$property["serialized_name"] = $element->getName();
if ($element->getSchema()->getTargetNamespace()) {
$property["xml_element"]["namespace"] = $element->getSchema()->getTargetNamespace();
}
$property["accessor"]["getter"] = "get" . Inflector::classify($element->getName());
$property["accessor"]["setter"] = "set" . Inflector::classify($element->getName());
$t = $element->getType();
if ($arrayize) {
if ($itemOfArray = $this->isArrayNestedElement($t)) {
if (!$t->getName()) {
$classType = $this->visitTypeAnonymous($t, $element->getName(), $class);
} else {
$classType = $this->visitType($t);
}
$visited = $this->visitElement($classType, $schema, $itemOfArray, false);
$property["type"] = "array<" . $visited["type"] . ">";
$property["xml_list"]["inline"] = false;
$property["xml_list"]["skip_when_empty"] = $element->getMin() === 0;
$property["xml_list"]["entry_name"] = $itemOfArray->getName();
if ($schema->getTargetNamespace()) {
$property["xml_list"]["namespace"] = $schema->getTargetNamespace();
}
return $property;
} elseif ($itemOfArray = $this->isArrayType($t)) {
if (!$t->getName()) {
$visitedType = $this->visitTypeAnonymous($itemOfArray, $element->getName(), $class);
if ($prop = $this->typeHasValue($itemOfArray, $class, 'xx')) {
$property["type"] = "array<" . $prop . ">";
} else {
$property["type"] = "array<" . key($visitedType) . ">";
}
} else {
$this->visitType($itemOfArray);
$property["type"] = "array<" . $this->findPHPName($itemOfArray) . ">";
}
$property["xml_list"]["inline"] = false;
$property["xml_list"]["entry_name"] = $itemOfArray->getName();
if ($schema->getTargetNamespace()) {
$property["xml_list"]["namespace"] = $schema->getTargetNamespace();
}
return $property;
} elseif ($this->isArrayElement($element)) {
$property["xml_list"]["inline"] = true;
$property["xml_list"]["entry_name"] = $element->getName();
if ($schema->getTargetNamespace()) {
$property["xml_list"]["namespace"] = $schema->getTargetNamespace();
}
$property["type"] = "array<" . $this->findPHPClass($class, $element) . ">";
return $property;
}
}
$property["type"] = $this->findPHPClass($class, $element);
return $property;
}