diff --git a/core/lib/Drupal/Core/Plugin/DefaultPluginManager.php b/core/lib/Drupal/Core/Plugin/DefaultPluginManager.php
index 62decb2..e3a7e60 100644
--- a/core/lib/Drupal/Core/Plugin/DefaultPluginManager.php
+++ b/core/lib/Drupal/Core/Plugin/DefaultPluginManager.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Core\Plugin;
 
+use Drupal\Component\Plugin\Definition\PluginDefinitionInterface;
 use Drupal\Component\Plugin\Discovery\CachedDiscoveryInterface;
 use Drupal\Core\Cache\CacheableDependencyInterface;
 use Drupal\Core\Cache\CacheBackendInterface;
@@ -239,13 +240,17 @@ public function useCaches($use_caches = FALSE) {
    * method.
    */
   public function processDefinition(&$definition, $plugin_id) {
-    // Only arrays can be operated on.
-    if (!is_array($definition)) {
-      return;
+    // Only array-based definitions can have defaults merged in.
+    if (is_array($definition) && !empty($this->defaults) && is_array($this->defaults)) {
+      $definition = NestedArray::mergeDeep($this->defaults, $definition);
     }
 
-    if (!empty($this->defaults) && is_array($this->defaults)) {
-      $definition = NestedArray::mergeDeep($this->defaults, $definition);
+    // Keep class definitions standard with no leading slash.
+    if ($definition instanceof PluginDefinitionInterface) {
+      $definition->setClass(ltrim($definition->getClass(), '\\'));
+    }
+    elseif (is_array($definition) && isset($definition['class'])) {
+      $definition['class'] = ltrim($definition['class'], '\\');
     }
   }
 
