diff --git a/core/lib/Drupal/Core/Block/BlockBase.php b/core/lib/Drupal/Core/Block/BlockBase.php
index bcc3954..12b93ea 100644
--- a/core/lib/Drupal/Core/Block/BlockBase.php
+++ b/core/lib/Drupal/Core/Block/BlockBase.php
@@ -10,6 +10,7 @@
 use Drupal\Component\Utility\Unicode;
 use Drupal\Component\Utility\NestedArray;
 use Drupal\Core\Language\LanguageInterface;
+use Drupal\Core\Plugin\PluginFormInterface;
 use Drupal\Core\Plugin\PluginWithFormsInterface;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\Component\Transliteration\TransliterationInterface;
@@ -277,7 +278,9 @@ public function setTransliteration(TransliterationInterface $transliteration) {
    */
   public function getFormClass($operation) {
     if ($this->hasFormClass($operation)) {
-      return $this->getPluginDefinition()['forms'][$operation];
+      $plugin_definition = $this->getPluginDefinition();
+      // Fallback to the class of this plugin if the key is not set.
+      return isset($plugin_definition['forms'][$operation]) ? $plugin_definition['forms'][$operation] : get_class($this);
     }
   }
 
@@ -285,7 +288,7 @@ public function getFormClass($operation) {
    * {@inheritdoc}
    */
   public function hasFormClass($operation) {
-    return isset($this->getPluginDefinition()['forms'][$operation]);
+    return isset($this->getPluginDefinition()['forms'][$operation]) || ($operation == 'configure' && $this instanceof PluginFormInterface);
   }
 
 }
diff --git a/core/lib/Drupal/Core/Plugin/DefaultPluginManager.php b/core/lib/Drupal/Core/Plugin/DefaultPluginManager.php
index fa706a4..62decb2 100644
--- a/core/lib/Drupal/Core/Plugin/DefaultPluginManager.php
+++ b/core/lib/Drupal/Core/Plugin/DefaultPluginManager.php
@@ -247,12 +247,6 @@ public function processDefinition(&$definition, $plugin_id) {
     if (!empty($this->defaults) && is_array($this->defaults)) {
       $definition = NestedArray::mergeDeep($this->defaults, $definition);
     }
-
-    // If no default form is defined and this plugin implements
-    // \Drupal\Core\Plugin\PluginFormInterface, use that for the default form.
-    if (!isset($definition['forms']['configure']) && isset($definition['class']) && is_subclass_of($definition['class'], PluginFormInterface::class)) {
-      $definition['forms']['configure'] = $definition['class'];
-    }
   }
 
   /**
diff --git a/core/modules/system/tests/modules/image_test/src/Plugin/ImageToolkit/Operation/test/ExtendNonInstalledClassOperation.php b/core/modules/system/tests/modules/image_test/src/Plugin/ImageToolkit/Operation/test/ExtendNonInstalledClassOperation.php
new file mode 100644
index 0000000..9e476c6
--- /dev/null
+++ b/core/modules/system/tests/modules/image_test/src/Plugin/ImageToolkit/Operation/test/ExtendNonInstalledClassOperation.php
@@ -0,0 +1,18 @@
+<?php
+
+namespace Drupal\image_test\Plugin\ImageToolkit\Operation\test;
+
+use Drupal\non_installed_module\Plugin\ImageToolkit\Operation\test\OperationBase;
+
+/**
+ * An image toolkit operation extending from a non-installed module class.
+ *
+ * @ImageToolkitOperation(
+ *   id = "test_extend_non_installed_class_operation",
+ *   toolkit = "test",
+ *   operation = "extend_non_installed_class_operation",
+ *   label = @Translation("Extend non installed class operation"),
+ *   description = @Translation("Operation extending from a non-installed module class.")
+ * )
+ */
+class ExtendNonInstalledClassOperation extends OperationBase { }
