Skip to content

Commit 044fca6

Browse files
committed
use statements from data object
1 parent e096437 commit 044fca6

File tree

5 files changed

+54
-34
lines changed

5 files changed

+54
-34
lines changed

src/Maker/MakeCrud.php

Lines changed: 23 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
use Symfony\Bundle\MakerBundle\Renderer\FormTypeRenderer;
2929
use Symfony\Bundle\MakerBundle\Str;
3030
use Symfony\Bundle\MakerBundle\Util\ClassSource\Model\ClassData;
31-
use Symfony\Bundle\MakerBundle\Util\UseStatementGenerator;
3231
use Symfony\Bundle\MakerBundle\Validator;
3332
use Symfony\Bundle\TwigBundle\TwigBundle;
3433
use Symfony\Component\Console\Command\Command;
@@ -132,11 +131,6 @@ public function generate(InputInterface $input, ConsoleStyle $io, Generator $gen
132131
];
133132
}
134133

135-
$controllerClassData = ClassData::create(
136-
class: sprintf('App\Controller\%sController', $this->controllerClassName),
137-
extendsClass: AbstractController::class,
138-
);
139-
140134
$controllerClassDetails = $generator->createClassNameDetails(
141135
$this->controllerClassName,
142136
'Controller\\',
@@ -153,6 +147,20 @@ class: sprintf('App\Controller\%sController', $this->controllerClassName),
153147
++$iter;
154148
} while (class_exists($formClassDetails->getFullName()));
155149

150+
$controllerClassData = ClassData::create(
151+
class: sprintf('App\Controller\%sController', $this->controllerClassName),
152+
extendsClass: AbstractController::class,
153+
useStatements: [
154+
$entityClassDetails->getFullName(),
155+
$formClassDetails->getFullName(),
156+
$repositoryClassName,
157+
AbstractController::class,
158+
Request::class,
159+
Response::class,
160+
Route::class,
161+
],
162+
);
163+
156164
$entityVarPlural = lcfirst($this->inflector->pluralize($entityClassDetails->getShortName()));
157165
$entityVarSingular = lcfirst($this->inflector->singularize($entityClassDetails->getShortName()));
158166

@@ -162,26 +170,15 @@ class: sprintf('App\Controller\%sController', $this->controllerClassName),
162170
$routeName = Str::asRouteName($controllerClassDetails->getRelativeNameWithoutSuffix());
163171
$templatesPath = Str::asFilePath($controllerClassDetails->getRelativeNameWithoutSuffix());
164172

165-
$useStatements = new UseStatementGenerator([
166-
$entityClassDetails->getFullName(),
167-
$formClassDetails->getFullName(),
168-
$repositoryClassName,
169-
AbstractController::class,
170-
Request::class,
171-
Response::class,
172-
Route::class,
173-
]);
174-
175173
if (EntityManagerInterface::class !== $repositoryClassName) {
176-
$useStatements->addUseStatement(EntityManagerInterface::class);
174+
$controllerClassData->addUseStatement(EntityManagerInterface::class);
177175
}
178176

