protected function createTagClass($namespace, $classname, array $properties)
{
if ($classname == 'Reserved') {
return;
}
$namespace = self::generateNamespace('Tag\\' . $namespace);
$classpath = sprintf('%s\\%s', $namespace, $classname);
if (isset($this->classes[$classpath])) {
foreach ($properties as $property => $value) {
if ($this->classes[$classpath]->getProperty($property) != $value) {
if (in_array($property, array('Writable', 'flag_Binary', 'flag_List'))) {
$this->classes[$classpath]->setProperty($property, 'false');
} elseif ($property === 'Values') {
$new_value = array();
if (!is_array($this->classes[$classpath]->getProperty($property))) {
if (is_array($value)) {
$new_value = $value;
}
} else {
if (is_array($value) && $this->classes[$classpath]->getProperty($property) != $value) {
$new_value = array_merge($this->classes[$classpath]->getProperty($property), $value);
} else {
$new_value = $this->classes[$classpath]->getProperty($property);
}
}
$this->classes[$classpath]->setProperty($property, $new_value);
} else {
$this->classes[$classpath]->setProperty($property, 'mixed');
}
}
}
} else {
$this->classes[$classpath] = new Builder($namespace, $classname, $properties, 'AbstractTag', array('JMS\\Serializer\\Annotation\\ExclusionPolicy', '\\PHPExiftool\\Driver\\AbstractTag'), array('@ExclusionPolicy("all")'));
}
return;
}