/**
  * Generates class description and write it to buffer
  *
  * @param MessageDescriptor $descriptor Message descriptor
  * @param CodeStringBuffer  $buffer     Buffer to write code to
  *
  * @return null
  */
 private function _createClass(MessageDescriptor $descriptor, CodeStringBuffer $buffer)
 {
     foreach ($descriptor->getEnums() as $enum) {
         $this->_createEnum($enum, $buffer);
     }
     foreach ($descriptor->getNested() as $nested) {
         $this->_createClass($nested, $buffer);
     }
     $buffer->newline();
     if ($this->_useNativeNamespaces) {
         $name = self::createTypeName($descriptor->getName());
         $namespaceName = $this->_createNamespaceName($descriptor);
         $buffer->append('namespace ' . $namespaceName . ' {');
     } else {
         $name = $this->_createClassName($descriptor);
     }
     $comment = new CommentStringBuffer(self::TAB, self::EOL);
     $path = $this->_createEmbeddedMessagePath($descriptor);
     if ($path) {
         $comment->append($descriptor->getName() . ' message embedded in ' . $path . ' message');
     } else {
         $comment->append($descriptor->getName() . ' message');
     }
     $buffer->append($comment);
     $buffer->append('class ' . $name . ' extends ProtobufMessage')->append('{')->increaseIdentation();
     $this->_createClassConstructor($descriptor->getName(), $descriptor->getFields(), $buffer);
     $this->_createClassBody($descriptor->getFields(), $buffer);
     $buffer->decreaseIdentation()->append('}');
     if ($this->_useNativeNamespaces) {
         $buffer->append('}');
     }
 }