classNaming = $classNaming; $this->nodeFactory = $nodeFactory; $this->phpDocInfoFactory = $phpDocInfoFactory; $this->propertyNaming = $propertyNaming; $this->typeFactory = $typeFactory; } /** * @param ObjectType[] $objectTypes */ public function createFromTypes(array $objectTypes, string $className, string $framework) : \PhpParser\Node\Stmt\ClassMethod { $objectTypes = $this->typeFactory->uniquateTypes($objectTypes); $shortClassName = $this->classNaming->getShortName($className); $methodBuilder = new \RectorPrefix20210529\Symplify\Astral\ValueObject\NodeBuilder\MethodBuilder('inject' . $shortClassName); $methodBuilder->makePublic(); foreach ($objectTypes as $objectType) { /** @var ObjectType $objectType */ $propertyName = $this->propertyNaming->fqnToVariableName($objectType); $paramBuilder = new \RectorPrefix20210529\Symplify\Astral\ValueObject\NodeBuilder\ParamBuilder($propertyName); $paramBuilder->setType(new \PhpParser\Node\Name\FullyQualified($objectType->getClassName())); $methodBuilder->addParam($paramBuilder); $assign = $this->nodeFactory->createPropertyAssignment($propertyName); $methodBuilder->addStmt($assign); } $classMethod = $methodBuilder->getNode(); if ($framework === \Rector\Core\ValueObject\FrameworkName::SYMFONY) { $phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($classMethod); $phpDocInfo->addPhpDocTagNode(new \PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode('@required', new \PHPStan\PhpDocParser\Ast\PhpDoc\GenericTagValueNode(''))); } return $classMethod; } }