Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. DescriptorPool.php

class DescriptorPool

Same name in this branch
  1. 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\Internal
View 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

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal