/**
  * {@inheritdoc}
  */
 public static function fromArray(array $values)
 {
     $message = new self();
     $values = array_merge(['name' => null, 'package' => null, 'dependency' => [], 'public_dependency' => [], 'weak_dependency' => [], 'message_type' => [], 'enum_type' => [], 'service' => [], 'extension' => [], 'options' => null, 'source_code_info' => null, 'syntax' => null], $values);
     $message->setName($values['name']);
     $message->setPackage($values['package']);
     $message->setOptions($values['options']);
     $message->setSourceCodeInfo($values['source_code_info']);
     $message->setSyntax($values['syntax']);
     foreach ($values['dependency'] as $item) {
         $message->addDependency($item);
     }
     foreach ($values['public_dependency'] as $item) {
         $message->addPublicDependency($item);
     }
     foreach ($values['weak_dependency'] as $item) {
         $message->addWeakDependency($item);
     }
     foreach ($values['message_type'] as $item) {
         $message->addMessageType($item);
     }
     foreach ($values['enum_type'] as $item) {
         $message->addEnumType($item);
     }
     foreach ($values['service'] as $item) {
         $message->addService($item);
     }
     foreach ($values['extension'] as $item) {
         $message->addExtension($item);
     }
     return $message;
 }