/**
  * @param \google\protobuf\DescriptorProto $descriptor
  * @param string                           $default
  *
  * @return string
  */
 protected function getUniqueFieldName(DescriptorProto $descriptor, $default)
 {
     $extensions = $descriptor->getExtensionList() ?: [];
     $fields = $descriptor->getFieldList() ?: [];
     $name = $default;
     $names = [];
     $count = 0;
     foreach ($fields as $field) {
         $names[$field->getName()] = true;
     }
     foreach ($extensions as $field) {
         $names[$field->getName()] = true;
     }
     while (isset($names[$name])) {
         $name = $default . $count++;
     }
     return $name;
 }
 /**
  * @param \google\protobuf\FileDescriptorProto $fileDescriptor
  * @param \google\protobuf\DescriptorProto     $messageDescriptor
  * @param string                               $parent
  *
  * @return \Protobuf\Compiler\Entity
  */
 protected function generateMessage(FileDescriptorProto $fileDescriptor, DescriptorProto $messageDescriptor, $parent = null)
 {
     $type = Entity::TYPE_MESSAGE;
     $name = $messageDescriptor->getName();
     $entity = new Entity($type, $name, $messageDescriptor, $fileDescriptor, $parent);
     if ($messageDescriptor->hasExtensionList() && $this->containsProtobufExtension($messageDescriptor->getExtensionList())) {
         $entity->setProtobufExtension(true);
     }
     return $entity;
 }