/** * Adds new message * * @param MessageDescriptor $message Message * * @return null */ public function addMessage(MessageDescriptor $message) { $this->_messages[$message->getName()] = $message; }
/** * Resolves message field types * * @param MessageDescriptor $descriptor Message descriptor * @param FileDescriptor $file File descriptor * * @throws Exception * @return null */ private function _resolveMessageFieldTypes(MessageDescriptor $descriptor, FileDescriptor $file) { foreach ($descriptor->getFields() as $field) { if ($field->isProtobufScalarType()) { continue; } $namespace = $field->getNamespace(); if (is_null($namespace)) { if (($type = $descriptor->findType($field->getType())) !== false) { $field->setTypeDescriptor($type); continue; } $exists = $this->_namespaces[$file->getPackage()][$field->getType()]; if (isset($exists)) { $field->setTypeDescriptor($this->_namespaces[$file->getPackage()][$field->getType()]); continue; } $exists = isset($this->_namespaces[self::$_globalNamespace]) && isset($this->_namespaces[self::$_globalNamespace][$field->getType()]); if ($exists) { $field->setTypeDescriptor($this->_namespaces[self::GLOBAL_NAMESPACE][$field->getType()]); continue; } throw new Exception('Type ' . $field->getType() . ' not defined'); } else { if ($namespace[0] == '.') { if ($namespace == '.') { $namespace = ''; } else { $namespace = substr($namespace, 1); } if (!isset($this->_namespaces[$namespace])) { throw new Exception('Namespace \'' . $namespace . '\' for type ' . $field->getType() . ' not defined'); } if (!isset($this->_namespaces[$namespace][$field->getType()])) { throw new Exception('Type ' . $field->getType() . ' not defined in ' . $namespace); } $field->setTypeDescriptor($this->_namespaces[$namespace][$field->getType()]); } else { $type = $descriptor->findType($field->getType(), $field->getNamespace()); if ($type !== false) { $field->setTypeDescriptor($type); continue; } if (!isset($this->_namespaces[$namespace])) { throw new Exception('Namespace ' . $namespace . ' for type ' . $field->getType() . ' not defined'); } $exists = isset($this->_namespaces[$namespace][$field->getType()]); if (!$exists) { throw new Exception('Type ' . $field->getType() . ' not defined in ' . $namespace); } $field->setTypeDescriptor($this->_namespaces[$namespace][$field->getType()]); } } } foreach ($descriptor->getNested() as $nested) { $this->_resolveMessageFieldTypes($nested, $file); } }
/** * Adds nested message * * @param MessageDescriptor $nested Message * * @return null */ public function addNested(MessageDescriptor $nested) { $this->_nested[$nested->getName()] = $nested; }