X7ROOT File Manager
Current Path:
/opt/cpanel/ea-wappspector/vendor/rector/rector/src/NodeAnalyzer
opt
/
cpanel
/
ea-wappspector
/
vendor
/
rector
/
rector
/
src
/
NodeAnalyzer
/
??
..
??
ArgsAnalyzer.php
(418 B)
??
BinaryOpAnalyzer.php
(1.14 KB)
??
CallAnalyzer.php
(2.37 KB)
??
ClassAnalyzer.php
(463 B)
??
CompactFuncCallAnalyzer.php
(2.06 KB)
??
ConstFetchAnalyzer.php
(1.02 KB)
??
DoctrineEntityAnalyzer.php
(1.99 KB)
??
ExprAnalyzer.php
(3.62 KB)
??
MagicClassMethodAnalyzer.php
(717 B)
??
ParamAnalyzer.php
(5.39 KB)
??
PropertyAnalyzer.php
(1.66 KB)
??
PropertyFetchAnalyzer.php
(7.38 KB)
??
PropertyPresenceChecker.php
(5.91 KB)
??
ScopeAnalyzer.php
(683 B)
??
TerminatedNodeAnalyzer.php
(5.25 KB)
??
VariableAnalyzer.php
(603 B)
??
VariadicAnalyzer.php
(1.51 KB)
Editing: PropertyPresenceChecker.php
<?php declare (strict_types=1); namespace Rector\NodeAnalyzer; use PhpParser\Node\Param; use PhpParser\Node\Stmt\Class_; use PhpParser\Node\Stmt\Property; use PHPStan\Reflection\ClassReflection; use PHPStan\Reflection\Php\PhpPropertyReflection; use PHPStan\Reflection\ReflectionProvider; use PHPStan\Type\Type; use PHPStan\Type\TypeWithClassName; use Rector\NodeNameResolver\NodeNameResolver; use Rector\Php80\NodeAnalyzer\PromotedPropertyResolver; use Rector\PhpParser\AstResolver; use Rector\PostRector\ValueObject\PropertyMetadata; /** * Can be local property, parent property etc. */ final class PropertyPresenceChecker { /** * @readonly * @var \Rector\Php80\NodeAnalyzer\PromotedPropertyResolver */ private $promotedPropertyResolver; /** * @readonly * @var \Rector\NodeNameResolver\NodeNameResolver */ private $nodeNameResolver; /** * @readonly * @var \PHPStan\Reflection\ReflectionProvider */ private $reflectionProvider; /** * @readonly * @var \Rector\PhpParser\AstResolver */ private $astResolver; public function __construct(PromotedPropertyResolver $promotedPropertyResolver, NodeNameResolver $nodeNameResolver, ReflectionProvider $reflectionProvider, AstResolver $astResolver) { $this->promotedPropertyResolver = $promotedPropertyResolver; $this->nodeNameResolver = $nodeNameResolver; $this->reflectionProvider = $reflectionProvider; $this->astResolver = $astResolver; } /** * Includes parent classes and traits */ public function hasClassContextProperty(Class_ $class, PropertyMetadata $propertyMetadata) : bool { $propertyOrParam = $this->getClassContextProperty($class, $propertyMetadata); return $propertyOrParam !== null; } /** * @return \PhpParser\Node\Stmt\Property|\PhpParser\Node\Param|null */ public function getClassContextProperty(Class_ $class, PropertyMetadata $propertyMetadata) { $className = $this->nodeNameResolver->getName($class); if ($className === null) { return null; } $property = $class->getProperty($propertyMetadata->getName()); if ($property instanceof Property) { return $property; } $property = $this->matchPropertyByParentNonPrivateProperties($className, $propertyMetadata); if ($property instanceof Property || $property instanceof Param) { return $property; } $promotedPropertyParams = $this->promotedPropertyResolver->resolveFromClass($class); foreach ($promotedPropertyParams as $promotedPropertyParam) { if ($this->nodeNameResolver->isName($promotedPropertyParam, $propertyMetadata->getName())) { return $promotedPropertyParam; } } return null; } /** * @return PhpPropertyReflection[] */ private function getParentClassNonPrivatePropertyReflections(string $className) : array { if (!$this->reflectionProvider->hasClass($className)) { return []; } $classReflection = $this->reflectionProvider->getClass($className); $propertyReflections = []; foreach ($classReflection->getParents() as $parentClassReflection) { $propertyNames = $this->resolveNonPrivatePropertyNames($parentClassReflection); foreach ($propertyNames as $propertyName) { $propertyReflections[] = $parentClassReflection->getNativeProperty($propertyName); } } return $propertyReflections; } /** * @return \PhpParser\Node\Stmt\Property|\PhpParser\Node\Param|null */ private function matchPropertyByType(PropertyMetadata $propertyMetadata, PhpPropertyReflection $phpPropertyReflection) { if (!$propertyMetadata->getType() instanceof Type) { return null; } if (!$propertyMetadata->getType() instanceof TypeWithClassName) { return null; } if (!$phpPropertyReflection->getWritableType() instanceof TypeWithClassName) { return null; } $propertyObjectTypeWithClassName = $propertyMetadata->getType(); if (!$propertyObjectTypeWithClassName->equals($phpPropertyReflection->getWritableType())) { return null; } return $this->astResolver->resolvePropertyFromPropertyReflection($phpPropertyReflection); } /** * @return \PhpParser\Node\Stmt\Property|\PhpParser\Node\Param|null */ private function matchPropertyByParentNonPrivateProperties(string $className, PropertyMetadata $propertyMetadata) { $availablePropertyReflections = $this->getParentClassNonPrivatePropertyReflections($className); foreach ($availablePropertyReflections as $availablePropertyReflection) { // 1. match type by priority $property = $this->matchPropertyByType($propertyMetadata, $availablePropertyReflection); if ($property instanceof Property || $property instanceof Param) { return $property; } $nativePropertyReflection = $availablePropertyReflection->getNativeReflection(); // 2. match by name if ($nativePropertyReflection->getName() === $propertyMetadata->getName()) { return $this->astResolver->resolvePropertyFromPropertyReflection($availablePropertyReflection); } } return null; } /** * @return string[] */ private function resolveNonPrivatePropertyNames(ClassReflection $classReflection) : array { $propertyNames = []; $nativeReflection = $classReflection->getNativeReflection(); foreach ($nativeReflection->getProperties() as $reflectionProperty) { if ($reflectionProperty->isPrivate()) { continue; } $propertyNames[] = $reflectionProperty->getName(); } return $propertyNames; } }
Upload File
Create Folder