Skip to content

Commit

Permalink
Simplify access to class reflections in ClassConstantsNode and ClassM…
Browse files Browse the repository at this point in the history
…ethodsNode rules.
  • Loading branch information
mad-briller authored and ondrejmirtes committed Jul 17, 2023
1 parent 32ca340 commit 6d08225
Show file tree
Hide file tree
Showing 5 changed files with 18 additions and 14 deletions.
4 changes: 2 additions & 2 deletions src/Analyser/NodeScopeResolver.php
Expand Up @@ -706,8 +706,8 @@ private function processStmtNode(

$this->processStmtNodes($stmt, $stmt->stmts, $classScope, $classStatementsGatherer, $context);
$nodeCallback(new ClassPropertiesNode($stmt, $this->readWritePropertiesExtensionProvider, $classStatementsGatherer->getProperties(), $classStatementsGatherer->getPropertyUsages(), $classStatementsGatherer->getMethodCalls(), $classStatementsGatherer->getReturnStatementsNodes(), $classReflection), $classScope);
$nodeCallback(new ClassMethodsNode($stmt, $classStatementsGatherer->getMethods(), $classStatementsGatherer->getMethodCalls()), $classScope);
$nodeCallback(new ClassConstantsNode($stmt, $classStatementsGatherer->getConstants(), $classStatementsGatherer->getConstantFetches()), $classScope);
$nodeCallback(new ClassMethodsNode($stmt, $classStatementsGatherer->getMethods(), $classStatementsGatherer->getMethodCalls(), $classReflection), $classScope);
$nodeCallback(new ClassConstantsNode($stmt, $classStatementsGatherer->getConstants(), $classStatementsGatherer->getConstantFetches(), $classReflection), $classScope);
$classReflection->evictPrivateSymbols();
$this->calledMethodResults = [];
} elseif ($stmt instanceof Node\Stmt\Property) {
Expand Down
8 changes: 7 additions & 1 deletion src/Node/ClassConstantsNode.php
Expand Up @@ -6,6 +6,7 @@
use PhpParser\Node\Stmt\ClassLike;
use PhpParser\NodeAbstract;
use PHPStan\Node\Constant\ClassConstantFetch;
use PHPStan\Reflection\ClassReflection;

/** @api */
class ClassConstantsNode extends NodeAbstract implements VirtualNode
Expand All @@ -15,7 +16,7 @@ class ClassConstantsNode extends NodeAbstract implements VirtualNode
* @param ClassConst[] $constants
* @param ClassConstantFetch[] $fetches
*/
public function __construct(private ClassLike $class, private array $constants, private array $fetches)
public function __construct(private ClassLike $class, private array $constants, private array $fetches, private ClassReflection $classReflection)
{
parent::__construct($class->getAttributes());
}
Expand Down Expand Up @@ -54,4 +55,9 @@ public function getSubNodeNames(): array
return [];
}

public function getClassReflection(): ClassReflection
{
return $this->classReflection;
}

}
8 changes: 7 additions & 1 deletion src/Node/ClassMethodsNode.php
Expand Up @@ -5,6 +5,7 @@
use PhpParser\Node\Stmt\ClassLike;
use PhpParser\NodeAbstract;
use PHPStan\Node\Method\MethodCall;
use PHPStan\Reflection\ClassReflection;

/** @api */
class ClassMethodsNode extends NodeAbstract implements VirtualNode
Expand All @@ -14,7 +15,7 @@ class ClassMethodsNode extends NodeAbstract implements VirtualNode
* @param ClassMethod[] $methods
* @param array<int, MethodCall> $methodCalls
*/
public function __construct(private ClassLike $class, private array $methods, private array $methodCalls)
public function __construct(private ClassLike $class, private array $methods, private array $methodCalls, private ClassReflection $classReflection)
{
parent::__construct($class->getAttributes());
}
Expand Down Expand Up @@ -53,4 +54,9 @@ public function getSubNodeNames(): array
return [];
}

public function getClassReflection(): ClassReflection
{
return $this->classReflection;
}

}
6 changes: 1 addition & 5 deletions src/Rules/DeadCode/UnusedPrivateConstantRule.php
Expand Up @@ -8,7 +8,6 @@
use PHPStan\Rules\Constants\AlwaysUsedClassConstantsExtensionProvider;
use PHPStan\Rules\Rule;
use PHPStan\Rules\RuleErrorBuilder;
use PHPStan\ShouldNotHappenException;
use function sprintf;

/**
Expand All @@ -31,11 +30,8 @@ public function processNode(Node $node, Scope $scope): array
if (!$node->getClass() instanceof Node\Stmt\Class_ && !$node->getClass() instanceof Node\Stmt\Enum_) {
return [];
}
if (!$scope->isInClass()) {
throw new ShouldNotHappenException();
}

$classReflection = $scope->getClassReflection();
$classReflection = $node->getClassReflection();

$constants = [];
foreach ($node->getConstants() as $constant) {
Expand Down
6 changes: 1 addition & 5 deletions src/Rules/DeadCode/UnusedPrivateMethodRule.php
Expand Up @@ -9,7 +9,6 @@
use PHPStan\Reflection\MethodReflection;
use PHPStan\Rules\Rule;
use PHPStan\Rules\RuleErrorBuilder;
use PHPStan\ShouldNotHappenException;
use PHPStan\Type\Constant\ConstantStringType;
use function array_map;
use function count;
Expand All @@ -32,10 +31,7 @@ public function processNode(Node $node, Scope $scope): array
if (!$node->getClass() instanceof Node\Stmt\Class_ && !$node->getClass() instanceof Node\Stmt\Enum_) {
return [];
}
if (!$scope->isInClass()) {
throw new ShouldNotHappenException();
}
$classReflection = $scope->getClassReflection();
$classReflection = $node->getClassReflection();
$constructor = null;
if ($classReflection->hasConstructor()) {
$constructor = $classReflection->getConstructor();
Expand Down

0 comments on commit 6d08225

Please sign in to comment.