diff --git a/php/ext/google/protobuf/def.c b/php/ext/google/protobuf/def.c index f10c37cd9bc2..7f5004ced147 100644 --- a/php/ext/google/protobuf/def.c +++ b/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 diff --git a/php/tests/descriptors_test.php b/php/tests/descriptors_test.php index 93683b82fdfd..60a6292cb61d 100644 --- a/php/tests/descriptors_test.php +++ b/php/tests/descriptors_test.php @@ -11,6 +11,8 @@ use Descriptors\TestDescriptorsEnum; use Descriptors\TestDescriptorsMessage; use Descriptors\TestDescriptorsMessage\Sub; +use Foo\TestMessage; +use Bar\TestInclude; class DescriptorsTest extends TestBase { @@ -89,6 +91,17 @@ public function testDescriptor() $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. #########################################################