Skip to content

Commit 2485c5c

Browse files
committed
Update
1 parent 6defd68 commit 2485c5c

5 files changed

Lines changed: 48 additions & 30 deletions

File tree

src/Extension/Generated/MiddlewareGenerator.php

Lines changed: 30 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,10 @@ public function dump(array $classes, string $middlewareFqcn): string
9595
// Phase 2: Generate Properties and Setup
9696
$propertiesCode = '';
9797
$setupCode = '';
98+
9899
foreach ($normalizers as $index => $info) {
99-
$propertiesCode .= " private readonly \\{$info['normalizer']} \$n$index;\n";
100-
$setupCode .= " \$this->n$index = \$metadataFactory->metadata(\\{$info['class']}::class)->properties['{$info['propertyName']}']->normalizer;\n";
100+
$propertiesCode .= "private readonly \\{$info['normalizer']} \$n$index;\n";
101+
$setupCode .= "\$this->n$index = \$metadataFactory->metadata(\\{$info['class']}::class)->properties['{$info['propertyName']}']->normalizer;\n";
101102
}
102103

103104
// Phase 3: Generate Class Methods
@@ -108,8 +109,8 @@ public function dump(array $classes, string $middlewareFqcn): string
108109
foreach ($allClasses as $class => $metadata) {
109110
$shortName = str_replace('\\', '', $class);
110111

111-
$hydrateCases .= " \\$class::class => \$this->hydrate$shortName(\$data, \$context, \$stack),\n";
112-
$extractCases .= " \\$class::class => \$this->extract$shortName(\$object, \$context, \$stack),\n";
112+
$hydrateCases .= "\\$class::class => \$this->hydrate$shortName(\$data, \$context, \$stack),\n";
113+
$extractCases .= "\\$class::class => \$this->extract$shortName(\$object, \$context, \$stack),\n";
113114

114115
$methods .= $this->generateClassMethods($metadata, $shortName, $normalizerMap);
115116
}
@@ -142,10 +143,11 @@ final class $middlewareClassName implements Middleware
142143
{
143144
private array \$callStack = [];
144145
145-
$propertiesCode
146+
{$this->padLeft($propertiesCode, 1)}
147+
146148
public function __construct(MetadataFactory \$metadataFactory)
147149
{
148-
$setupCode
150+
{$this->padLeft($setupCode, 2)}
149151
}
150152
151153
public function hydrate(ClassMetadata \$metadata, array \$data, array \$context, Stack \$stack): object
@@ -162,7 +164,7 @@ public function hydrate(ClassMetadata \$metadata, array \$data, array \$context,
162164
private function doHydrate(string \$class, array \$data, array \$context, Stack \$stack): object|null
163165
{
164166
return match (\$class) {
165-
$hydrateCases
167+
{$this->padLeft($hydrateCases, 3)}
166168
default => null,
167169
};
168170
}
@@ -193,14 +195,15 @@ private function doExtract(object \$object, array \$context, Stack \$stack): arr
193195
194196
try {
195197
return match (\$object::class) {
196-
$extractCases default => null,
198+
{$this->padLeft($extractCases, 4)}
199+
default => null,
197200
};
198201
} finally {
199202
\\array_pop(\$this->callStack);
200203
}
201204
}
202205
203-
$methods
206+
{$this->padLeft($methods, 1)}
204207
}
205208
PHP;
206209
}
@@ -211,6 +214,10 @@ private function generateClassMethods(ClassMetadata $metadata, string $shortName
211214

212215
$constructor = $metadata->reflection->getConstructor();
213216

217+
if ($constructor === null) {
218+
dd($metadata->className);
219+
}
220+
214221
$befores = [];
215222
$map = [];
216223

@@ -225,13 +232,13 @@ private function generateClassMethods(ClassMetadata $metadata, string $shortName
225232
}
226233

227234
$methods = <<<PHP
228-
private function hydrate$shortName(array \$data, array \$context, Stack \$stack): \\$targetClass
229-
{
230-
{$this->padLeft(implode("\n", $befores), 2)}
231-
return new \\$targetClass(
232-
{$this->padLeft(implode(",\n", $map), 3)}
233-
);
234-
}
235+
private function hydrate$shortName(array \$data, array \$context, Stack \$stack): \\$targetClass
236+
{
237+
{$this->padLeft(implode("\n", $befores), 1)}
238+
return new \\$targetClass(
239+
{$this->padLeft(implode(",\n", $map), 2)}
240+
);
241+
}
235242
236243
PHP;
237244

@@ -249,13 +256,13 @@ private function hydrate$shortName(array \$data, array \$context, Stack \$stack)
249256
}
250257

251258
$methods .= <<<PHP
252-
private function extract$shortName(\$object, array \$context, Stack \$stack): array
253-
{
254-
{$this->padLeft(implode("\n", $befores), 2)}
255-
return [
256-
{$this->padLeft(implode("\n", $map), 3)}
257-
];
258-
}
259+
private function extract$shortName(\$object, array \$context, Stack \$stack): array
260+
{
261+
{$this->padLeft(implode("\n", $befores), 1)}
262+
return [
263+
{$this->padLeft(implode("\n", $map), 2)}
264+
];
265+
}
259266
260267
PHP;
261268

tests/Unit/Extension/Generated/GeneratedMetadataHydratorTest.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
use Patchlevel\Hydrator\Extension\Generated\GeneratedCoreExtension;
1616
use Patchlevel\Hydrator\Hydrator;
1717
use Patchlevel\Hydrator\HydratorBuilder;
18-
use Patchlevel\Hydrator\Metadata\AttributeMetadataFactory;
1918
use Patchlevel\Hydrator\Metadata\ClassMetadata;
2019
use Patchlevel\Hydrator\MetadataHydrator;
2120
use Patchlevel\Hydrator\Middleware\Middleware;

tests/Unit/Fixture/Circle1Dto.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88

99
final class Circle1Dto
1010
{
11-
#[ObjectNormalizer(Circle2Dto::class)]
12-
public object|null $to = null;
11+
public function __construct(
12+
#[ObjectNormalizer(Circle2Dto::class)]
13+
public object|null $to = null
14+
)
15+
{
16+
}
1317
}

tests/Unit/Fixture/Circle2Dto.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88

99
final class Circle2Dto
1010
{
11-
#[ObjectNormalizer(Circle3Dto::class)]
12-
public object|null $to = null;
11+
public function __construct(
12+
#[ObjectNormalizer(Circle3Dto::class)]
13+
public object|null $to = null
14+
)
15+
{
16+
}
1317
}

tests/Unit/Fixture/Circle3Dto.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88

99
final class Circle3Dto
1010
{
11-
#[ObjectNormalizer(Circle1Dto::class)]
12-
public object|null $to = null;
11+
public function __construct(
12+
#[ObjectNormalizer(Circle1Dto::class)]
13+
public object|null $to = null
14+
)
15+
{
16+
}
1317
}

0 commit comments

Comments
 (0)