1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
<?php
declare(strict_types=1);
namespace LaminasPsalm\EventManager;
use Laminas\EventManager\Event;
use Laminas\EventManager\EventInterface;
use LaminasPsalm\EventManager\Model\CheckEvent;
use LaminasPsalm\EventManager\Model\CheckObject;
class EventChecks
{
/**
* @return array{
* Event,
* EventInterface,
* Event<null, array<empty, empty>>,
* EventInterface<null, array<empty, empty>>,
* }
*/
public function checkEmptyCtorInference(): array
{
$event = new Event();
return [
$event,
$event,
$event,
$event,
];
}
/**
* @return array{
* Event<'target-string', array{foo: 'bar', baz: true}>,
* 'target-string',
* array{foo: 'bar', baz: true},
* }
*/
public function checkCtorInference(): array
{
$event = new Event(null, 'target-string', [
'foo' => 'bar',
'baz' => true,
]);
return [
$event,
$event->getTarget(),
$event->getParams(),
];
}
/**
* Verifies that the psalm-this-out annotations are applied correctly to {@see Event}.
*
* @return Event<CheckObject, array{foo: 'bar'}>
*/
public function checkThisOut(): Event
{
$event = new Event();
$event->setTarget(new CheckObject());
$event->setParams(['foo' => 'bar']);
return $event;
}
/**
* Verifies that the inherited psalm-this-out annotations do not change the class back to one of the inherited
* classes. Note: This assumes child classes have no template variables.
*
* @return array{
* CheckEvent&Event<CheckObject, array{foo: 'bar'}>,
* CheckEvent&EventInterface<CheckObject, array{foo: 'bar'}>,
* Event<CheckObject, array{foo: 'bar'}>,
* CheckObject,
* array{foo: 'bar'},
* }
*/
public function checkThisOutInheritance(): array
{
$event = new CheckEvent();
$event->setTarget(new CheckObject());
$event->setParams(['foo' => 'bar']);
return [
$event,
$event,
$event,
$event->getTarget(),
$event->getParams(),
];
}
}
|