|
12 | 12 |
|
13 | 13 | use OpenCodeModeling\CodeAst\Builder\ClassBuilder;
|
14 | 14 | use OpenCodeModeling\CodeAst\Builder\ClassBuilderCollection;
|
| 15 | +use OpenCodeModeling\CodeAst\Builder\ClassConstBuilder; |
15 | 16 | use OpenCodeModeling\CodeAst\Builder\ClassMethodBuilder;
|
16 | 17 | use OpenCodeModeling\CodeAst\Builder\ClassPropertyBuilder;
|
| 18 | +use OpenCodeModeling\CodeAst\Code\ClassConstGenerator; |
17 | 19 | use OpenCodeModeling\CodeAst\Package\ClassInfoList;
|
18 | 20 | use OpenCodeModeling\JsonSchemaToPhp\Type\ArrayType;
|
19 | 21 | use OpenCodeModeling\JsonSchemaToPhp\Type\ObjectType;
|
@@ -167,6 +169,8 @@ public function generateClasses(
|
167 | 169 | }
|
168 | 170 |
|
169 | 171 | /**
|
| 172 | + * Generation of getter methods for value object are skipped. |
| 173 | + * |
170 | 174 | * @param ClassBuilderCollection $classBuilderCollection
|
171 | 175 | * @param bool $typed
|
172 | 176 | * @param callable $methodNameFilter Filter the property name to your desired method name e.g. with get prefix
|
@@ -194,6 +198,39 @@ public function addGetterMethods(
|
194 | 198 | }
|
195 | 199 | }
|
196 | 200 |
|
| 201 | + /** |
| 202 | + * Generation of constants for value object are skipped. |
| 203 | + * |
| 204 | + * @param ClassBuilderCollection $classBuilderCollection |
| 205 | + * @param callable $constantNameFilter Converts the name to a proper class constant name |
| 206 | + * @param callable $constantValueFilter Converts the name to a proper class constant value e.g. snake_case or camelCase |
| 207 | + * @param int $visibility Visibility of the class constant |
| 208 | + */ |
| 209 | + public function addClassConstantsForProperties( |
| 210 | + ClassBuilderCollection $classBuilderCollection, |
| 211 | + callable $constantNameFilter, |
| 212 | + callable $constantValueFilter, |
| 213 | + int $visibility = ClassConstGenerator::FLAG_PUBLIC |
| 214 | + ): void { |
| 215 | + foreach ($classBuilderCollection as $classBuilder) { |
| 216 | + foreach ($classBuilder->getProperties() as $classPropertyBuilder) { |
| 217 | + $constantName = ($constantNameFilter)($classPropertyBuilder->getName()); |
| 218 | + |
| 219 | + if ($this->isValueObject($classBuilder) |
| 220 | + || $classBuilder->hasConstant($constantName)) { |
| 221 | + continue 2; |
| 222 | + } |
| 223 | + $classBuilder->addConstant( |
| 224 | + ClassConstBuilder::fromScratch( |
| 225 | + $constantName, |
| 226 | + ($constantValueFilter)($classPropertyBuilder->getName()), |
| 227 | + $visibility |
| 228 | + ) |
| 229 | + ); |
| 230 | + } |
| 231 | + } |
| 232 | + } |
| 233 | + |
197 | 234 | public function generateValueObject(string $className, string $classNamespace, TypeDefinition $definition): ClassBuilder
|
198 | 235 | {
|
199 | 236 | $classBuilder = $this->valueObjectFactory->classBuilder($definition);
|
|
0 commit comments