/**
  * {@inheritdoc}
  */
 public function generate(Arguments $arguments, BuilderInterface $builder, GeneratorDispatcherInterface $dispatcher)
 {
     $builder->mkdir($arguments['dir']);
     $builder->in($arguments['dir'], function (BuilderInterface $builder) use($arguments) {
         $builder->template('Bundle.php.twig', "{$arguments->name}.php");
         $builder->in('DependencyInjection', function (BuilderInterface $builder) use($arguments) {
             $builder->template('Configuration.php.twig', 'Configuration.php');
             $builder->template('Extension.php.twig', "{$arguments['basename']}Extension.php");
         });
         $builder->in('Resources/config', function (BuilderInterface $builder) use($arguments) {
             $builder->template('services.yml.twig', 'services.yml');
         });
         $builder->mkdir('Controller');
         $builder->mkdir('Resources/views');
         if ($arguments['structure']) {
             $builder->mkdir('Resources/doc');
             $builder->mkdir('Resources/translations');
             $builder->touch('Resources/translations/messages.nl.po');
             $builder->mkdir('Entity');
             $builder->mkdir('Form');
         }
     });
     if ($arguments['update-kernel']) {
         $bundleClass = "{$arguments['namespace']}\\{$arguments['name']}";
         $builder->modify('app/AppKernel.php', function ($content) use($bundleClass) {
             $count = preg_match("#([\t ]+)// project bundles\n#", $content, $matches, PREG_OFFSET_CAPTURE);
             if ($count === 1) {
                 $match = $matches[0];
                 $at = strlen($match[0]) + $match[1];
                 $spaces = $matches[1][0];
                 $content = substr($content, 0, $at) . "{$spaces}new {$bundleClass}(),\n" . substr($content, $at);
             }
             return $content;
         });
     }
     if ($arguments['update-routing']) {
         $builder->prepend('app/config/routing.yml', "{$arguments['alias']}:\n    resource: \"@{$arguments['name']}/Controller/\"\n    type:     annotation\n    prefix:   /\n\n");
     }
 }