179177
$generator->generateController(
180178
$controllerClassDetails->getFullName(),
181179
'crud/controller/Controller.tpl.php',
182180
array_merge([
183181
'class_data' => $controllerClassData,
184-
'use_statements' => $useStatements,
185182
'entity_class_name' => $entityClassDetails->getShortName(),
186183
'form_class_name' => $formClassDetails->getShortName(),
187184
'route_path' => Str::asRoutePath($controllerClassDetails->getRelativeNameWithoutSuffix()),
@@ -252,27 +249,24 @@ class: sprintf('App\Controller\%sController', $this->controllerClassName),
252249
$testClassData = ClassData::create(
253250
class: sprintf('App\Tests\Controller\%sControllerTest', $entityClassDetails->getRelativeNameWithoutSuffix()),
254251
extendsClass: WebTestCase::class,
252+
useStatements: [
253+
$entityClassDetails->getFullName(),
254+
WebTestCase::class,
255+
KernelBrowser::class,
256+
$repositoryClassName,
257+
EntityRepository::class,
258+
],
255259
);
256260

257-
$useStatements = new UseStatementGenerator([
258-
$entityClassDetails->getFullName(),
259-
WebTestCase::class,
260-
KernelBrowser::class,
261-
$repositoryClassName,
262-
]);
263-
264-
$useStatements->addUseStatement(EntityRepository::class);
265-
266261
if (EntityManagerInterface::class !== $repositoryClassName) {
267-
$useStatements->addUseStatement(EntityManagerInterface::class);
262+
$testClassData->addUseStatement(EntityManagerInterface::class);
268263
}
269264

270265
$generator->generateClass(
271266
$testClassData->fullClassName,
272267
'crud/test/Test.EntityManager.tpl.php',
273268
[
274269
'class_data' => $testClassData,
275-
'use_statements' => $useStatements,
276270
'entity_full_class_name' => $entityClassDetails->getFullName(),
277271
'entity_class_name' => $entityClassDetails->getShortName(),
278272
'entity_var_singular' => $entityVarSingular,

src/Resources/skeleton/crud/controller/Controller.tpl.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace <?= $namespace ?>;
44

5-
<?= $use_statements; ?>
5+
<?= $class_data->getUseStatements(); ?>
66

77
#[Route('<?= $route_path ?>')]
88
<?= $class_data->getClassDeclaration() ?>

src/Resources/skeleton/crud/test/Test.EntityManager.tpl.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
namespace <?= $namespace ?>;
55

6-
<?= $use_statements; ?>
6+
<?= $class_data->getUseStatements(); ?>
77

88
<?= $class_data->getClassDeclaration() ?>
99
{

src/Util/ClassSource/Model/ClassData.php

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
namespace Symfony\Bundle\MakerBundle\Util\ClassSource\Model;
1313

1414
use Symfony\Bundle\MakerBundle\Str;
15+
use Symfony\Bundle\MakerBundle\Util\UseStatementGenerator;
1516

1617
/**
1718
* @author Jesse Rushlow <jr@rushlow.dev>
@@ -26,18 +27,26 @@ private function __construct(
2627
public readonly string $fullClassName,
2728
public readonly ?string $extends,
2829
public readonly bool $isEntity,
30+
private UseStatementGenerator $useStatementGenerator,
2931
private bool $isFinal = true,
3032
) {
3133
}
3234

33-
public static function create(string $class, ?string $extendsClass = null, bool $isEntity = false): self
35+
public static function create(string $class, ?string $extendsClass = null, bool $isEntity = false, array $useStatements = []): self
3436
{
37+
$useStatements = new UseStatementGenerator($useStatements);
38+
39+
if ($extendsClass) {
40+
$useStatements->addUseStatement($extendsClass);
41+
}
42+
3543
return new self(
3644
className: Str::getShortClassName($class),
3745
namespace: Str::getNamespace($class),
3846
fullClassName: $class,
3947
extends: null === $extendsClass ? null : Str::getShortClassName($extendsClass),
4048
isEntity: $isEntity,
49+
useStatementGenerator: $useStatements,
4150
);
4251
}
4352

@@ -62,4 +71,16 @@ public function setIsFinal(bool $isFinal): self
6271

6372
return $this;
6473
}
74+
75+
public function addUseStatement(array|string $useStatement): self
76+
{
77+
$this->useStatementGenerator->addUseStatement($useStatement);
78+
79+
return $this;
80+
}
81+
82+
public function getUseStatements(): string
83+
{
84+
return (string) $this->useStatementGenerator;
85+
}
6586
}

tests/Util/TemplateComponentGeneratorTest.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
namespace Symfony\Bundle\MakerBundle\Tests\Util;
1313

1414
use PHPUnit\Framework\TestCase;
15+
use Symfony\Bundle\MakerBundle\MakerBundle;
16+
use Symfony\Bundle\MakerBundle\Util\ClassSource\Model\ClassData;
1517
use Symfony\Bundle\MakerBundle\Util\TemplateComponentGenerator;
1618

1719
/**
@@ -94,10 +96,13 @@ public function routeTrailingNewLineDataProvider(): \Generator
9496
*/
9597
public function testGetFinalClassDeclaration(bool $finalClass, bool $finalEntity, bool $isEntity, string $expectedResult): void
9698
{
97-
$this->markTestIncomplete('We wont need this...');
9899
$generator = new TemplateComponentGenerator($finalClass, $finalEntity);
99100

100-
self::assertSame($expectedResult, $generator->getFinalDeclaration($isEntity));
101+
$classData = ClassData::create(MakerBundle::class, isEntity: $isEntity);
102+
103+
$generator->configureClass($classData);
104+
105+
self::assertSame(sprintf('%sclass MakerBundle', $expectedResult), $classData->getClassDeclaration());
101106
}
102107

103108
public function finalClassDataProvider(): \Generator

0 commit comments

Comments
 (0)