예제 #1
0
 /**
  * @return \Protobuf\Extension\ExtensionFieldMap
  */
 protected function getFileOptionsExtensions()
 {
     if (!$this->fileDescriptor->hasOptions()) {
         return null;
     }
     return $this->fileDescriptor->getOptions()->extensions();
 }
예제 #2
0
 public function generateSiblings($package_name, GeneratorContext $context, &$file_list)
 {
     if ($this->file->getOptions()->getExtension("php")->getMultipleFiles()) {
         foreach ($this->file->getEnumType() as $enum) {
             $enum->full_name = Helper::getPackageName($this->file) . "." . $enum->getName();
             $path = $package_name . DIRECTORY_SEPARATOR . $enum->getName() . ".php";
             $output = $context->open($path);
             $file_list[] = $path;
             $printer = new Printer($output, "`");
             $gen = new EnumGenerator($context, $enum, $file_list);
             $gen->generate($printer);
         }
         foreach ($this->file->getMessageType() as $message) {
             $message->full_name = Helper::getPackageName($this->file) . "." . $message->getName();
             $path = $package_name . DIRECTORY_SEPARATOR . $message->getName() . ".php";
             $output = $context->open($path);
             $file_list[] = $path;
             $printer = new Printer($output, "`");
             $gen = new MessageGenerator($context, $message, $file_list);
             $gen->generate($printer);
         }
         /* TODO(chobie): add service here */
     }
 }
예제 #3
0
 public function compileProtoFile(proto\FileDescriptorProto $proto)
 {
     $file = new \google\protobuf\compiler\CodeGeneratorResponse\File();
     $opts = $proto->getOptions();
     $name = pathinfo($proto->getName(), PATHINFO_FILENAME);
     $name .= isset($opts['json.suffix']) ? $opts['json.suffix'] : '.js';
     $file->setName($name);
     $namespace = $this->getNamespace($proto);
     $s[] = "// DO NOT EDIT! Generated by Protobuf for PHP protoc plugin " . Protobuf::VERSION;
     $s[] = "// Source: " . $proto->getName();
     $s[] = "//   Date: " . date('Y-m-d H:i:s');
     $s[] = "";
     $s[] = "(function(){";
     $s[] = "/** @namespace */";
     $s[] = "var {$namespace} = {$namespace} || {};";
     $s[] = "";
     $s[] = "// Make it CommonJS compatible";
     $s[] = "if (typeof exports !== 'undefined') {";
     $s[] = "  var ProtoJson = this.ProtoJson;";
     $s[] = "  if (!ProtoJson && typeof require !== 'undefined')";
     $s[] = "    ProtoJson = require('ProtoJson');";
     $s[] = "  {$namespace} = exports;";
     $s[] = "} else {";
     $s[] = "  this.{$namespace} = {$namespace};";
     $s[] = "}";
     $s[] = "";
     // Generate Enums
     foreach ($proto->getEnumTypeList() as $enum) {
         $s[] = $this->compileEnum($enum, $namespace);
     }
     // Generate Messages
     foreach ($proto->getMessageTypeList() as $msg) {
         $s[] = $this->compileMessage($msg, $namespace);
     }
     // Collect extensions
     if ($proto->hasExtension()) {
         foreach ($proto->getExtensionList() as $field) {
             $this->extensions[$field->getExtendee()][] = array($namespace, $field);
         }
     }
     // Dump all extensions found in this proto file
     if (count($this->extensions)) {
         foreach ($this->extensions as $extendee => $fields) {
             foreach ($fields as $pair) {
                 list($ns, $field) = $pair;
                 $s[] = $this->compileExtension($field, $ns, '');
             }
         }
     }
     $s[] = "})();";
     $src = implode("\n", $s);
     $file->setContent($src);
     return array($file);
 }
예제 #4
0
파일: Helper.php 프로젝트: melanc/devel
 public static function IsPackageNameOverriden(FileDescriptorProto $file)
 {
     $package = getEnv("PACKAGE");
     $result = null;
     if ($package) {
         $result = $package;
     } else {
         if ($file->getOptions()->getJavaPackage()) {
             $result = $file->getOptions()->getJavaPackage();
         }
     }
     if ($result) {
         return true;
     } else {
         return false;
     }
 }