From e5b70636c9387deedcdaaae7cf7decb7cdaa6702 Mon Sep 17 00:00:00 2001 From: Nathaniel Catchpole Date: Tue, 18 Dec 2018 09:39:51 +0000 Subject: [PATCH] Issue #3020165 by alexpott: Dependency objects can be optimised for serialisation --- core/lib/Drupal/Core/Extension/Dependency.php | 10 ++++++++++ .../Tests/Core/Extension/DependencyTest.php | 16 ++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/core/lib/Drupal/Core/Extension/Dependency.php b/core/lib/Drupal/Core/Extension/Dependency.php index 0c745b593d2..c9e386805aa 100644 --- a/core/lib/Drupal/Core/Extension/Dependency.php +++ b/core/lib/Drupal/Core/Extension/Dependency.php @@ -190,4 +190,14 @@ class Dependency implements \ArrayAccess { return new static($name, $project, $version_string); } + /** + * Prevents unnecessary serialization of constraint objects. + * + * @return array + * The properties to seriailize. + */ + public function __sleep() { + return ['name', 'project', 'constraintString']; + } + } diff --git a/core/tests/Drupal/Tests/Core/Extension/DependencyTest.php b/core/tests/Drupal/Tests/Core/Extension/DependencyTest.php index 374a16afc6a..d1d403f04d8 100644 --- a/core/tests/Drupal/Tests/Core/Extension/DependencyTest.php +++ b/core/tests/Drupal/Tests/Core/Extension/DependencyTest.php @@ -2,6 +2,7 @@ namespace Drupal\Tests\Core\Extension; +use Drupal\Component\Version\Constraint; use Drupal\Core\Extension\Dependency; use Drupal\Tests\UnitTestCase; @@ -100,4 +101,19 @@ class DependencyTest extends UnitTestCase { $dependency['name'] = 'foo'; } + /** + * Ensures that constraint objects are not serialized. + * + * @covers ::__sleep + */ + public function testSerialization() { + $dependency = new Dependency('paragraphs_demo', 'paragraphs', '>8.x-1.1'); + $this->assertTrue($dependency->isCompatible('1.2')); + $this->assertInstanceOf(Constraint::class, $this->getObjectAttribute($dependency, 'constraint')); + $dependency = unserialize(serialize($dependency)); + $this->assertNull($this->getObjectAttribute($dependency, 'constraint')); + $this->assertTrue($dependency->isCompatible('1.2')); + $this->assertInstanceOf(Constraint::class, $this->getObjectAttribute($dependency, 'constraint')); + } + }