[PropertyInfo] Fixed type extraction for nullable collections of non-nullable elements

This commit is contained in:
Stanislav Gamayunov 2019-10-29 17:35:48 +05:00 committed by Fabien Potencier
parent e8b31ff608
commit 5e394c40f0
4 changed files with 12 additions and 1 deletions

View File

@ -90,6 +90,7 @@ class PhpDocExtractorTest extends TestCase
['h', [new Type(Type::BUILTIN_TYPE_STRING, true)], null, null], ['h', [new Type(Type::BUILTIN_TYPE_STRING, true)], null, null],
['i', [new Type(Type::BUILTIN_TYPE_STRING, true), new Type(Type::BUILTIN_TYPE_INT, true)], null, null], ['i', [new Type(Type::BUILTIN_TYPE_STRING, true), new Type(Type::BUILTIN_TYPE_INT, true)], null, null],
['j', [new Type(Type::BUILTIN_TYPE_OBJECT, true, 'DateTime')], null, null], ['j', [new Type(Type::BUILTIN_TYPE_OBJECT, true, 'DateTime')], null, null],
['nullableCollectionOfNonNullableElements', [new Type(Type::BUILTIN_TYPE_ARRAY, true, null, true, new Type(Type::BUILTIN_TYPE_INT), new Type(Type::BUILTIN_TYPE_INT, false))], null, null],
['donotexist', null, null, null], ['donotexist', null, null, null],
['staticGetter', null, null, null], ['staticGetter', null, null, null],
['staticSetter', null, null, null], ['staticSetter', null, null, null],
@ -174,6 +175,7 @@ class PhpDocExtractorTest extends TestCase
['h', [new Type(Type::BUILTIN_TYPE_STRING, true)], null, null], ['h', [new Type(Type::BUILTIN_TYPE_STRING, true)], null, null],
['i', [new Type(Type::BUILTIN_TYPE_STRING, true), new Type(Type::BUILTIN_TYPE_INT, true)], null, null], ['i', [new Type(Type::BUILTIN_TYPE_STRING, true), new Type(Type::BUILTIN_TYPE_INT, true)], null, null],
['j', [new Type(Type::BUILTIN_TYPE_OBJECT, true, 'DateTime')], null, null], ['j', [new Type(Type::BUILTIN_TYPE_OBJECT, true, 'DateTime')], null, null],
['nullableCollectionOfNonNullableElements', [new Type(Type::BUILTIN_TYPE_ARRAY, true, null, true, new Type(Type::BUILTIN_TYPE_INT), new Type(Type::BUILTIN_TYPE_INT, false))], null, null],
['donotexist', null, null, null], ['donotexist', null, null, null],
['staticGetter', null, null, null], ['staticGetter', null, null, null],
['staticSetter', null, null, null], ['staticSetter', null, null, null],
@ -214,6 +216,7 @@ class PhpDocExtractorTest extends TestCase
['h', [new Type(Type::BUILTIN_TYPE_STRING, true)], null, null], ['h', [new Type(Type::BUILTIN_TYPE_STRING, true)], null, null],
['i', [new Type(Type::BUILTIN_TYPE_STRING, true), new Type(Type::BUILTIN_TYPE_INT, true)], null, null], ['i', [new Type(Type::BUILTIN_TYPE_STRING, true), new Type(Type::BUILTIN_TYPE_INT, true)], null, null],
['j', [new Type(Type::BUILTIN_TYPE_OBJECT, true, 'DateTime')], null, null], ['j', [new Type(Type::BUILTIN_TYPE_OBJECT, true, 'DateTime')], null, null],
['nullableCollectionOfNonNullableElements', [new Type(Type::BUILTIN_TYPE_ARRAY, true, null, true, new Type(Type::BUILTIN_TYPE_INT), new Type(Type::BUILTIN_TYPE_INT, false))], null, null],
['donotexist', null, null, null], ['donotexist', null, null, null],
['staticGetter', null, null, null], ['staticGetter', null, null, null],
['staticSetter', null, null, null], ['staticSetter', null, null, null],

View File

@ -51,6 +51,7 @@ class ReflectionExtractorTest extends TestCase
'h', 'h',
'i', 'i',
'j', 'j',
'nullableCollectionOfNonNullableElements',
'emptyVar', 'emptyVar',
'iteratorCollection', 'iteratorCollection',
'iteratorCollectionWithKey', 'iteratorCollectionWithKey',
@ -97,6 +98,7 @@ class ReflectionExtractorTest extends TestCase
'h', 'h',
'i', 'i',
'j', 'j',
'nullableCollectionOfNonNullableElements',
'emptyVar', 'emptyVar',
'iteratorCollection', 'iteratorCollection',
'iteratorCollectionWithKey', 'iteratorCollectionWithKey',
@ -133,6 +135,7 @@ class ReflectionExtractorTest extends TestCase
'h', 'h',
'i', 'i',
'j', 'j',
'nullableCollectionOfNonNullableElements',
'emptyVar', 'emptyVar',
'iteratorCollection', 'iteratorCollection',
'iteratorCollectionWithKey', 'iteratorCollectionWithKey',

View File

@ -93,6 +93,11 @@ class Dummy extends ParentDummy
*/ */
public $j; public $j;
/**
* @var int[]|null
*/
public $nullableCollectionOfNonNullableElements;
/** /**
* @var array * @var array
*/ */

View File

@ -114,7 +114,7 @@ final class PhpDocTypeHelper
$collectionValueType = null; $collectionValueType = null;
} else { } else {
$collectionKeyType = new Type(Type::BUILTIN_TYPE_INT); $collectionKeyType = new Type(Type::BUILTIN_TYPE_INT);
$collectionValueType = $this->createType($type, $nullable, substr($docType, 0, -2)); $collectionValueType = $this->createType($type, false, substr($docType, 0, -2));
} }
return new Type(Type::BUILTIN_TYPE_ARRAY, $nullable, null, true, $collectionKeyType, $collectionValueType); return new Type(Type::BUILTIN_TYPE_ARRAY, $nullable, null, true, $collectionKeyType, $collectionValueType);