/** * generate php messages * * @param \google\protobuf\FileDescriptorProto $file * @param array $paramter * @param GeneratorContext $context * @param StringStream $error */ public function generate(\google\protobuf\FileDescriptorProto $file, $paramter = array(), GeneratorContext $context, StringStream $error) { $file_list = array(); try { $file_generator = new FileGenerator($context, $file); if (!$context->hasOpened("autoload.php")) { // NOTE: generate autoloader first. it's easier to reuse for extension $printer = new Printer($context->open("autoload.php"), "`"); $append_mode = false; $file_generator->generateAutoloader($printer, array(), $append_mode); } if (Helper::IsPackageNameOverriden($file)) { $package_name = Helper::getPackageName($file); } else { $package_name = Helper::phppackage($file); } $package_dir = Helper::phpPackageToDir($package_name); $printer = new Printer($context->open($file->getName() . ".php"), "`"); $file_generator->generate($printer); $file_generator->generateSiblings($package_dir, $context, $file_list); $printer = new Printer($context->openForInsert("autoload.php", "autoloader_scope:classmap"), "`"); $file_generator->generateAutoloader($printer, $file_list, true); } catch (\Exception $e) { $error->assign($e->getMessage() . "\n" . $e->getTraceAsString()); } }
public static function getFullQualifiedTypeName(FieldDescriptorProto $field, DescriptorProto $descriptor, FileDescriptorProto $file) { if (FieldDescriptorProto\Type::isMessage($field) || FieldDescriptorProto\Type::isEnum($field)) { $name = $field->getTypeName(); if (strlen($name) < 1) { return null; } if ($name[0] == ".") { $name = Helper::getPackageName($file) . $name; } else { $name = $descriptor->package_name . $name; } } else { $name = $field->getTypeName(); } return $name; }
public function setupFullName(\google\protobuf\compiler\CodeGeneratorRequest $req) { foreach ($req->getProtoFile() as $file_descriptor) { $this->file = $file_descriptor; if (MyHelper::IsPackageNameOverriden($file_descriptor)) { $package_name = MyHelper::getPackageName($file_descriptor); } else { $package_name = MyHelper::phppackage($file_descriptor); } /* @var $file_descriptor FileDescriptorProto */ foreach ($file_descriptor->getEnumType() as $enum) { $this->setupFullNameForEnum($enum, $package_name); } foreach ($file_descriptor->getMessageType() as $message) { $this->setupFullNameForMessage($message, $package_name); } $file_descriptor->setPackage(MyHelper::getPackageName($file_descriptor)); } }
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 */ } }