/**
* Parses the configuration for properties of type OBJECT
*
* @param string $propertyName Name of the property
* @param mixed $objectNameOrConfiguration Value of the "object" section of the property configuration - either a string or an array
* @param Configuration $parentObjectConfiguration The Configuration object this property belongs to
* @return ConfigurationProperty A configuration property of type object
* @throws InvalidObjectConfigurationException
*/
protected function parsePropertyOfTypeObject($propertyName, $objectNameOrConfiguration, Configuration $parentObjectConfiguration)
{
if (is_array($objectNameOrConfiguration)) {
if (isset($objectNameOrConfiguration['name'])) {
$objectName = $objectNameOrConfiguration['name'];
unset($objectNameOrConfiguration['name']);
} else {
if (isset($objectNameOrConfiguration['factoryObjectName'])) {
$objectName = null;
} else {
$annotations = $this->reflectionService->getPropertyTagValues($parentObjectConfiguration->getClassName(), $propertyName, 'var');
if (count($annotations) !== 1) {
throw new InvalidObjectConfigurationException(sprintf('Object %s, for property "%s", contains neither object name, nor factory object name, and nor is the property properly @var - annotated.', $parentObjectConfiguration->getConfigurationSourceHint(), $propertyName, $parentObjectConfiguration->getClassName()), 1297097815);
}
$objectName = $annotations[0];
}
}
$objectConfiguration = $this->parseConfigurationArray($objectName, $objectNameOrConfiguration, $parentObjectConfiguration->getConfigurationSourceHint() . ', property "' . $propertyName . '"');
$property = new ConfigurationProperty($propertyName, $objectConfiguration, ConfigurationProperty::PROPERTY_TYPES_OBJECT);
} else {
$property = new ConfigurationProperty($propertyName, $objectNameOrConfiguration, ConfigurationProperty::PROPERTY_TYPES_OBJECT);
}
return $property;
}