public function printExtension(Printer $printer, FieldDescriptorProto $field) { if (ExtensionPool::has($field->getExtendee(), $field->getNumber())) { // NOTE: already registered. return; } ExtensionPool::register($field->getExtendee(), $field->getNumber(), $field); $printer->put("\$registry->add('`message`', `extension`, new \\ProtocolBuffers\\FieldDescriptor(array(\n", "message", Helper::getExtendeeClassName($field), "extension", $field->getNumber()); $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"); $printer->put("\"packable\" => `packable`,\n", "packable", FieldDescriptorProto\Label::isPacked($field) ? "true" : "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"); }
public function generateAutoloader(Printer $printer, $file_list, $append_mode = false) { if (!$append_mode) { $printer->put("<?php\n"); $printer->put("spl_autoload_register(function(\$name){\n"); $printer->indent(); $printer->put("static \$classmap;\n"); $printer->put("if (!\$classmap) {\n"); $printer->indent(); $printer->put("\$classmap = array(\n"); $printer->indent(); } foreach ($file_list as $file) { $tmp = str_replace("\\", DIRECTORY_SEPARATOR, $file); $key = str_replace(DIRECTORY_SEPARATOR, "\\", substr($file, 0, strrpos($file, "."))); if (Helper::isPearStyle($this->file)) { $printer->put("'`key`' => '`path`',\n", "key", str_replace("\\", "_", ltrim($key, "\\")), "path", DIRECTORY_SEPARATOR . ltrim($tmp, DIRECTORY_SEPARATOR)); } else { $printer->put("'`key`' => '`path`',\n", "key", ltrim($key, "\\"), "path", DIRECTORY_SEPARATOR . ltrim($tmp, DIRECTORY_SEPARATOR)); } } if (!$append_mode) { $printer->put("// @@protoc_insertion_point(autoloader_scope:classmap)\n"); $printer->outdent(); $printer->put(");\n"); $printer->outdent(); $printer->put("}\n"); $printer->put("if (isset(\$classmap[\$name])) {\n"); $printer->indent(); $printer->put("require __DIR__ . DIRECTORY_SEPARATOR . \$classmap[\$name];\n"); $printer->outdent(); $printer->put("}\n"); $printer->outdent(); $printer->put("});\n"); $printer->put("\n"); $printer->put("call_user_func(function(){\n"); $printer->indent(); $printer->put("\$registry = `class`::getInstance();\n", "class", Helper::getExtensionRegistryClassName($this->file)); $printer->put("// @@protoc_insertion_point(extension_scope:registry)\n"); $printer->outdent(); $printer->put("});\n"); } }