Skip to content

Commit 7567d2c

Browse files
committed
Add namespace support
1 parent 022ca1c commit 7567d2c

File tree

1 file changed

+22
-0
lines changed

1 file changed

+22
-0
lines changed

src/Code/ObjectGenerator.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
use OpenCodeModeling\CodeAst\Builder\FileCollection;
1616
use OpenCodeModeling\CodeAst\Code\ClassConstGenerator;
1717
use OpenCodeModeling\CodeAst\Package\ClassInfoList;
18+
use OpenCodeModeling\JsonSchemaToPhp\Type\CustomSupport;
19+
use OpenCodeModeling\JsonSchemaToPhp\Type\TypeDefinition;
1820
use OpenCodeModeling\JsonSchemaToPhp\Type\TypeSet;
1921
use OpenCodeModeling\JsonSchemaToPhpAst\ValueObjectFactory;
2022

@@ -196,6 +198,12 @@ public function generateImmutableRecord(
196198
$fileCollection = FileCollection::fromItems($classBuilder);
197199

198200
if ($jsonSchemaSet !== null) {
201+
$classBuilder->setNamespace(
202+
$this->extractNamespace(
203+
$classInfo->getClassNamespaceFromPath($immutableRecordDirectory), $jsonSchemaSet->first()
204+
)
205+
);
206+
199207
$this->valueObjectFactory->generateClasses(
200208
$classBuilder,
201209
$fileCollection,
@@ -219,4 +227,18 @@ private function codeImmutableRecordLogic(ClassBuilder $file): void
219227
$file->addImplement('ImmutableRecord')
220228
->addTrait('ImmutableRecordLogic');
221229
}
230+
231+
private function extractNamespace(string $classNamespacePath, TypeDefinition $typeDefinition): string
232+
{
233+
if (! $typeDefinition instanceof CustomSupport) {
234+
return $classNamespacePath;
235+
}
236+
$namespace = $typeDefinition->custom()['namespace'] ?? '';
237+
238+
if ($namespace === '') {
239+
$namespace = $typeDefinition->custom()['ns'] ?? '';
240+
}
241+
242+
return \trim($classNamespacePath . '\\' . $namespace, '\\');
243+
}
222244
}

0 commit comments

Comments
 (0)