Make our event base class independent of Symfony and follow PSR

Symfony is migrating towards a pure PSR event dispatcher, hence their
event class is POPO that implements the PSR stoppable event interface.
Since we can do that ourself and this change doesn't come with any API
changes (breakage), it's easy for us to become independent of Symfony
but also stay PSR-compliant at the same step.

Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
This commit is contained in:
Christoph Wurst 2021-02-10 09:13:02 +01:00
parent d42f9e65a2
commit 0a28440bf6
No known key found for this signature in database
GPG Key ID: CC42AC2A7F0E56D8
2 changed files with 36 additions and 3 deletions

@ -1 +1 @@
Subproject commit 90a8336c3b51a3be5869569ef8e84949a1e67608 Subproject commit 4466d782fafe2b53f3839156d10be0d3eacb47d6

View File

@ -26,7 +26,7 @@ declare(strict_types=1);
namespace OCP\EventDispatcher; namespace OCP\EventDispatcher;
use Symfony\Contracts\EventDispatcher\Event as SymfonyEvent; use Psr\EventDispatcher\StoppableEventInterface;
/** /**
* Base event class for the event dispatcher service * Base event class for the event dispatcher service
@ -34,9 +34,21 @@ use Symfony\Contracts\EventDispatcher\Event as SymfonyEvent;
* Typically this class isn't instantiated directly but sub classed for specific * Typically this class isn't instantiated directly but sub classed for specific
* event types * event types
* *
* This class extended \Symfony\Contracts\EventDispatcher\Event until 21.0, since
* 22.0.0 this class directly implements the PSR StoppableEventInterface and no
* longer relies on Symfony. This transition does not come with any changes in API,
* the class has the same methods and behavior before and after this change.
*
* @since 17.0.0 * @since 17.0.0
*/ */
class Event extends SymfonyEvent { class Event implements StoppableEventInterface {
/**
* @var bool
*
* @since 22.0.0
*/
private $propagationStopped = false;
/** /**
* Compatibility constructor * Compatibility constructor
@ -51,4 +63,25 @@ class Event extends SymfonyEvent {
*/ */
public function __construct() { public function __construct() {
} }
/**
* Stops the propagation of the event to further event listeners
*
* @return void
*
* @since 22.0.0
*/
public function stopPropagation(): void {
$this->propagationStopped = true;
}
/**
* {@inheritDoc}
*
* @since 22.0.0
* @see \Psr\EventDispatcher\StoppableEventInterface
*/
public function isPropagationStopped(): bool {
return $this->propagationStopped;
}
} }