feature #23617 [PropertyInfo] Add hassers for accessors prefixes (sebdec)

This PR was submitted for the 3.3 branch but it was squashed and merged into the 4.1-dev branch instead (closes #23617).

Discussion
----------

[PropertyInfo] Add hassers for accessors prefixes

| Q             | A
| ------------- | ---
| Branch?       | 3.3
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | None
| License       | MIT
| Doc PR        | -

In the component PropertyInfo
In the class ReflectionExtractor Add hassers in the accessors prefixes

Because I think it's common to have readable properties with method like this:
hasChildren()

Commits
-------

03bce5e50c [PropertyInfo] Add hassers for accessors prefixes
This commit is contained in:
Fabien Potencier 2018-02-07 07:38:04 +01:00
commit 89d1b65037
5 changed files with 17 additions and 5 deletions

View File

@ -34,7 +34,7 @@ class ReflectionExtractor implements PropertyListExtractorInterface, PropertyTyp
/**
* @internal
*/
public static $defaultAccessorPrefixes = array('is', 'can', 'get');
public static $defaultAccessorPrefixes = array('is', 'can', 'get', 'has');
/**
* @internal
@ -178,7 +178,7 @@ class ReflectionExtractor implements PropertyListExtractorInterface, PropertyTyp
return array($this->extractFromReflectionType($reflectionType));
}
if (in_array($prefix, array('is', 'can'))) {
if (in_array($prefix, array('is', 'can', 'has'))) {
return array(new Type(Type::BUILTIN_TYPE_BOOL));
}

View File

@ -88,7 +88,8 @@ class PhpDocExtractorTest extends TestCase
array('d', array(new Type(Type::BUILTIN_TYPE_BOOL)), null, null),
array('e', array(new Type(Type::BUILTIN_TYPE_ARRAY, false, null, true, new Type(Type::BUILTIN_TYPE_INT), new Type(Type::BUILTIN_TYPE_RESOURCE))), null, null),
array('f', array(new Type(Type::BUILTIN_TYPE_ARRAY, false, null, true, new Type(Type::BUILTIN_TYPE_INT), new Type(Type::BUILTIN_TYPE_OBJECT, false, 'DateTime'))), null, null),
array('g', array(new Type(Type::BUILTIN_TYPE_ARRAY, true, null, true)), 'Nullable array.', null),
array('g', array(new Type(Type::BUILTIN_TYPE_BOOL, true)), null, null),
array('array', array(new Type(Type::BUILTIN_TYPE_ARRAY, true, null, true)), 'Nullable array.', null),
array('donotexist', null, null, null),
array('staticGetter', null, null, null),
array('staticSetter', null, null, null),

View File

@ -40,7 +40,7 @@ class ReflectionExtractorTest extends TestCase
'collection',
'B',
'Guid',
'g',
'array',
'emptyVar',
'foo',
'foo2',
@ -56,6 +56,7 @@ class ReflectionExtractorTest extends TestCase
'd',
'e',
'f',
'g',
),
$this->extractor->getProperties('Symfony\Component\PropertyInfo\Tests\Fixtures\Dummy')
);
@ -196,10 +197,12 @@ class ReflectionExtractorTest extends TestCase
array('d', true),
array('e', false),
array('f', false),
array('g', true),
array('Id', true),
array('id', true),
array('Guid', true),
array('guid', false),
array('guid', false),
);
}
@ -226,6 +229,7 @@ class ReflectionExtractorTest extends TestCase
array('d', false),
array('e', true),
array('f', true),
array('g', false),
array('Id', false),
array('Guid', true),
array('guid', false),

View File

@ -66,7 +66,7 @@ class Dummy extends ParentDummy
*
* @var array|null
*/
public $g;
public $array;
/**
* This should not be removed.

View File

@ -75,4 +75,11 @@ class ParentDummy
public function removeF(\DateTime $f)
{
}
/**
* @return bool|null
*/
public function hasG()
{
}
}