class DescriptorPool
Same name in this branch
- 11.1.x vendor/google/protobuf/src/Google/Protobuf/DescriptorPool.php \Google\Protobuf\DescriptorPool
Hierarchy
- class \Google\Protobuf\Internal\DescriptorPool
Expanded class hierarchy of DescriptorPool
1 file declares its use of DescriptorPool
- Message.php in vendor/
google/ protobuf/ src/ Google/ Protobuf/ Internal/ Message.php
File
-
vendor/
google/ protobuf/ src/ Google/ Protobuf/ Internal/ DescriptorPool.php, line 18
Namespace
Google\Protobuf\InternalView source
class DescriptorPool {
private static $pool;
// Map from message names to sub-maps, which are maps from field numbers to
// field descriptors.
private $class_to_desc = [];
private $class_to_enum_desc = [];
private $proto_to_class = [];
public static function getGeneratedPool() {
if (!isset(self::$pool)) {
self::$pool = new DescriptorPool();
}
return self::$pool;
}
public function internalAddGeneratedFile($data, $use_nested = false) {
$files = new FileDescriptorSet();
$files->mergeFromString($data);
foreach ($files->getFile() as $file_proto) {
$file = FileDescriptor::buildFromProto($file_proto);
foreach ($file->getMessageType() as $desc) {
$this->addDescriptor($desc);
}
unset($desc);
foreach ($file->getEnumType() as $desc) {
$this->addEnumDescriptor($desc);
}
unset($desc);
foreach ($file->getMessageType() as $desc) {
$this->crossLink($desc);
}
unset($desc);
}
}
public function addMessage($name, $klass) {
return new MessageBuilderContext($name, $klass, $this);
}
public function addEnum($name, $klass) {
return new EnumBuilderContext($name, $klass, $this);
}
public function addDescriptor($descriptor) {
$this->proto_to_class[$descriptor->getFullName()] = $descriptor->getClass();
$this->class_to_desc[$descriptor->getClass()] = $descriptor;
$this->class_to_desc[$descriptor->getLegacyClass()] = $descriptor;
$this->class_to_desc[$descriptor->getPreviouslyUnreservedClass()] = $descriptor;
foreach ($descriptor->getNestedType() as $nested_type) {
$this->addDescriptor($nested_type);
}
foreach ($descriptor->getEnumType() as $enum_type) {
$this->addEnumDescriptor($enum_type);
}
}
public function addEnumDescriptor($descriptor) {
$this->proto_to_class[$descriptor->getFullName()] = $descriptor->getClass();
$this->class_to_enum_desc[$descriptor->getClass()] = $descriptor;
$this->class_to_enum_desc[$descriptor->getLegacyClass()] = $descriptor;
}
public function getDescriptorByClassName($klass) {
if (isset($this->class_to_desc[$klass])) {
return $this->class_to_desc[$klass];
}
else {
return null;
}
}
public function getEnumDescriptorByClassName($klass) {
if (isset($this->class_to_enum_desc[$klass])) {
return $this->class_to_enum_desc[$klass];
}
else {
return null;
}
}
public function getDescriptorByProtoName($proto) {
if (isset($this->proto_to_class[$proto])) {
$klass = $this->proto_to_class[$proto];
return $this->class_to_desc[$klass];
}
else {
return null;
}
}
public function getEnumDescriptorByProtoName($proto) {
$klass = $this->proto_to_class[$proto];
return $this->class_to_enum_desc[$klass];
}
private function crossLink(Descriptor $desc) {
foreach ($desc->getField() as $field) {
switch ($field->getType()) {
case GPBType::MESSAGE:
$proto = $field->getMessageType();
if ($proto[0] == '.') {
$proto = substr($proto, 1);
}
$subdesc = $this->getDescriptorByProtoName($proto);
if (is_null($subdesc)) {
trigger_error('proto not added: ' . $proto . " for " . $desc->getFullName(), E_USER_ERROR);
}
$field->setMessageType($subdesc);
break;
case GPBType::ENUM:
$proto = $field->getEnumType();
if ($proto[0] == '.') {
$proto = substr($proto, 1);
}
$field->setEnumType($this->getEnumDescriptorByProtoName($proto));
break;
default:
break;
}
}
unset($field);
foreach ($desc->getNestedType() as $nested_type) {
$this->crossLink($nested_type);
}
unset($nested_type);
}
public function finish() {
foreach ($this->class_to_desc as $klass => $desc) {
$this->crossLink($desc);
}
unset($desc);
}
}
Members
Title Sort descending | Modifiers | Object type | Summary |
---|---|---|---|
DescriptorPool::$class_to_desc | private | property | |
DescriptorPool::$class_to_enum_desc | private | property | |
DescriptorPool::$pool | private static | property | |
DescriptorPool::$proto_to_class | private | property | |
DescriptorPool::addDescriptor | public | function | |
DescriptorPool::addEnum | public | function | |
DescriptorPool::addEnumDescriptor | public | function | |
DescriptorPool::addMessage | public | function | |
DescriptorPool::crossLink | private | function | |
DescriptorPool::finish | public | function | |
DescriptorPool::getDescriptorByClassName | public | function | |
DescriptorPool::getDescriptorByProtoName | public | function | |
DescriptorPool::getEnumDescriptorByClassName | public | function | |
DescriptorPool::getEnumDescriptorByProtoName | public | function | |
DescriptorPool::getGeneratedPool | public static | function | |
DescriptorPool::internalAddGeneratedFile | public | function |