/**
  * {@inheritdoc}
  */
 public function createInstance(PluginWithFormsInterface $plugin, $operation, $fallback_operation = NULL)
 {
     if (!$plugin->hasFormClass($operation)) {
         // Use the default form class if no form is specified for this operation.
         if ($fallback_operation && $plugin->hasFormClass($fallback_operation)) {
             $operation = $fallback_operation;
         } else {
             throw new InvalidPluginDefinitionException($plugin->getPluginId(), sprintf('The "%s" plugin did not specify a "%s" form class', $plugin->getPluginId(), $operation));
         }
     }
     $form_class = $plugin->getFormClass($operation);
     // If the form specified is the plugin itself, use it directly.
     if (ltrim(get_class($plugin), '\\') === ltrim($form_class, '\\')) {
         $form_object = $plugin;
     } else {
         $form_object = $this->classResolver->getInstanceFromDefinition($form_class);
     }
     // Ensure the resulting object is a plugin form.
     if (!$form_object instanceof PluginFormInterface) {
         throw new InvalidPluginDefinitionException($plugin->getPluginId(), sprintf('The "%s" plugin did not specify a valid "%s" form class, must implement \\Drupal\\Core\\Plugin\\PluginFormInterface', $plugin->getPluginId(), $operation));
     }
     if ($form_object instanceof PluginAwareInterface) {
         $form_object->setPlugin($plugin);
     }
     return $form_object;
 }
 /**
  * @covers ::getFormClass
  * @covers ::hasFormClass
  * @dataProvider providerGetFormClass
  */
 public function testGetFormClass(PluginWithFormsInterface $block_plugin, $operation, $expected_class)
 {
     $this->assertSame($expected_class, $block_plugin->getFormClass($operation));
     $this->assertSame($expected_class !== NULL, $block_plugin->hasFormClass($operation));
 }