Exemple #1
0
 public function generate(Printer $printer)
 {
     if ($this->descriptor->file()->getOptions()->getExtension("php")->getMultipleFiles()) {
         $printer->put("<?php\n");
     }
     $this->printUseNameSpaceIfNeeded($printer);
     $printer->put("/**\n" . " * Generated by the protocol buffer compiler.  DO NOT EDIT!\n" . " * source: `filename`\n" . " *\n", "filename", $this->descriptor->file()->getName());
     $printer->put(" */\n");
     $printer->put("class `name` extends `base`\n{\n", "name", Helper::getClassName($this->descriptor), "base", Helper::getEnumClassName($this->descriptor));
     $printer->indent();
     $printer->put("// @@protoc_insertion_point(traits:`name`)\n", "name", $this->descriptor->full_name);
     $printer->put("\n");
     foreach ($this->descriptor->getValue() as $value) {
         if ($dict = SourceInfoDictionary::get($this->descriptor->file()->getName(), $this->descriptor->getName(), $value->getName())) {
             if ($dict->getLeadingComments()) {
                 $printer->put("/**\n");
                 $lines = preg_split("/\r?\n/", trim($dict->getLeadingComments()));
                 foreach ($lines as $line) {
                     $line = Helper::cleanupComment($line);
                     $printer->put(" * `comment`\n", "comment", $line);
                 }
                 $printer->put(" */\n");
             }
         }
         $printer->put("const `name` = `number`;\n", "name", $this->getEnumValueAsString($value), "number", $value->getNumber());
     }
     $printer->put("\n");
     $printer->put("// @@protoc_insertion_point(const_scope:`name`)\n", "name", $this->descriptor->full_name);
     $printer->put("\n");
     $printer->put("// @@protoc_insertion_point(class_scope:`name`)\n", "name", $this->descriptor->full_name);
     $printer->put("\n");
     $printer->put("/**\n");
     $printer->put(" * @return \\ProtocolBuffers\\EnumDescriptor\n");
     $printer->put(" */\n");
     $printer->put("public static function getEnumDescriptor()\n");
     $printer->put("{\n");
     $printer->indent();
     $printer->put("static \$descriptor;\n");
     $printer->put("if (!\$descriptor) {\n");
     $printer->indent();
     $printer->put("\$builder = new `builder`();\n", "builder", Helper::getEnumDescriptorBuilderClassName($this->descriptor));
     foreach ($this->descriptor->getValue() as $value) {
         $printer->put("\$builder->addValue(new \\ProtocolBuffers\\EnumValueDescriptor(array(\n");
         $printer->indent();
         $printer->put("\"value\" => `value`,\n", "value", "self::" . $value->getName());
         $printer->put("\"name\"  => '`name`',\n", "name", $value->getName());
         $printer->outdent();
         $printer->put(")));\n");
     }
     $printer->put("// @@protoc_insertion_point(builder_scope:`name`)\n", "name", $this->descriptor->full_name);
     $printer->put("\$descriptor = \$builder->build();\n");
     $printer->outdent();
     $printer->put("}\n");
     $printer->put("return \$descriptor;\n");
     $printer->outdent();
     $printer->put("}\n");
     $printer->outdent();
     $printer->put("}\n");
     if ($this->enclose_namespace_) {
         $printer->outdent();
         $printer->put("}\n\n");
     }
     PragmaticInserter::execute($this->descriptor, $this->context);
 }
 public function printProperties(Printer $printer)
 {
     if ($this->descriptor->getOptions()->getExtension("php_option")->getUseSingleProperty()) {
         $printer->put("/** @var array \$`var` */\n", "var", $this->descriptor->getOptions()->getExtension("php_option")->getSinglePropertyName());
         $printer->put("protected \$`var` = array();\n", "var", $this->descriptor->getOptions()->getExtension("php_option")->getSinglePropertyName());
     } else {
         foreach ($this->descriptor->getField() as $field) {
             /* @var $field \google\protobuf\FieldDescriptorProto */
             $printer->put("/**\n");
             if ($dict = SourceInfoDictionary::get($this->descriptor->file()->getName(), $this->descriptor->getName(), $field->getName())) {
                 /* @var $dict \google\protobuf\SourceCodeInfo\Location */
                 if ($dict->getLeadingComments()) {
                     $lines = preg_split("/\r?\n/", trim($dict->getLeadingComments()));
                     foreach ($lines as $line) {
                         $line = Helper::cleanupComment($line);
                         $printer->put(" * `comment`\n", "comment", $line);
                     }
                     $printer->put(" *\n");
                 }
             }
             $printer->put(" * @var `type` \$`var`\n", "type", $this->getTypeName($field), "var", $field->getName());
             $printer->put(" * @tag `tag`\n", "tag", $field->getNumber());
             $printer->put(" * @label `required`\n", "required", FieldDescriptorProto\Label::isRequired($field) ? "required" : "optional");
             $printer->put(" * @type `type`\n", "type", Helper::getFieldTypeName($field));
             if (FieldDescriptorProto\Label::isRepeated($field) && FieldDescriptorProto\Type::isMessage($field) || FieldDescriptorProto\Type::isEnum($field)) {
                 $printer->put(" * @see `see`\n", "see", Helper::getClassName($field, true));
             }
             if ($dict = SourceInfoDictionary::get($this->descriptor->file()->getName(), $this->descriptor->getName(), $field->getName())) {
                 /* @var $dict \google\protobuf\SourceCodeInfo\Location */
                 if ($dict->getTrailingComments()) {
                     $printer->put(" *\n");
                     $lines = preg_split("/\r?\n/", trim($dict->getTrailingComments()));
                     foreach ($lines as $line) {
                         $printer->put(" * `comment`\n", "comment", Helper::cleanupComment($line));
                     }
                     $printer->put(" *\n");
                 }
             }
             $printer->put(" **/\n");
             $printer->put("protected \$`name`;\n", "name", $field->getName());
             $printer->put("\n");
         }
     }
     $printer->put("\n");
     $printer->put("// @@protoc_insertion_point(properties_scope:`name`)\n\n", "name", $this->descriptor->full_name);
 }