Skip to content

Commit

Permalink
Merge branch refs/heads/1.10.x into 1.11.x
Browse files Browse the repository at this point in the history
  • Loading branch information
phpstan-bot committed Jul 17, 2023
2 parents ba374e4 + 6d08225 commit cdcd7e9
Show file tree
Hide file tree
Showing 11 changed files with 50 additions and 55 deletions.
20 changes: 13 additions & 7 deletions src/Analyser/NodeScopeResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -595,12 +595,22 @@ private function processStmtNode(

$gatheredReturnStatements[] = new ReturnStatement($scope, $node);
}, StatementContext::createTopLevel());

$classReflection = $scope->getClassReflection();

$methodReflection = $methodScope->getFunction();
if (!$methodReflection instanceof MethodReflection) {
throw new ShouldNotHappenException();
}

$nodeCallback(new MethodReturnStatementsNode(
$stmt,
$gatheredReturnStatements,
$gatheredYieldStatements,
$statementResult,
$executionEnds,
$classReflection,
$methodReflection,
), $methodScope);
}
} elseif ($stmt instanceof Echo_) {
Expand Down Expand Up @@ -696,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 Expand Up @@ -4423,11 +4433,7 @@ private function processCalledMethod(MethodReflection $methodReflection): ?Mutat
return;
}

if (!$scope->isInClass()) {
return;
}

if ($scope->getClassReflection()->getName() !== $methodReflection->getDeclaringClass()->getName()) {
if ($node->getClassReflection()->getName() !== $methodReflection->getDeclaringClass()->getName()) {
return;
}

Expand Down
8 changes: 7 additions & 1 deletion src/Node/ClassConstantsNode.php
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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;
}

}
14 changes: 14 additions & 0 deletions src/Node/MethodReturnStatementsNode.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
use PhpParser\Node\Stmt\ClassMethod;
use PhpParser\NodeAbstract;
use PHPStan\Analyser\StatementResult;
use PHPStan\Reflection\ClassReflection;
use PHPStan\Reflection\MethodReflection;
use function count;

/** @api */
Expand All @@ -26,6 +28,8 @@ public function __construct(
private array $yieldStatements,
private StatementResult $statementResult,
private array $executionEnds,
private ClassReflection $classReflection,
private MethodReflection $methodReflection,
)
{
parent::__construct($method->getAttributes());
Expand Down Expand Up @@ -67,6 +71,16 @@ public function getYieldStatements(): array
return $this->yieldStatements;
}

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

public function getMethodReflection(): MethodReflection
{
return $this->methodReflection;
}

