فهرست منبع

Call register_class before getClass from desc (#7077)

* Call register_class before getClass from desc

* Remove debug code
Paul Yang 5 سال پیش
والد
کامیت
629ca244a1
2فایلهای تغییر یافته به همراه14 افزوده شده و 0 حذف شده
  1. 1 0
      php/ext/google/protobuf/def.c
  2. 13 0
      php/tests/descriptors_test.php

+ 1 - 0
php/ext/google/protobuf/def.c

@@ -132,6 +132,7 @@ static void descriptor_init_c_instance(Descriptor *desc TSRMLS_DC) {
 PHP_METHOD(Descriptor, getClass) {
   Descriptor* desc = UNBOX(Descriptor, getThis());
   DescriptorInternal* intern = desc->intern;
+  register_class(intern, false TSRMLS_CC);
 #if PHP_MAJOR_VERSION < 7
   const char* classname = intern->klass->name;
 #else

+ 13 - 0
php/tests/descriptors_test.php

@@ -11,6 +11,8 @@ use Google\Protobuf\Internal\MapField;
 use Descriptors\TestDescriptorsEnum;
 use Descriptors\TestDescriptorsMessage;
 use Descriptors\TestDescriptorsMessage\Sub;
+use Foo\TestMessage;
+use Bar\TestInclude;
 
 class DescriptorsTest extends TestBase
 {
@@ -89,6 +91,17 @@ class DescriptorsTest extends TestBase
         $this->assertSame(1, $desc->getOneofDeclCount());
     }
 
+    public function testDescriptorForIncludedMessage()
+    {
+        $pool = DescriptorPool::getGeneratedPool();
+        $class = get_class(new TestMessage());
+        $this->assertSame('Foo\TestMessage', $class);
+        $desc = $pool->getDescriptorByClassName($class);
+        $fielddesc = $desc->getField(17);
+        $subdesc = $fielddesc->getMessageType();
+        $this->assertSame('Bar\TestInclude', $subdesc->getClass());
+    }
+
     #########################################################
     # Test enum descriptor.
     #########################################################