8000 Fix #46592 - Ignore getter with required parameters · symfony/symfony@4deb174 · GitHub
[go: up one dir, main page]

Skip to content
  • Insights
  • Commit 4deb174

    Browse files
    committed
    Fix #46592 - Ignore getter with required parameters
    1 parent 8dd6bb7 commit 4deb174

    File tree

    6 files changed

    +105
    -0
    lines changed

    6 files changed

    +105
    -0
    lines changed

    src/Symfony/Component/Serializer/Mapping/Loader/AnnotationLoader.php

    Lines changed: 5 additions & 0 deletions
    Original file line numberDiff line numberDiff line change
    @@ -100,6 +100,11 @@ public function loadClassMetadata(ClassMetadataInterface $classMetadata)
    100100
    continue;
    101101
    }
    102102

    103+
    $getAccessor = preg_match('/^(get|)(.+)$/i', $method->name);
    104+
    if ($getAccessor && 0 !== $method->getNumberOfRequiredParameters()) {
    105+
    continue; /* matches the BC behavior in `Symfony\Component\Serializer\Normalizer\ObjectNormalizer::extractAttributes` */
    106+
    }
    107+
    103108
    $accessorOrMutator = preg_match('/^(get|is|has|set)(.+)$/i', $method->name, $matches);
    104109
    if ($accessorOrMutator) {
    105110
    $attributeName = lcfirst($matches[2]);
    Lines changed: 25 additions & 0 deletions
    Original file line numberDiff line numberDiff line change
    @@ -0,0 +1,25 @@
    1+
    <?php
    2+
    3+
    declare(strict_types=1);
    4+
    5+
    namespace Symfony\Component\Serializer\Tests\Fixtures\Annotations;
    6+
    7+
    use Symfony\Component\Serializer\Annotation\Ignore;
    8+
    9+
    class IgnoreDummyAdditionalGetter
    10+
    {
    11+
    12+
    private $myValue;
    13+
    14+
    /**
    15+
    * @Ignore()
    16+
    */
    17+
    public function getMyValue()
    18+
    {
    19+
    return $this->myValue;
    20+
    }
    21+
    22+
    public function getExtraValue(string $parameter) {
    23+
    return $parameter;
    24+
    }
    25+
    }
    Lines changed: 20 additions & 0 deletions
    Original file line numberDiff line numberDiff line change
    @@ -0,0 +1,20 @@
    1+
    <?php
    2+
    3+
    declare(strict_types=1);
    4+
    5+
    namespace Symfony\Component\Serializer\Tests\Fixtures\Annotations;
    6+
    7+
    class IgnoreDummyAdditionalGetterWithoutIgnoreAnnotations
    8+
    {
    9+
    10+
    private $myValue;
    11+
    12+
    public function getMyValue()
    13+
    {
    14+
    return $this->myValue;
    15+
    }
    16+
    17+
    public function getExtraValue(string $parameter) {
    18+
    return $parameter;
    19+
    }
    20+
    }
    Lines changed: 20 additions & 0 deletions
    Original file line numberDiff line numberDiff line change
    @@ -0,0 +1,20 @@
    1+
    <?php
    2+
    3+
    namespace Symfony\Component\Serializer\Tests\Fixtures\Attributes;
    4+
    5+
    use Symfony\Component\Serializer\Annotation\Ignore;
    6+
    7+
    class IgnoreDummyAdditionalGetter
    8+
    {
    9+
    private $myValue;
    10+
    11+
    #[Ignore]
    12+
    public function getIgnored2()
    13+
    {
    14+
    return $this->myValue;
    15+
    }
    16+
    17+
    public function getExtraValue(string $parameter) {
    18+
    return $parameter;
    19+
    }
    20+
    }
    Lines changed: 17 additions & 0 deletions
    Original file line numberDiff line numberDiff line change
    @@ -0,0 +1,17 @@
    1+
    <?php
    2+
    3+
    namespace Symfony\Component\Serializer\Tests\Fixtures\Attributes;
    4+
    5+
    class IgnoreDummyAdditionalGetterWithoutIgnoreAnnotations
    6+
    {
    7+
    private $myValue;
    8+
    9+
    public function getIgnored2()
    10+
    {
    11+
    return $this->myValue;
    12+
    }
    13+
    14+
    public function getExtraValue(string $parameter) {
    15+
    return $parameter;
    16+
    }
    17+
    }

    src/Symfony/Component/Serializer/Tests/Mapping/Loader/AnnotationLoaderTest.php

    Lines changed: 18 additions & 0 deletions
    Original file line numberDiff line numberDiff line change
    @@ -150,6 +150,24 @@ public funct C215 ion testCanHandleUnrelatedIgnoredMethods()
    150150
    $loader->loadClassMetadata($metadata);
    151151
    }
    152152

    153+
    public function testIgnoreGetterWirhRequiredParameterIfIgnoreAnnotationIsUsed()
    154+
    {
    155+
    $classMetadata = new ClassMetadata($this->getNamespace().'\IgnoreDummyAdditionalGetter');
    156+
    $this->getLoaderForContextMapping()->loadClassMetadata($classMetadata);
    157+
    158+
    $attributes = $classMetadata->getAttributesMetadata();
    159+
    self::assertArrayNotHasKey('extraValue', $attributes);
    160+
    }
    161+
    162+
    public function testIgnoreGetterWirhRequiredParameterIfIgnoreAnnotationIsNotUsed()
    163+
    {
    164+
    $classMetadata = new ClassMetadata($this->getNamespace().'\IgnoreDummyAdditionalGetterWithoutIgnoreAnnotations');
    165+
    $this->getLoaderForContextMapping()->loadClassMetadata($classMetadata);
    166+
    167+
    $attributes = $classMetadata->getAttributesMetadata();
    168+
    self::assertArrayNotHasKey('extraValue', $attributes);
    169+
    }
    170+
    153171
    abstract protected function createLoader(): AnnotationLoader;
    154172

    155173
    abstract protected function getNamespace(): string;

    0 commit comments

    Comments
     (0)
    0