public function isGenerator(): bool
{
return count($this->yieldStatements) > 0;
Expand Down
6 changes: 1 addition & 5 deletions src/Rules/DeadCode/UnusedPrivateConstantRule.php
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,8 @@
use PhpParser\Node;
use PHPStan\Analyser\Scope;
use PHPStan\Node\MethodReturnStatementsNode;
use PHPStan\Reflection\MethodReflection;
use PHPStan\Rules\Rule;
use PHPStan\Rules\RuleErrorBuilder;
use PHPStan\ShouldNotHappenException;
use function sprintf;

/**
Expand All @@ -29,10 +27,7 @@ public function getNodeType(): string
public function processNode(Node $node, Scope $scope): array
{
$statementResult = $node->getStatementResult();
$methodReflection = $scope->getFunction();
if (!$methodReflection instanceof MethodReflection) {
throw new ShouldNotHappenException();
}
$methodReflection = $node->getMethodReflection();

$errors = [];
foreach ($this->check->check($methodReflection->getThrowType(), $statementResult->getThrowPoints()) as [$className, $throwPointNode]) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,8 @@
use PhpParser\Node;
use PHPStan\Analyser\Scope;
use PHPStan\Node\MethodReturnStatementsNode;
use PHPStan\Reflection\MethodReflection;
use PHPStan\Rules\Rule;
use PHPStan\Rules\RuleErrorBuilder;
use PHPStan\ShouldNotHappenException;
use PHPStan\TrinaryLogic;
use PHPStan\Type\TypeUtils;
use PHPStan\Type\VerbosityLevel;
Expand All @@ -35,10 +33,7 @@ public function getNodeType(): string
public function processNode(Node $node, Scope $scope): array
{
$statementResult = $node->getStatementResult();
$methodReflection = $scope->getFunction();
if (!$methodReflection instanceof MethodReflection) {
throw new ShouldNotHappenException();
}
$methodReflection = $node->getMethodReflection();

if ($methodReflection->getThrowType() === null || !$methodReflection->getThrowType()->isVoid()->yes()) {
return [];
Expand Down
15 changes: 3 additions & 12 deletions src/Rules/Exceptions/TooWideMethodThrowTypeRule.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,8 @@
use PhpParser\Node;
use PHPStan\Analyser\Scope;
use PHPStan\Node\MethodReturnStatementsNode;
use PHPStan\Reflection\MethodReflection;
use PHPStan\Rules\Rule;
use PHPStan\Rules\RuleErrorBuilder;
use PHPStan\ShouldNotHappenException;
use PHPStan\Type\FileTypeMapper;
use function sprintf;

Expand All @@ -29,21 +27,14 @@ public function getNodeType(): string

public function processNode(Node $node, Scope $scope): array
{
$statementResult = $node->getStatementResult();
$methodReflection = $scope->getFunction();
if (!$methodReflection instanceof MethodReflection) {
throw new ShouldNotHappenException();
}
if (!$scope->isInClass()) {
throw new ShouldNotHappenException();
}

$docComment = $node->getDocComment();
if ($docComment === null) {
return [];
}

$classReflection = $scope->getClassReflection();
$statementResult = $node->getStatementResult();
$methodReflection = $node->getMethodReflection();
$classReflection = $node->getClassReflection();
$resolvedPhpDoc = $this->fileTypeMapper->getResolvedPhpDoc(
$scope->getFile(),
$classReflection->getName(),
Expand Down
7 changes: 1 addition & 6 deletions src/Rules/Playground/MethodNeverRule.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,9 @@
use PhpParser\Node;
use PHPStan\Analyser\Scope;
use PHPStan\Node\MethodReturnStatementsNode;
use PHPStan\Reflection\MethodReflection;
use PHPStan\Reflection\ParametersAcceptorSelector;
use PHPStan\Rules\Rule;
use PHPStan\Rules\RuleErrorBuilder;
use PHPStan\ShouldNotHappenException;
use function count;
use function sprintf;

Expand All @@ -34,10 +32,7 @@ public function processNode(Node $node, Scope $scope): array
return [];
}

$method = $scope->getFunction();
if (!$method instanceof MethodReflection) {
throw new ShouldNotHappenException();
}
$method = $node->getMethodReflection();

$returnType = ParametersAcceptorSelector::selectSingle($method->getVariants())->getReturnType();
$helperResult = $this->helper->shouldReturnNever($node, $returnType);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,9 @@
use PhpParser\Node;
use PHPStan\Analyser\Scope;
use PHPStan\Node\MethodReturnStatementsNode;
use PHPStan\Reflection\MethodReflection;
use PHPStan\Reflection\ParametersAcceptorSelector;
use PHPStan\Rules\Rule;
use PHPStan\Rules\RuleErrorBuilder;
use PHPStan\ShouldNotHappenException;
use PHPStan\Type\Constant\ConstantBooleanType;
use PHPStan\Type\TypeCombinator;
use PHPStan\Type\UnionType;
Expand All @@ -34,10 +32,7 @@ public function getNodeType(): string

public function processNode(Node $node, Scope $scope): array
{
$method = $scope->getFunction();
if (!$method instanceof MethodReflection) {
throw new ShouldNotHappenException();
}
$method = $node->getMethodReflection();
$isFirstDeclaration = $method->getPrototype()->getDeclaringClass() === $method->getDeclaringClass();
if (!$method->isPrivate()) {
if (!$this->checkProtectedAndPublicMethods) {
Expand Down

0 comments on commit cdcd7e9

Please sign in to comment.