public function printGetDescriptor(Printer $printer) { $php_options = $this->descriptor->getOptions(); $printer->put("/**\n"); $printer->put(" * get descriptor for protocol buffers\n"); $printer->put(" * \n"); $printer->put(" * @return \\ProtocolBuffersDescriptor\n"); $printer->put(" */\n"); $printer->put("public static function getDescriptor()\n"); $printer->put("{\n"); $printer->indent(); $printer->put("static \$descriptor;\n"); $printer->put("\n"); $printer->put("if (!isset(\$descriptor)) {\n"); $printer->indent(); $printer->put("\$desc = new `class_name`();\n", "class_name", Helper::getDescriptorBuilderClassName($this->descriptor)); foreach ($this->descriptor->getField() as $offset => $field) { /* @var $field \google\protobuf\FieldDescriptorProto */ $printer->put("\$desc->addField(`tag`, new `class_name`(array(\n", "tag", $field->getNumber(), "class_name", Helper::getFieldDescriptorClassName($this->descriptor)); $printer->indent(); $printer->put("\"type\" => `type`,\n", "type", Helper::getFieldTypeName($field)); $printer->put("\"name\" => \"`name`\",\n", "name", $field->getName()); $printer->put("\"required\" => `required`,\n", "required", FieldDescriptorProto\Label::isRequired($field) ? "true" : "false"); $printer->put("\"optional\" => `optional`,\n", "optional", FieldDescriptorProto\Label::isOptional($field) ? "true" : "false"); $printer->put("\"repeated\" => `repeated`,\n", "repeated", FieldDescriptorProto\Label::isRepeated($field) ? "true" : "false"); $options = $field->getOptions(); if ($options) { $printer->put("\"packable\" => `packable`,\n", "packable", FieldDescriptorProto\Label::isPacked($field) ? "true" : "false"); } else { $printer->put("\"packable\" => `packable`,\n", "packable", "false"); } $printer->put("\"default\" => `value`,\n", "value", $this->defaultValueAsString($field)); if (FieldDescriptorProto\Type::isMessage($field)) { $name = $field->getTypeName(); $descriptor = MessagePool::get($name); $printer->put("\"message\" => '`message`',\n", "message", Helper::getClassName($descriptor, true)); } $printer->outdent(); $printer->put(")));\n"); } if ($php_options instanceof \google\protobuf\MessageOptions) { $php_message_options = $php_options->getExtension("php_option"); if ($php_message_options->getUseSingleProperty()) { $printer->put("\$phpoptions = \$desc->getOptions()->getExtension"); $printer->put("(\\ProtocolBuffers::PHP_MESSAGE_OPTION);\n"); $printer->put("\$phpoptions->setUseSingleProperty(true);\n"); $printer->put("\$phpoptions->setSinglePropertyName(\"`name`\");\n", "name", $php_message_options->getSinglePropertyName()); $printer->put("\n"); } } $printer->put("// @@protoc_insertion_point(builder_scope:`name`)\n\n", "name", $this->descriptor->full_name); $printer->put("\$descriptor = \$desc->build();\n"); $printer->outdent(); $printer->put("}\n"); $printer->put("return \$descriptor;\n"); $printer->outdent(); $printer->put("}\n\n"); }