151151use PHPStan \Reflection \InitializerExprContext ;
152152use PHPStan \Reflection \InitializerExprTypeResolver ;
153153use PHPStan \Reflection \MethodReflection ;
154- use PHPStan \Reflection \Native \ExtendedNativeParameterReflection ;
155154use PHPStan \Reflection \Native \NativeMethodReflection ;
155+ use PHPStan \Reflection \Native \NativeParameterReflection ;
156156use PHPStan \Reflection \ParameterReflection ;
157157use PHPStan \Reflection \ParametersAcceptor ;
158158use PHPStan \Reflection \ParametersAcceptorSelector ;
178178use PHPStan \Type \Generic \TemplateTypeHelper ;
179179use PHPStan \Type \Generic \TemplateTypeMap ;
180180use PHPStan \Type \Generic \TemplateTypeVariance ;
181+ use PHPStan \Type \Generic \TemplateTypeVarianceMap ;
181182use PHPStan \Type \IntegerRangeType ;
182183use PHPStan \Type \IntegerType ;
183184use PHPStan \Type \IntersectionType ;
@@ -3171,7 +3172,7 @@ function (MutatingScope $scope) use ($stmt, $expr, $nodeCallback, $context, $sto
31713172 TemplateTypeHelper::resolveTemplateTypes (
31723173 $ selfOutType ,
31733174 $ parametersAcceptor ->getResolvedTemplateTypeMap (),
3174- $ parametersAcceptor ->getCallSiteVarianceMap (),
3175+ $ parametersAcceptor instanceof ExtendedParametersAcceptor ? $ parametersAcceptor ->getCallSiteVarianceMap () : TemplateTypeVarianceMap:: createEmpty (),
31753176 TemplateTypeVariance::createCovariant (),
31763177 ),
31773178 $ scope ->getNativeType ($ normalizedExpr ->var ),
@@ -5215,19 +5216,13 @@ public function createCallableParameters(Scope $scope, Expr $closureExpr, ?array
52155216 }
52165217
52175218 $ type = $ scope ->getType ($ args [$ index ]->value );
5218- $ callableParameters [$ index ] = new ExtendedNativeParameterReflection (
5219+ $ callableParameters [$ index ] = new NativeParameterReflection (
52195220 $ callableParameter ->getName (),
52205221 $ callableParameter ->isOptional (),
52215222 $ type ,
5222- $ type ,
5223- $ scope ->getNativeType ($ args [$ index ]->value ),
52245223 $ callableParameter ->passedByReference (),
52255224 $ callableParameter ->isVariadic (),
52265225 $ callableParameter ->getDefaultValue (),
5227- $ callableParameter ->getOutType (),
5228- $ callableParameter ->isImmediatelyInvokedCallable (),
5229- $ callableParameter ->getClosureThisType (),
5230- $ callableParameter ->getAttributes (),
52315226 );
52325227 }
52335228 }
@@ -5500,7 +5495,7 @@ private function resolveClosureThisType(
55005495 }
55015496
55025497 /**
5503- * @param ExtendedMethodReflection |FunctionReflection|null $calleeReflection
5498+ * @param MethodReflection |FunctionReflection|null $calleeReflection
55045499 * @param callable(Node $node, Scope $scope): void $nodeCallback
55055500 */
55065501 private function processArgs (
@@ -5516,10 +5511,6 @@ private function processArgs(
55165511 ?MutatingScope $ closureBindScope = null ,
55175512 ): ExpressionResult
55185513 {
5519- if ($ parametersAcceptor !== null && !$ parametersAcceptor instanceof ExtendedParametersAcceptor) {
5520- throw new ShouldNotHappenException ();
5521- }
5522-
55235514 $ args = $ callLike ->getArgs ();
55245515
55255516 $ parameters = null ;
@@ -5541,14 +5532,18 @@ private function processArgs(
55415532 $ assignByReference = $ parameters [$ i ]->passedByReference ()->createsNewVariable ();
55425533 $ parameterType = $ parameters [$ i ]->getType ();
55435534
5544- $ parameterNativeType = $ parameters [$ i ]->getNativeType ();
5535+ if ($ parameters [$ i ] instanceof ExtendedParameterReflection) {
5536+ $ parameterNativeType = $ parameters [$ i ]->getNativeType ();
5537+ }
55455538 $ parameter = $ parameters [$ i ];
55465539 } elseif (count ($ parameters ) > 0 && $ parametersAcceptor ->isVariadic ()) {
55475540 $ lastParameter = array_last ($ parameters );
55485541 $ assignByReference = $ lastParameter ->passedByReference ()->createsNewVariable ();
55495542 $ parameterType = $ lastParameter ->getType ();
55505543
5551- $ parameterNativeType = $ lastParameter ->getNativeType ();
5544+ if ($ lastParameter instanceof ExtendedParameterReflection) {
5545+ $ parameterNativeType = $ lastParameter ->getNativeType ();
5546+ }
55525547 $ parameter = $ lastParameter ;
55535548 }
55545549 }
@@ -5737,7 +5732,10 @@ private function processArgs(
57375732 $ paramOutType = $ this ->getParameterOutExtensionsType ($ callLike , $ calleeReflection , $ currentParameter , $ scope );
57385733 if ($ paramOutType !== null ) {
57395734 $ byRefType = $ paramOutType ;
5740- } elseif ($ currentParameter ->getOutType () !== null ) {
5735+ } elseif (
5736+ $ currentParameter instanceof ExtendedParameterReflection
5737+ && $ currentParameter ->getOutType () !== null
5738+ ) {
57415739 $ byRefType = $ currentParameter ->getOutType ();
57425740 } elseif (
57435741 $ calleeReflection instanceof MethodReflection
0 commit comments