diff --git a/src/Analyser/NodeScopeResolver.php b/src/Analyser/NodeScopeResolver.php index 52887bf5b7..bb6c64367e 100644 --- a/src/Analyser/NodeScopeResolver.php +++ b/src/Analyser/NodeScopeResolver.php @@ -508,6 +508,10 @@ private function processStmtNode( $phpDocParameterOutTypes, ); + if (!$scope->isInClass()) { + throw new ShouldNotHappenException(); + } + if ($stmt->name->toLowerString() === '__construct') { foreach ($stmt->params as $param) { if ($param->flags === 0) { @@ -521,9 +525,6 @@ private function processStmtNode( if ($param->getDocComment() !== null) { $phpDoc = $param->getDocComment()->getText(); } - if (!$scope->isInClass()) { - throw new ShouldNotHappenException(); - } $nodeCallback(new ClassPropertyNode( $param->var->name, $param->flags, @@ -546,7 +547,7 @@ private function processStmtNode( if (!$methodReflection instanceof ExtendedMethodReflection) { throw new ShouldNotHappenException(); } - $nodeCallback(new InClassMethodNode($methodReflection, $stmt), $methodScope); + $nodeCallback(new InClassMethodNode($scope->getClassReflection(), $methodReflection, $stmt), $methodScope); } if ($stmt->stmts !== null) { diff --git a/src/Node/InClassMethodNode.php b/src/Node/InClassMethodNode.php index d7ba07e4c0..0f94f116d0 100644 --- a/src/Node/InClassMethodNode.php +++ b/src/Node/InClassMethodNode.php @@ -3,6 +3,7 @@ namespace PHPStan\Node; use PhpParser\Node; +use PHPStan\Reflection\ClassReflection; use PHPStan\Reflection\ExtendedMethodReflection; /** @api */ @@ -10,6 +11,7 @@ class InClassMethodNode extends Node\Stmt implements VirtualNode { public function __construct( + private ClassReflection $classReflection, private ExtendedMethodReflection $methodReflection, private Node\Stmt\ClassMethod $originalNode, ) @@ -17,6 +19,11 @@ public function __construct( parent::__construct($originalNode->getAttributes()); } + public function getClassReflection(): ClassReflection + { + return $this->classReflection; + } + public function getMethodReflection(): ExtendedMethodReflection { return $this->methodReflection;