Переглянути джерело

Add nested enum descriptor in php rumtime. (#3009)

Paul Yang 8 роки тому
батько
коміт
fba2acd72e

+ 3 - 0
php/src/Google/Protobuf/Internal/DescriptorPool.php

@@ -95,6 +95,9 @@ class DescriptorPool
         foreach ($descriptor->getNestedType() as $nested_type) {
         foreach ($descriptor->getNestedType() as $nested_type) {
             $this->addDescriptor($nested_type);
             $this->addDescriptor($nested_type);
         }
         }
+        foreach ($descriptor->getEnumType() as $enum_type) {
+            $this->addEnumDescriptor($enum_type);
+        }
     }
     }
 
 
     public function addEnumDescriptor($descriptor)
     public function addEnumDescriptor($descriptor)

+ 6 - 0
php/src/Google/Protobuf/descriptor.php

@@ -210,6 +210,12 @@ class Descriptor
               $nested_proto, $file_proto, $message_name_without_package));
               $nested_proto, $file_proto, $message_name_without_package));
         }
         }
 
 
+        // Handle nested enum.
+        foreach ($proto->getEnumType() as $enum_proto) {
+            $desc->addEnumType(EnumDescriptor::buildFromProto(
+              $enum_proto, $file_proto, $message_name_without_package));
+        }
+
         // Handle oneof fields.
         // Handle oneof fields.
         foreach ($proto->getOneofDecl() as $oneof_proto) {
         foreach ($proto->getOneofDecl() as $oneof_proto) {
             $desc->addOneofDecl(
             $desc->addOneofDecl(

+ 2 - 1
php/tests/generated_class_test.php

@@ -839,7 +839,8 @@ class GeneratedClassTest extends TestBase
     public function testMessageWithoutNamespace()
     public function testMessageWithoutNamespace()
     {
     {
         $m = new TestMessage();
         $m = new TestMessage();
-        $m->setOptionalNoNamespaceMessage(new NoNameSpaceMessage());
+        $sub = new NoNameSpaceMessage();
+        $m->setOptionalNoNamespaceMessage($sub);
         $m->getRepeatedNoNamespaceMessage()[] = new NoNameSpaceMessage();
         $m->getRepeatedNoNamespaceMessage()[] = new NoNameSpaceMessage();
 
 
         $n = new NoNamespaceMessage();
         $n = new NoNamespaceMessage();