19declare(strict_types=1);
23use Rector\Transform\NodeTypeAnalyzer\TypeProvidingExprFromClassResolver;
24use Rector\Core\NodeManipulator\ClassInsertManipulator;
25use Rector\PostRector\Collector\PropertyToAddCollector;
26use PhpParser\Node\Stmt\ClassLike;
27use PhpParser\Node\Expr\PropertyFetch;
28use PHPStan\Type\ObjectType;
29use PhpParser\Node\Expr\Variable;
30use PhpParser\Node\Stmt\Expression;
31use PhpParser\Node\Expr\Assign;
32use PhpParser\Node\Expr\MethodCall;
33use Rector\PostRector\Collector\NodesToAddCollector;
34use Rector\Compatibility\NodeFactory\ConstructorClassMethodFactory;
35use PhpParser\Node\Expr;
36use PhpParser\Node\Stmt\ClassMethod;
37use PhpParser\Node\Stmt\Class_;
41 public const DIC =
'DIC';
42 public const THIS =
'this';
67 $this->dicDependencyManipulator = $classDependencyManipulator;
85 ClassMethod $classMethod
86 ): \PhpParser\Node\Expr\Variable {
88 $dic_variable = $this->dicDependencyManipulator->ensureGlobalDICinMethod($classMethod, $class);
92 $property_assign =
new Expression(
94 $dic_dependenc_variable,
101 $this->dicDependencyManipulator->addStmtToMethodIfNotThereAfterGlobalDIC(
107 return $dic_dependenc_variable;
113 ClassMethod $classMethod
115 $DICMember = $this->getDICMemberByName(
$name);
121 $classMethodName = $classMethod->name->name ??
null;
122 if ($classMethod->isStatic()
123 || $classMethodName === \Rector\Core\ValueObject\MethodName::CONSTRUCT) {
124 return $this->getStaticDICCall($DICMember, $class, $classMethod);
129 $dicPropertyFetch = $this->typeProvidingExprFromClassResolver->resolveTypeProvidingExprFromClass(
132 $this->getObjectType($primary)
134 if ($dicPropertyFetch instanceof PropertyFetch) {
135 return $dicPropertyFetch;
140 foreach ($alternatives as $alternative) {
141 $dicPropertyFetch = $this->typeProvidingExprFromClassResolver->resolveTypeProvidingExprFromClass(
144 $this->getObjectType($alternative)
146 if ($dicPropertyFetch instanceof PropertyFetch) {
147 return $dicPropertyFetch;
152 $this->propertyToAddCollector->addPropertyWithoutConstructorToClass(
154 $this->getObjectType($primary),
158 $dicPropertyFetch =
new PropertyFetch(
159 new Variable(self::THIS),
163 $methodCall = $this->appendDICMethods(
165 new Variable(self::DIC)
168 $this->dicDependencyManipulator->ensureGlobalDICinConstructor(
172 $property_assign =
new Expression(
178 $this->dicDependencyManipulator->addStmtToConstructorIfNotThereAfterGlobalDIC(
183 return $dicPropertyFetch;
189 $methodCall =
new MethodCall(
204 return new ObjectType(
$name);
DICDependencyManipulator $dicDependencyManipulator
DICMemberMap $DICMemberMap
ClassInsertManipulator $classInsertManipulator
Rector Core NodeDecorator PropertyTypeDecorator $propertyTypeDecorator
NodesToAddCollector $nodesToAddCollector
getObjectType(string $name)
appendDICMethods(DICMember $m, Expr $methodCall)
getDICMemberByName(string $name)
__construct(TypeProvidingExprFromClassResolver $typeProvidingExprFromClassResolver, DICDependencyManipulator $classDependencyManipulator, PropertyToAddCollector $propertyToAddCollector, ClassInsertManipulator $classInsertManipulator, NodesToAddCollector $nodesToAddCollector, \Rector\Core\PhpParser\Node\NodeFactory $nodeFactory, ConstructorClassMethodFactory $constructClassMethodFactory, \Rector\Core\NodeDecorator\PropertyTypeDecorator $propertyTypeDecorator, \Rector\ChangesReporting\Collector\RectorChangeCollector $rectorChangeCollector)
ensureDICDependency(string $name, Class_ $class, ClassMethod $classMethod)
getStaticDICCall(DICMember $DICMember, Class_ $class, ClassMethod $classMethod)
Rector ChangesReporting Collector RectorChangeCollector $rectorChangeCollector
ConstructorClassMethodFactory $constructClassMethodFactory
PropertyToAddCollector $propertyToAddCollector
Rector Core PhpParser Node NodeFactory $nodeFactory
TypeProvidingExprFromClassResolver $typeProvidingExprFromClassResolver