Skip to content

Commit

Permalink
Add @param-out for PropertyAccessor
Browse files Browse the repository at this point in the history
* Add param out for propertyAccessor

* Fix stub
  • Loading branch information
VincentLanglet committed Mar 16, 2024
1 parent d8a0bc0 commit a32bc86
Show file tree
Hide file tree
Showing 10 changed files with 79 additions and 1 deletion.
2 changes: 1 addition & 1 deletion composer.json
Expand Up @@ -15,7 +15,7 @@
"require": {
"php": "^7.2 || ^8.0",
"ext-simplexml": "*",
"phpstan/phpstan": "^1.10.36"
"phpstan/phpstan": "^1.10.62"
},
"conflict": {
"symfony/framework-bundle": "<3.0"
Expand Down
6 changes: 6 additions & 0 deletions extension.neon
Expand Up @@ -66,6 +66,12 @@ parameters:
- stubs/Symfony/Component/OptionsResolver/Exception/InvalidOptionsException.stub
- stubs/Symfony/Component/OptionsResolver/Options.stub
- stubs/Symfony/Component/Process/Process.stub
- stubs/Symfony/Component/PropertyAccess/Exception/AccessException.stub
- stubs/Symfony/Component/PropertyAccess/Exception/ExceptionInterface.stub
- stubs/Symfony/Component/PropertyAccess/Exception/InvalidArgumentException.stub
- stubs/Symfony/Component/PropertyAccess/Exception/RuntimeException.stub
- stubs/Symfony/Component/PropertyAccess/Exception/UnexpectedTypeException.stub
- stubs/Symfony/Component/PropertyAccess/PropertyAccessorInterface.stub
- stubs/Symfony/Component/PropertyAccess/PropertyPathInterface.stub
- stubs/Symfony/Component/Security/Acl/Model/AclInterface.stub
- stubs/Symfony/Component/Security/Acl/Model/EntryInterface.stub
Expand Down
@@ -0,0 +1,7 @@
<?php

namespace Symfony\Component\PropertyAccess\Exception;

class AccessException extends RuntimeException
{
}
@@ -0,0 +1,7 @@
<?php

namespace Symfony\Component\PropertyAccess\Exception;

interface ExceptionInterface extends \Throwable
{
}
@@ -0,0 +1,7 @@
<?php

namespace Symfony\Component\PropertyAccess\Exception;

class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface
{
}
@@ -0,0 +1,7 @@
<?php

namespace Symfony\Component\PropertyAccess\Exception;

class RuntimeException extends \RuntimeException implements ExceptionInterface
{
}
@@ -0,0 +1,7 @@
<?php

namespace Symfony\Component\PropertyAccess\Exception;

class UnexpectedTypeException extends RuntimeException
{
}
@@ -0,0 +1,23 @@
<?php

namespace Symfony\Component\PropertyAccess;

interface PropertyAccessorInterface
{

/**
* @phpstan-template T of object|array<mixed>
* @phpstan-param T &$objectOrArray
* @phpstan-param-out ($objectOrArray is object ? T : array<mixed>) $objectOrArray
* @phpstan-param string|PropertyPathInterface $propertyPath
* @phpstan-param mixed $value
*
* @return void
*
* @throws Exception\InvalidArgumentException If the property path is invalid
* @throws Exception\AccessException If a property/index does not exist or is not public
* @throws Exception\UnexpectedTypeException If a value within the path is neither object nor array
*/
public function setValue(&$objectOrArray, $propertyPath, $value);

}
1 change: 1 addition & 0 deletions tests/Type/Symfony/ExtensionTest.php
Expand Up @@ -28,6 +28,7 @@ public function dataFileAsserts(): iterable
yield from $this->gatherAssertTypes(__DIR__ . '/data/ExampleOptionCommand.php');
yield from $this->gatherAssertTypes(__DIR__ . '/data/ExampleOptionLazyCommand.php');
yield from $this->gatherAssertTypes(__DIR__ . '/data/kernel_interface.php');
yield from $this->gatherAssertTypes(__DIR__ . '/data/property_accessor.php');
yield from $this->gatherAssertTypes(__DIR__ . '/data/request_get_content.php');

$ref = new ReflectionMethod(Request::class, 'getSession');
Expand Down
13 changes: 13 additions & 0 deletions tests/Type/Symfony/data/property_accessor.php
@@ -0,0 +1,13 @@
<?php declare(strict_types = 1);

use function PHPStan\Testing\assertType;

$propertyAccessor = new \Symfony\Component\PropertyAccess\PropertyAccessor();

$array = [1 => 'ea'];
$propertyAccessor->setValue($array, 'foo', 'bar');
assertType('array', $array);

$object = new \stdClass();
$propertyAccessor->setValue($object, 'foo', 'bar');
assertType('stdClass', $object);

0 comments on commit a32bc86

Please sign in to comment.