Issue #1786490 by Berdir, amateescu, damiankloip, Wim Leers, dawehner: Add caching to the state system.

8.0.x
catch 2013-12-12 00:00:09 +00:00
parent 51560a3a04
commit 3e27ebdea5
38 changed files with 307 additions and 115 deletions

View File

@ -137,10 +137,10 @@ services:
factory_class: Drupal\Component\Utility\Settings
factory_method: getSingleton
state:
class: Drupal\Core\KeyValueStore\KeyValueStoreInterface
factory_method: get
factory_service: keyvalue
arguments: [state]
class: Drupal\Core\KeyValueStore\State
arguments: ['@keyvalue']
tags:
- { name: persist }
queue:
class: Drupal\Core\Queue\QueueFactory
arguments: ['@settings']

View File

@ -456,10 +456,8 @@ function install_begin_request(&$install_state) {
$settings['keyvalue_default'] = 'keyvalue.memory';
new Settings($settings);
$container->register('state', 'Drupal\Core\KeyValueStore\KeyValueStoreInterface')
->setFactoryService(new Reference('keyvalue'))
->setFactoryMethod('get')
->addArgument('state');
$container->register('state', 'Drupal\Core\KeyValueStore\State')
->addArgument(new Reference('keyvalue'));
// Register Twig template engine for use during install.
CoreServiceProvider::registerTwig($container);

View File

@ -288,7 +288,7 @@ class Drupal {
* needs to be the same across development, production, etc. environments
* (for example, the system maintenance message) should use \Drupal::config() instead.
*
* @return \Drupal\Core\KeyValueStore\KeyValueStoreInterface
* @return \Drupal\Core\KeyValueStore\StateInterface
*/
public static function state() {
return static::$container->get('state');

View File

@ -6,8 +6,7 @@
namespace Drupal\Core\Asset;
use Drupal\Core\Asset\AssetCollectionOptimizerInterface;
use Drupal\Core\KeyValueStore\KeyValueStoreInterface;
use Drupal\Core\KeyValueStore\StateInterface;
/**
* Optimizes CSS assets.
@ -38,7 +37,7 @@ class CssCollectionOptimizer implements AssetCollectionOptimizerInterface {
/**
* The state key/value store.
*
* @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface
* @var \Drupal\Core\KeyValueStore\StateInterface
*/
protected $state;
@ -51,10 +50,10 @@ class CssCollectionOptimizer implements AssetCollectionOptimizerInterface {
* The optimizer for a single CSS asset.
* @param \Drupal\Core\Asset\AssetDumperInterface
* The dumper for optimized CSS assets.
* @param \Drupal\Core\KeyValueStore\KeyValueStoreInterface
* @param \Drupal\Core\KeyValueStore\StateInterface
* The state key/value store.
*/
public function __construct(AssetCollectionGrouperInterface $grouper, AssetOptimizerInterface $optimizer, AssetDumperInterface $dumper, KeyValueStoreInterface $state) {
public function __construct(AssetCollectionGrouperInterface $grouper, AssetOptimizerInterface $optimizer, AssetDumperInterface $dumper, StateInterface $state) {
$this->grouper = $grouper;
$this->optimizer = $optimizer;
$this->dumper = $dumper;

View File

@ -6,9 +6,8 @@
namespace Drupal\Core\Asset;
use Drupal\Core\Asset\AssetCollectionRendererInterface;
use Drupal\Core\KeyValueStore\KeyValueStoreInterface;
use Drupal\Component\Utility\String;
use Drupal\Core\KeyValueStore\StateInterface;
/**
* Renders CSS assets.
@ -18,17 +17,17 @@ class CssCollectionRenderer implements AssetCollectionRendererInterface {
/**
* The state key/value store.
*
* @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface
* @var \Drupal\Core\KeyValueStore\StateInterface
*/
protected $state;
/**
* Constructs a CssCollectionRenderer.
*
* @param \Drupal\Core\KeyValueStore\KeyValueStoreInterface
* @param \Drupal\Core\KeyValueStore\StateInterface
* The state key/value store.
*/
public function __construct(KeyValueStoreInterface $state) {
public function __construct(StateInterface $state) {
$this->state = $state;
}

View File

@ -6,8 +6,7 @@
namespace Drupal\Core\Asset;
use Drupal\Core\Asset\AssetCollectionOptimizerInterface;
use Drupal\Core\KeyValueStore\KeyValueStoreInterface;
use Drupal\Core\KeyValueStore\StateInterface;
/**
@ -39,7 +38,7 @@ class JsCollectionOptimizer implements AssetCollectionOptimizerInterface {
/**
* The state key/value store.
*
* @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface
* @var \Drupal\Core\KeyValueStore\StateInterface
*/
protected $state;
@ -52,10 +51,10 @@ class JsCollectionOptimizer implements AssetCollectionOptimizerInterface {
* The optimizer for a single JS asset.
* @param \Drupal\Core\Asset\AssetDumperInterface
* The dumper for optimized JS assets.
* @param \Drupal\Core\KeyValueStore\KeyValueStoreInterface
* @param \Drupal\Core\KeyValueStore\StateInterface
* The state key/value store.
*/
public function __construct(AssetCollectionGrouperInterface $grouper, AssetOptimizerInterface $optimizer, AssetDumperInterface $dumper, KeyValueStoreInterface $state) {
public function __construct(AssetCollectionGrouperInterface $grouper, AssetOptimizerInterface $optimizer, AssetDumperInterface $dumper, StateInterface $state) {
$this->grouper = $grouper;
$this->optimizer = $optimizer;
$this->dumper = $dumper;

View File

@ -6,8 +6,7 @@
namespace Drupal\Core\Asset;
use Drupal\Core\Asset\AssetCollectionRendererInterface;
use Drupal\Core\KeyValueStore\KeyValueStoreInterface;
use Drupal\Core\KeyValueStore\StateInterface;
/**
* Renders JavaScript assets.
@ -17,17 +16,17 @@ class JsCollectionRenderer implements AssetCollectionRendererInterface {
/**
* The state key/value store.
*
* @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface
* @var \Drupal\Core\KeyValueStore\StateInterface
*/
protected $state;
/**
* Constructs a CssCollectionRenderer.
*
* @param \Drupal\Core\KeyValueStore\KeyValueStoreInterface
* @param \Drupal\Core\KeyValueStore\StateInterface
* The state key/value store.
*/
public function __construct(KeyValueStoreInterface $state) {
public function __construct(StateInterface $state) {
$this->state = $state;
}

View File

@ -8,7 +8,7 @@
namespace Drupal\Core\Extension;
use Drupal\Core\Cache\CacheBackendInterface;
use Drupal\Core\KeyValueStore\KeyValueStoreInterface;
use Drupal\Core\KeyValueStore\StateInterface;
/**
* Class that manages enabled modules in a Drupal installation.
@ -18,7 +18,7 @@ class CachedModuleHandler extends ModuleHandler implements CachedModuleHandlerIn
/**
* State key/value store.
*
* @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface
* @var \Drupal\Core\KeyValueStore\StateInterface
*/
protected $state;
@ -39,7 +39,7 @@ class CachedModuleHandler extends ModuleHandler implements CachedModuleHandlerIn
/**
* Constructs a new CachedModuleHandler object.
*/
public function __construct(array $module_list = array(), KeyValueStoreInterface $state, CacheBackendInterface $bootstrap_cache) {
public function __construct(array $module_list = array(), StateInterface $state, CacheBackendInterface $bootstrap_cache) {
parent::__construct($module_list);
$this->state = $state;
$this->bootstrapCache = $bootstrap_cache;

View File

@ -0,0 +1,124 @@
<?php
/**
* @file
* Contains Drupal\Core\KeyValueStore\StateInterface.
*/
namespace Drupal\Core\KeyValueStore;
/**
* Provides the state system using a key value store.
*/
class State implements StateInterface {
/**
* The key value store to use.
*
* @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface
*/
protected $keyValueStore;
/**
* Static state cache.
*
* @var array
*/
protected $cache = array();
/**
* Constructs a State object.
*
* @param \Drupal\Core\KeyValueStore\KeyValueFactory $key_value_factory
* The key value store to use.
*/
function __construct(KeyValueFactory $key_value_factory) {
$this->keyValueStore = $key_value_factory->get('state');
}
/**
* {@inheritdoc}
*/
public function get($key, $default = NULL) {
$values = $this->getMultiple(array($key));
return isset($values[$key]) ? $values[$key] : $default;
}
/**
* {@inheritdoc}
*/
public function getMultiple(array $keys) {
$values = array();
$load = array();
foreach ($keys as $key) {
// Check if we have a value in the cache.
if (isset($this->cache[$key])) {
$values[$key] = $this->cache[$key];
}
// Load the value if we don't have an explicit NULL value.
elseif (!array_key_exists($key, $this->cache)) {
$load[] = $key;
}
}
if ($load) {
$loaded_values = $this->keyValueStore->getMultiple($load);
foreach ($load as $key) {
// If we find a value, even one that is NULL, add it to the cache and
// return it.
if (isset($loaded_values[$key]) || array_key_exists($key, $loaded_values)) {
$values[$key] = $loaded_values[$key];
$this->cache[$key] = $loaded_values[$key];
}
else {
$this->cache[$key] = NULL;
}
}
}
return $values;
}
/**
* {@inheritdoc}
*/
public function set($key, $value) {
$this->cache[$key] = $value;
$this->keyValueStore->set($key, $value);
}
/**
* {@inheritdoc}
*/
public function setMultiple(array $data) {
foreach ($data as $key => $value) {
$this->cache[$key] = $value;
}
$this->keyValueStore->setMultiple($data);
}
/**
* {@inheritdoc}
*/
public function delete($key) {
$this->deleteMultiple(array($key));
}
/**
* {@inheritdoc}
*/
public function deleteMultiple(array $keys) {
foreach ($keys as $key) {
unset($this->cache[$key]);
}
$this->keyValueStore->deleteMultiple($keys);
}
/**
* {@inheritdoc}
*/
public function resetCache() {
$this->cache = array();
}
}

View File

@ -0,0 +1,80 @@
<?php
/**
* @file
* Contains Drupal\Core\KeyValueStore\StateInterface.
*/
namespace Drupal\Core\KeyValueStore;
/**
* Defines the interface for the state system.
*/
interface StateInterface {
/**
* Returns the stored value for a given key.
*
* @param string $key
* The key of the data to retrieve.
* @param mixed $default
* The default value to use if the key is not found.
*
* @return mixed
* The stored value, or NULL if no value exists.
*/
public function get($key, $default = NULL);
/**
* Returns the stored key/value pairs for a given set of keys.
*
* @param array $keys
* A list of keys to retrieve.
*
* @return array
* An associative array of items successfully returned, indexed by key.
*/
public function getMultiple(array $keys);
/**
* Saves a value for a given key.
*
* @param string $key
* The key of the data to store.
* @param mixed $value
* The data to store.
*/
public function set($key, $value);
/**
* Saves key/value pairs.
*
* @param array $data
* An associative array of key/value pairs.
*/
public function setMultiple(array $data);
/**
* Deletes an item.
*
* @param string $key
* The item name to delete.
*/
public function delete($key);
/**
* Deletes multiple items.
*
* @param array $keys
* A list of item names to delete.
*/
public function deleteMultiple(array $keys);
/**
* Resets the static cache.
*
* This is mainly used in testing environments.
*/
public function resetCache();
}

View File

@ -9,7 +9,7 @@ namespace Drupal\Core\Language;
use Drupal\Component\Utility\MapArray;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\Core\KeyValueStore\KeyValueStoreInterface;
use Drupal\Core\KeyValueStore\StateInterface;
use Symfony\Component\HttpFoundation\Request;
/**
@ -27,7 +27,7 @@ class LanguageManager {
/**
* The Key/Value Store to use for state.
*
* @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface
* @var \Drupal\Core\KeyValueStore\StateInterface
*/
protected $state = NULL;
@ -65,12 +65,12 @@ class LanguageManager {
/**
* Constructs an LanguageManager object.
*
* @param \Drupal\Core\KeyValueStore\KeyValueStoreInterface $state
* @param \Drupal\Core\KeyValueStore\StateInterface $state
* (optional) The state keyvalue store. Defaults to NULL.
* @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
* (optional) The module handler service. Defaults to NULL.
*/
public function __construct(KeyValueStoreInterface $state = NULL, ModuleHandlerInterface $module_handler = NULL) {
public function __construct(StateInterface $state = NULL, ModuleHandlerInterface $module_handler = NULL) {
$this->state = $state;
$this->moduleHandler = $module_handler;
}

View File

@ -20,13 +20,6 @@ class AliasManager implements AliasManagerInterface {
*/
protected $connection;
/**
* The Key/Value Store to use for state
*
* @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface
*/
protected $state;
/**
* Language manager for retrieving the default langcode when none is specified.
*

View File

@ -11,7 +11,7 @@ use Drupal\Core\Cache\CacheBackendInterface;
use Drupal\Core\Cache\CacheCollector;
use Drupal\Core\Database\Connection;
use Drupal\Core\DestructableInterface;
use Drupal\Core\KeyValueStore\KeyValueStoreInterface;
use Drupal\Core\KeyValueStore\StateInterface;
use Drupal\Core\Lock\LockBackendInterface;
use Drupal\Core\Utility\CacheArray;
@ -23,7 +23,7 @@ class AliasWhitelist extends CacheCollector {
/**
* The Key/Value Store to use for state.
*
* @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface
* @var \Drupal\Core\KeyValueStore\StateInterface
*/
protected $state;
@ -43,12 +43,12 @@ class AliasWhitelist extends CacheCollector {
* The cache backend.
* @param \Drupal\Core\Lock\LockBackendInterface $lock
* The lock backend.
* @param \Drupal\Core\KeyValueStore\KeyValueStoreInterface $state
* @param \Drupal\Core\KeyValueStore\StateInterface $state
* The state keyvalue store.
* @param \Drupal\Core\Database\Connection $connection
* The database connection.
*/
public function __construct($cid, CacheBackendInterface $cache, LockBackendInterface $lock, KeyValueStoreInterface $state, Connection $connection) {
public function __construct($cid, CacheBackendInterface $cache, LockBackendInterface $lock, StateInterface $state, Connection $connection) {
parent::__construct($cid, $cache, $lock);
$this->state = $state;
$this->connection = $connection;

View File

@ -7,7 +7,7 @@
namespace Drupal\Core;
use Drupal\Core\KeyValueStore\KeyValueStoreInterface;
use Drupal\Core\KeyValueStore\StateInterface;
use Drupal\Component\Utility\Crypt;
/**
@ -18,17 +18,17 @@ class PrivateKey {
/**
* The state service.
*
* @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface
* @var \Drupal\Core\KeyValueStore\StateInterface
*/
protected $state;
/**
* Constructs the token generator.
*
* @param \Drupal\Core\KeyValueStore\KeyValueStoreInterface $state
* @param \Drupal\Core\KeyValueStore\StateInterface $state
* The state service.
*/
function __construct(KeyValueStoreInterface $state) {
function __construct(StateInterface $state) {
$this->state = $state;
}

View File

@ -16,7 +16,7 @@ use Drupal\Core\Config\ConfigFactory;
use Drupal\Component\Uuid\UuidInterface;
use Drupal\Core\Config\StorageInterface;
use Drupal\Core\Extension\ModuleHandler;
use Drupal\Core\KeyValueStore\KeyValueStoreInterface;
use Drupal\Core\KeyValueStore\StateInterface;
/**
* Controller class for field instances.
@ -45,7 +45,7 @@ class FieldInstanceStorageController extends ConfigStorageController {
/**
* The state keyvalue collection.
*
* @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface
* @var \Drupal\Core\KeyValueStore\StateInterface
*/
protected $state;
@ -68,10 +68,10 @@ class FieldInstanceStorageController extends ConfigStorageController {
* The entity manager.
* @param \Drupal\Core\Extension\ModuleHandler $module_handler
* The module handler.
* @param \Drupal\Core\KeyValueStore\KeyValueStoreInterface $state
* @param \Drupal\Core\KeyValueStore\StateInterface $state
* The state key value store.
*/
public function __construct($entity_type, array $entity_info, ConfigFactory $config_factory, StorageInterface $config_storage, QueryFactory $entity_query_factory, UuidInterface $uuid_service, EntityManagerInterface $entity_manager, ModuleHandler $module_handler, KeyValueStoreInterface $state) {
public function __construct($entity_type, array $entity_info, ConfigFactory $config_factory, StorageInterface $config_storage, QueryFactory $entity_query_factory, UuidInterface $uuid_service, EntityManagerInterface $entity_manager, ModuleHandler $module_handler, StateInterface $state) {
parent::__construct($entity_type, $entity_info, $config_factory, $config_storage, $entity_query_factory, $uuid_service);
$this->entityManager = $entity_manager;
$this->moduleHandler = $module_handler;

View File

@ -16,7 +16,7 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\Config\ConfigFactory;
use Drupal\Core\Config\StorageInterface;
use Drupal\Core\Extension\ModuleHandler;
use Drupal\Core\KeyValueStore\KeyValueStoreInterface;
use Drupal\Core\KeyValueStore\StateInterface;
/**
* Controller class for fields.
@ -40,7 +40,7 @@ class FieldStorageController extends ConfigStorageController {
/**
* The state keyvalue collection.
*
* @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface
* @var \Drupal\Core\KeyValueStore\StateInterface
*/
protected $state;
@ -63,10 +63,10 @@ class FieldStorageController extends ConfigStorageController {
* The entity manager.
* @param \Drupal\Core\Extension\ModuleHandler $module_handler
* The module handler.
* @param \Drupal\Core\KeyValueStore\KeyValueStoreInterface $state
* @param \Drupal\Core\KeyValueStore\StateInterface $state
* The state key value store.
*/
public function __construct($entity_type, array $entity_info, ConfigFactory $config_factory, StorageInterface $config_storage, QueryFactory $entity_query_factory, UuidInterface $uuid_service, EntityManagerInterface $entity_manager, ModuleHandler $module_handler, KeyValueStoreInterface $state) {
public function __construct($entity_type, array $entity_info, ConfigFactory $config_factory, StorageInterface $config_storage, QueryFactory $entity_query_factory, UuidInterface $uuid_service, EntityManagerInterface $entity_manager, ModuleHandler $module_handler, StateInterface $state) {
parent::__construct($entity_type, $entity_info, $config_factory, $config_storage, $entity_query_factory, $uuid_service);
$this->entityManager = $entity_manager;
$this->moduleHandler = $module_handler;

View File

@ -38,6 +38,8 @@ abstract class FileManagedTestBase extends FileTestBase {
* 'insert', etc.
*/
function assertFileHooksCalled($expected) {
\Drupal::state()->resetCache();
// Determine which hooks were called.
$actual = array_keys(array_filter(file_test_get_all_calls()));

View File

@ -26,7 +26,7 @@ class LanguageFallbackTest extends DrupalUnitTestBase {
/**
* The state storage service.
*
* @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface
* @var \Drupal\Core\KeyValueStore\StateInterface
*/
protected $state;

View File

@ -11,7 +11,7 @@ use Drupal\Core\Form\FormBase;
use Drupal\Core\Language\Language;
use Drupal\Core\Language\LanguageManager;
use Drupal\locale\StringStorageInterface;
use Drupal\Core\KeyValueStore\KeyValueStoreInterface;
use Drupal\Core\KeyValueStore\StateInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
@ -31,7 +31,7 @@ abstract class TranslateFormBase extends FormBase {
/**
* The state store.
*
* @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface
* @var \Drupal\Core\KeyValueStore\StateInterface
*/
protected $state;
@ -54,12 +54,12 @@ abstract class TranslateFormBase extends FormBase {
*
* @param \Drupal\locale\StringStorageInterface $locale_storage
* The locale storage.
* @param \Drupal\Core\KeyValueStore\KeyValueStoreInterface $state
* @param \Drupal\Core\KeyValueStore\StateInterface $state
* The state service.
* @param \Drupal\Core\Language\LanguageManager $language_manager
* The language manager.
*/
public function __construct(StringStorageInterface $locale_storage, KeyValueStoreInterface $state, LanguageManager $language_manager) {
public function __construct(StringStorageInterface $locale_storage, StateInterface $state, LanguageManager $language_manager) {
$this->localeStorage = $locale_storage;
$this->state = $state;
$this->languageManager = $language_manager;

View File

@ -14,7 +14,7 @@ use Drupal\Core\Database\Query\SelectExtender;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Entity\EntityManagerInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\Core\KeyValueStore\KeyValueStoreInterface;
use Drupal\Core\KeyValueStore\StateInterface;
use Drupal\Core\Language\Language;
use Drupal\Core\Plugin\PluginFormInterface;
use Drupal\Core\Session\AccountInterface;
@ -68,7 +68,7 @@ class NodeSearch extends SearchPluginBase implements AccessibleInterface, Search
/**
* The Drupal state object used to set 'node.cron_last'.
*
* @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface
* @var \Drupal\Core\KeyValueStore\StateInterface
*/
protected $state;
@ -111,7 +111,7 @@ class NodeSearch extends SearchPluginBase implements AccessibleInterface, Search
$container->get('entity.manager'),
$container->get('module_handler'),
$container->get('config.factory')->get('search.settings'),
$container->get('keyvalue')->get('state'),
$container->get('state'),
$container->get('current_user')
);
}
@ -133,12 +133,12 @@ class NodeSearch extends SearchPluginBase implements AccessibleInterface, Search
* A module manager object.
* @param \Drupal\Core\Config\Config $search_settings
* A config object for 'search.settings'.
* @param \Drupal\Core\KeyValueStore\KeyValueStoreInterface $state
* @param \Drupal\Core\KeyValueStore\StateInterface $state
* The Drupal state object used to set 'node.cron_last'.
* @param \Drupal\Core\Session\AccountInterface $account
* The $account object to use for checking for access to advanced search.
*/
public function __construct(array $configuration, $plugin_id, array $plugin_definition, Connection $database, EntityManagerInterface $entity_manager, ModuleHandlerInterface $module_handler, Config $search_settings, KeyValueStoreInterface $state, AccountInterface $account = NULL) {
public function __construct(array $configuration, $plugin_id, array $plugin_definition, Connection $database, EntityManagerInterface $entity_manager, ModuleHandlerInterface $module_handler, Config $search_settings, StateInterface $state, AccountInterface $account = NULL) {
$this->database = $database;
$this->entityManager = $entity_manager;
$this->moduleHandler = $module_handler;

View File

@ -8,7 +8,7 @@
namespace Drupal\rest\Plugin\views\display;
use Drupal\Core\KeyValueStore\KeyValueStoreInterface;
use Drupal\Core\KeyValueStore\StateInterface;
use Drupal\Core\Routing\RouteProviderInterface;
use Drupal\views\Annotation\ViewsDisplay;
use Drupal\Core\Annotation\Translation;
@ -99,14 +99,14 @@ class RestExport extends PathPluginBase {
* The plugin implementation definition.
* @param \Drupal\Core\Routing\RouteProviderInterface $route_provider
* The route provider
* @param \Drupal\Core\KeyValueStore\KeyValueStoreInterface $state
* @param \Drupal\Core\KeyValueStore\StateInterface $state
* The state key value store.
* @param \Drupal\Core\ContentNegotiation $content_negotiation
* The content negotiation library.
* @param \Symfony\Component\HttpFoundation\Request $request
* The request object.
*/
public function __construct(array $configuration, $plugin_id, array $plugin_definition, RouteProviderInterface $route_provider, KeyValueStoreInterface $state, ContentNegotiation $content_negotiation, Request $request) {
public function __construct(array $configuration, $plugin_id, array $plugin_definition, RouteProviderInterface $route_provider, StateInterface $state, ContentNegotiation $content_negotiation, Request $request) {
parent::__construct($configuration, $plugin_id, $plugin_definition, $route_provider, $state);
$this->contentNegotiation = $content_negotiation;
$this->request = $request;

View File

@ -82,7 +82,7 @@ class CollectRoutesTest extends UnitTestCase {
->getMock();
$container->set('router.route_provider', $route_provider);
$state = $this->getMock('\Drupal\Core\KeyValueStore\KeyValueStoreInterface');
$state = $this->getMock('\Drupal\Core\KeyValueStore\StateInterface');
$container->set('state', $state);
$style_manager = $this->getMockBuilder('\Drupal\views\Plugin\ViewsPluginManager')

View File

@ -10,7 +10,7 @@ use Drupal\Core\Cache\Cache;
use Drupal\Core\Config\ConfigFactory;
use Drupal\Core\Config\Context\ContextInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\Core\KeyValueStore\KeyValueStoreInterface;
use Drupal\Core\KeyValueStore\StateInterface;
use Drupal\Core\Plugin\PluginFormInterface;
use Drupal\search\SearchPluginManager;
use Drupal\Core\Form\ConfigFormBase;
@ -45,7 +45,7 @@ class SearchSettingsForm extends ConfigFormBase {
/**
* The Drupal state storage service.
*
* @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface
* @var \Drupal\Core\KeyValueStore\StateInterface
*/
protected $state;
@ -60,10 +60,10 @@ class SearchSettingsForm extends ConfigFormBase {
* The manager for search plugins.
* @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
* The module handler
* @param \Drupal\Core\KeyValueStore\KeyValueStoreInterface $state
* @param \Drupal\Core\KeyValueStore\StateInterface $state
* The state key/value store interface, gives access to state based config settings.
*/
public function __construct(ConfigFactory $config_factory, ContextInterface $context, SearchPluginManager $manager, ModuleHandlerInterface $module_handler, KeyValueStoreInterface $state) {
public function __construct(ConfigFactory $config_factory, ContextInterface $context, SearchPluginManager $manager, ModuleHandlerInterface $module_handler, StateInterface $state) {
parent::__construct($config_factory, $context);
$this->searchSettings = $config_factory->get('search.settings');
$this->searchPluginManager = $manager;

View File

@ -175,10 +175,8 @@ abstract class DrupalUnitTestBase extends UnitTestBase {
->addArgument(new Reference('service_container'))
->addArgument(new Reference('settings'));
$container->register('state', 'Drupal\Core\KeyValueStore\KeyValueStoreInterface')
->setFactoryService(new Reference('keyvalue'))
->setFactoryMethod('get')
->addArgument('state');
$container->register('state', 'Drupal\Core\KeyValueStore\State')
->addArgument(new Reference('keyvalue'));
}
if ($container->hasDefinition('path_processor_alias')) {

View File

@ -1008,6 +1008,7 @@ abstract class WebTestBase extends TestBase {
// Clear the tag cache.
drupal_static_reset('Drupal\Core\Cache\CacheBackendInterface::tagCache');
\Drupal::service('config.factory')->reset();
\Drupal::state()->resetCache();
}
/**

View File

@ -9,7 +9,7 @@ namespace Drupal\system\Form;
use Drupal\Core\Config\ConfigFactory;
use Drupal\Core\Config\Context\ContextInterface;
use Drupal\Core\KeyValueStore\KeyValueStoreInterface;
use Drupal\Core\KeyValueStore\StateInterface;
use Drupal\Core\Form\ConfigFormBase;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
@ -22,7 +22,7 @@ class CronForm extends ConfigFormBase {
/**
* Stores the state storage service.
*
* @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface
* @var \Drupal\Core\KeyValueStore\StateInterface
*/
protected $state;
@ -33,10 +33,10 @@ class CronForm extends ConfigFormBase {
* The factory for configuration objects.
* @param \Drupal\Core\Config\Context\ContextInterface $context
* The configuration context used for this configuration object.
* @param \Drupal\Core\KeyValueStore\KeyValueStoreInterface $state
* @param \Drupal\Core\KeyValueStore\StateInterface $state
* The state key value store.
*/
public function __construct(ConfigFactory $config_factory, ContextInterface $context, KeyValueStoreInterface $state) {
public function __construct(ConfigFactory $config_factory, ContextInterface $context, StateInterface $state) {
parent::__construct($config_factory, $context);
$this->state = $state;
}

View File

@ -9,7 +9,7 @@ namespace Drupal\system\Form;
use Drupal\Core\Config\ConfigFactory;
use Drupal\Core\Config\Context\ContextInterface;
use Drupal\Core\KeyValueStore\KeyValueStoreInterface;
use Drupal\Core\KeyValueStore\StateInterface;
use Drupal\Core\Form\ConfigFormBase;
use Symfony\Component\DependencyInjection\ContainerInterface;
@ -21,7 +21,7 @@ class SiteMaintenanceModeForm extends ConfigFormBase {
/**
* The state keyvalue collection.
*
* @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface
* @var \Drupal\Core\KeyValueStore\StateInterface
*/
protected $state;
@ -32,10 +32,10 @@ class SiteMaintenanceModeForm extends ConfigFormBase {
* The factory for configuration objects.
* @param \Drupal\Core\Config\Context\ContextInterface $context
* The configuration context to use.
* @param \Drupal\Core\KeyValueStore\KeyValueStoreInterface $state
* @param \Drupal\Core\KeyValueStore\StateInterface $state
* The state keyvalue collection to use.
*/
public function __construct(ConfigFactory $config_factory, ContextInterface $context, KeyValueStoreInterface $state) {
public function __construct(ConfigFactory $config_factory, ContextInterface $context, StateInterface $state) {
parent::__construct($config_factory, $context);
$this->state = $state;
}

View File

@ -32,7 +32,7 @@ abstract class EntityUnitTestBase extends DrupalUnitTestBase {
/**
* The state service.
*
* @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface
* @var \Drupal\Core\KeyValueStore\StateInterface
*/
protected $state;

View File

@ -7,7 +7,7 @@
namespace Drupal\service_provider_test;
use Drupal\Core\KeyValueStore\KeyValueStoreInterface;
use Drupal\Core\KeyValueStore\StateInterface;
use Drupal\Core\DestructableInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
@ -18,17 +18,17 @@ class TestClass implements EventSubscriberInterface, DestructableInterface {
/**
* The state keyvalue collection.
*
* @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface
* @var \Drupal\Core\KeyValueStore\StateInterface
*/
protected $state;
/**
* Constructor.
*
* @param \Drupal\Core\KeyValueStore\KeyValueStoreInterface $state
* @param \Drupal\Core\KeyValueStore\StateInterface $state
* The state key value store.
*/
public function __construct(KeyValueStoreInterface $state) {
public function __construct(StateInterface $state) {
$this->state = $state;
}

View File

@ -10,7 +10,7 @@ namespace Drupal\views\EventSubscriber;
use Drupal\Component\Utility\MapArray;
use Drupal\Core\DestructableInterface;
use Drupal\Core\Entity\EntityManagerInterface;
use Drupal\Core\KeyValueStore\KeyValueStoreInterface;
use Drupal\Core\KeyValueStore\StateInterface;
use Drupal\Core\Routing\RouteSubscriberBase;
use Drupal\views\Plugin\views\display\DisplayRouterInterface;
use Drupal\views\ViewExecutable;
@ -44,7 +44,7 @@ class RouteSubscriber extends RouteSubscriberBase implements DestructableInterfa
/**
* The state key value store.
*
* @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface
* @var \Drupal\Core\KeyValueStore\StateInterface
*/
protected $state;
@ -60,10 +60,10 @@ class RouteSubscriber extends RouteSubscriberBase implements DestructableInterfa
*
* @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
* The entity manager.
* @param \Drupal\Core\KeyValueStore\KeyValueStoreInterface $state
* @param \Drupal\Core\KeyValueStore\StateInterface $state
* The state key value store.
*/
public function __construct(EntityManagerInterface $entity_manager, KeyValueStoreInterface $state) {
public function __construct(EntityManagerInterface $entity_manager, StateInterface $state) {
$this->viewStorageController = $entity_manager->getStorageController('view');
$this->state = $state;
}

View File

@ -7,7 +7,7 @@
namespace Drupal\views\Plugin\Derivative;
use Drupal\Core\KeyValueStore\KeyValueStoreInterface;
use Drupal\Core\KeyValueStore\StateInterface;
use Drupal\Core\Menu\LocalTaskDerivativeBase;
use Drupal\Core\Plugin\Discovery\ContainerDerivativeInterface;
use Drupal\Core\Routing\RouteProviderInterface;
@ -29,7 +29,7 @@ class ViewsLocalTask extends LocalTaskDerivativeBase implements ContainerDerivat
/**
* The state key value store.
*
* @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface
* @var \Drupal\Core\KeyValueStore\StateInterface
*/
protected $state;
@ -41,7 +41,7 @@ class ViewsLocalTask extends LocalTaskDerivativeBase implements ContainerDerivat
* @param \Drupal\Core\KeyValueStore\KeyValueStoreInterface $state
* The state key value store.
*/
public function __construct(RouteProviderInterface $route_provider, KeyValueStoreInterface $state) {
public function __construct(RouteProviderInterface $route_provider, StateInterface $state) {
$this->routeProvider = $route_provider;
$this->state = $state;
}

View File

@ -7,7 +7,7 @@
namespace Drupal\views\Plugin\views\display;
use Drupal\Core\KeyValueStore\KeyValueStoreInterface;
use Drupal\Core\KeyValueStore\StateInterface;
use Drupal\Core\Routing\RouteCompiler;
use Drupal\Core\Routing\RouteProviderInterface;
use Drupal\views\Views;
@ -35,7 +35,7 @@ abstract class PathPluginBase extends DisplayPluginBase implements DisplayRouter
/**
* The state key value store.
*
* @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface
* @var \Drupal\Core\KeyValueStore\StateInterface
*/
protected $state;
@ -50,10 +50,10 @@ abstract class PathPluginBase extends DisplayPluginBase implements DisplayRouter
* The plugin implementation definition.
* @param \Drupal\Core\Routing\RouteProviderInterface $route_provider
* The route provider.
* @param \Drupal\Core\KeyValueStore\KeyValueStoreInterface $state
* @param \Drupal\Core\KeyValueStore\StateInterface $state
* The state key value store.
*/
public function __construct(array $configuration, $plugin_id, array $plugin_definition, RouteProviderInterface $route_provider, KeyValueStoreInterface $state) {
public function __construct(array $configuration, $plugin_id, array $plugin_definition, RouteProviderInterface $route_provider, StateInterface $state) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->routeProvider = $route_provider;

View File

@ -44,7 +44,7 @@ class RouteSubscriberTest extends UnitTestCase {
/**
* The mocked key value storage.
*
* @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface|\PHPUnit_Framework_MockObject_MockObject
* @var \Drupal\Core\KeyValueStore\StateInterface|\PHPUnit_Framework_MockObject_MockObject
*/
protected $state;
@ -68,7 +68,7 @@ class RouteSubscriberTest extends UnitTestCase {
->method('getStorageController')
->with('view')
->will($this->returnValue($this->viewStorageController));
$this->state = $this->getMock('\Drupal\Core\KeyValueStore\KeyValueStoreInterface');
$this->state = $this->getMock('\Drupal\Core\KeyValueStore\StateInterface');
$this->routeSubscriber = new TestRouteSubscriber($this->entityManager, $this->state);
}

View File

@ -55,7 +55,7 @@ class ViewsLocalTaskTest extends UnitTestCase {
protected function setUp() {
$this->routeProvider = $this->getMock('Drupal\Core\Routing\RouteProviderInterface');
$this->state = $this->getMock('Drupal\Core\KeyValueStore\KeyValueStoreInterface');
$this->state = $this->getMock('Drupal\Core\KeyValueStore\StateInterface');
$this->localTaskDerivative = new TestViewsLocalTask($this->routeProvider, $this->state);
}

View File

@ -43,7 +43,7 @@ class PathPluginBaseTest extends UnitTestCase {
/**
* The mocked key value storage.
*
* @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface|\PHPUnit_Framework_MockObject_MockObject
* @var \Drupal\Core\KeyValueStore\StateInterface|\PHPUnit_Framework_MockObject_MockObject
*/
protected $state;
@ -62,7 +62,7 @@ class PathPluginBaseTest extends UnitTestCase {
parent::setUp();
$this->routeProvider = $this->getMock('Drupal\Core\Routing\RouteProviderInterface');
$this->state = $this->getMock('\Drupal\Core\KeyValueStore\KeyValueStoreInterface');
$this->state = $this->getMock('\Drupal\Core\KeyValueStore\StateInterface');
$this->pathPlugin = $this->getMockBuilder('Drupal\views\Plugin\views\display\PathPluginBase')
->setConstructorArgs(array(array(), 'path_base', array(), $this->routeProvider, $this->state))
->setMethods(NULL)

View File

@ -77,7 +77,7 @@ class ViewListControllerTest extends UnitTestCase {
array(array(), 'default', $display_manager->getDefinition('default'))
);
$route_provider = $this->getMock('Drupal\Core\Routing\RouteProviderInterface');
$state = $this->getMock('\Drupal\Core\KeyValueStore\KeyValueStoreInterface');
$state = $this->getMock('\Drupal\Core\KeyValueStore\StateInterface');
$page_display = $this->getMock('Drupal\views\Plugin\views\display\Page',
array('initDisplay', 'getPath'),
array(array(), 'default', $display_manager->getDefinition('page'), $route_provider, $state)

View File

@ -66,7 +66,7 @@ class CssCollectionRendererUnitTest extends UnitTestCase {
/**
* The state mock class.
*
* @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface|\PHPUnit_Framework_MockObject_MockObject
* @var \Drupal\Core\KeyValueStore\StateInterface|\PHPUnit_Framework_MockObject_MockObject
*/
protected $state;
@ -81,7 +81,7 @@ class CssCollectionRendererUnitTest extends UnitTestCase {
function setUp() {
parent::setUp();
$this->state = $this->getMock('Drupal\Core\KeyValueStore\KeyValueStoreInterface');
$this->state = $this->getMock('Drupal\Core\KeyValueStore\StateInterface');
$this->renderer = new CssCollectionRenderer($this->state);
$this->file_css_group = array(

View File

@ -19,7 +19,7 @@ class PrivateKeyTest extends UnitTestCase {
/**
* The state mock class.
*
* @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface|\PHPUnit_Framework_MockObject_MockObject
* @var \Drupal\Core\KeyValueStore\StateInterface|\PHPUnit_Framework_MockObject_MockObject
*/
protected $state;
@ -52,7 +52,7 @@ class PrivateKeyTest extends UnitTestCase {
parent::setUp();
$this->key = Crypt::randomStringHashed(55);
$this->state = $this->getMock('Drupal\Core\KeyValueStore\KeyValueStoreInterface');
$this->state = $this->getMock('Drupal\Core\KeyValueStore\StateInterface');
$this->privateKey = new PrivateKey($this->state);
}