150150use PHPStan \Reflection \InitializerExprContext ;
151151use PHPStan \Reflection \InitializerExprTypeResolver ;
152152use PHPStan \Reflection \MethodReflection ;
153+ use PHPStan \Reflection \Native \ExtendedNativeParameterReflection ;
153154use PHPStan \Reflection \Native \NativeMethodReflection ;
154- use PHPStan \Reflection \Native \NativeParameterReflection ;
155155use PHPStan \Reflection \ParameterReflection ;
156156use PHPStan \Reflection \ParametersAcceptor ;
157157use PHPStan \Reflection \ParametersAcceptorSelector ;
177177use PHPStan \Type \Generic \TemplateTypeHelper ;
178178use PHPStan \Type \Generic \TemplateTypeMap ;
179179use PHPStan \Type \Generic \TemplateTypeVariance ;
180- use PHPStan \Type \Generic \TemplateTypeVarianceMap ;
181180use PHPStan \Type \IntegerRangeType ;
182181use PHPStan \Type \IntegerType ;
183182use PHPStan \Type \IntersectionType ;
@@ -3177,7 +3176,7 @@ function (MutatingScope $scope) use ($stmt, $expr, $nodeCallback, $context, $sto
31773176 TemplateTypeHelper::resolveTemplateTypes (
31783177 $ selfOutType ,
31793178 $ parametersAcceptor ->getResolvedTemplateTypeMap (),
3180- $ parametersAcceptor instanceof ExtendedParametersAcceptor ? $ parametersAcceptor ->getCallSiteVarianceMap () : TemplateTypeVarianceMap:: createEmpty (),
3179+ $ parametersAcceptor ->getCallSiteVarianceMap (),
31813180 TemplateTypeVariance::createCovariant (),
31823181 ),
31833182 $ scope ->getNativeType ($ normalizedExpr ->var ),
@@ -5245,13 +5244,19 @@ public function createCallableParameters(Scope $scope, Expr $closureExpr, ?array
52455244 }
52465245
52475246 $ type = $ scope ->getType ($ args [$ index ]->value );
5248- $ callableParameters [$ index ] = new NativeParameterReflection (
5247+ $ callableParameters [$ index ] = new ExtendedNativeParameterReflection (
52495248 $ callableParameter ->getName (),
52505249 $ callableParameter ->isOptional (),
52515250 $ type ,
5251+ $ type ,
5252+ $ scope ->getNativeType ($ args [$ index ]->value ),
52525253 $ callableParameter ->passedByReference (),
52535254 $ callableParameter ->isVariadic (),
52545255 $ callableParameter ->getDefaultValue (),
5256+ $ callableParameter ->getOutType (),
5257+ $ callableParameter ->isImmediatelyInvokedCallable (),
5258+ $ callableParameter ->getClosureThisType (),
5259+ $ callableParameter ->getAttributes (),
52555260 );
52565261 }
52575262 }
@@ -5268,14 +5273,7 @@ public function createCallableParameters(Scope $scope, Expr $closureExpr, ?array
52685273 if (count ($ acceptors ) > 0 ) {
52695274 foreach ($ acceptors as $ acceptor ) {
52705275 if ($ callableParameters === null ) {
5271- $ callableParameters = array_map (static fn (ParameterReflection $ callableParameter ) => new NativeParameterReflection (
5272- $ callableParameter ->getName (),
5273- $ callableParameter ->isOptional (),
5274- $ callableParameter ->getType (),
5275- $ callableParameter ->passedByReference (),
5276- $ callableParameter ->isVariadic (),
5277- $ callableParameter ->getDefaultValue (),
5278- ), $ acceptor ->getParameters ());
5276+ $ callableParameters = $ acceptor ->getParameters ();
52795277 continue ;
52805278 }
52815279
@@ -5286,14 +5284,7 @@ public function createCallableParameters(Scope $scope, Expr $closureExpr, ?array
52865284 continue ;
52875285 }
52885286
5289- $ newParameters [] = $ callableParameters [$ i ]->union (new NativeParameterReflection (
5290- $ callableParameter ->getName (),
5291- $ callableParameter ->isOptional (),
5292- $ callableParameter ->getType (),
5293- $ callableParameter ->passedByReference (),
5294- $ callableParameter ->isVariadic (),
5295- $ callableParameter ->getDefaultValue (),
5296- ));
5287+ $ newParameters [] = $ callableParameters [$ i ]->union ($ callableParameter );
52975288 }
52985289
52995290 $ callableParameters = $ newParameters ;
@@ -5540,7 +5531,7 @@ private function resolveClosureThisType(
55405531 }
55415532
55425533 /**
5543- * @param MethodReflection |FunctionReflection|null $calleeReflection
5534+ * @param ExtendedMethodReflection |FunctionReflection|null $calleeReflection
55445535 * @param callable(Node $node, Scope $scope): void $nodeCallback
55455536 */
55465537 private function processArgs (
@@ -5556,6 +5547,10 @@ private function processArgs(
55565547 ?MutatingScope $ closureBindScope = null ,
55575548 ): ExpressionResult
55585549 {
5550+ if ($ parametersAcceptor !== null && !$ parametersAcceptor instanceof ExtendedParametersAcceptor) {
5551+ throw new ShouldNotHappenException ();
5552+ }
5553+
55595554 $ args = $ callLike ->getArgs ();
55605555
55615556 $ parameters = null ;
@@ -5577,18 +5572,14 @@ private function processArgs(
55775572 $ assignByReference = $ parameters [$ i ]->passedByReference ()->createsNewVariable ();
55785573 $ parameterType = $ parameters [$ i ]->getType ();
55795574
5580- if ($ parameters [$ i ] instanceof ExtendedParameterReflection) {
5581- $ parameterNativeType = $ parameters [$ i ]->getNativeType ();
5582- }
5575+ $ parameterNativeType = $ parameters [$ i ]->getNativeType ();
55835576 $ parameter = $ parameters [$ i ];
55845577 } elseif (count ($ parameters ) > 0 && $ parametersAcceptor ->isVariadic ()) {
55855578 $ lastParameter = array_last ($ parameters );
55865579 $ assignByReference = $ lastParameter ->passedByReference ()->createsNewVariable ();
55875580 $ parameterType = $ lastParameter ->getType ();
55885581
5589- if ($ lastParameter instanceof ExtendedParameterReflection) {
5590- $ parameterNativeType = $ lastParameter ->getNativeType ();
5591- }
5582+ $ parameterNativeType = $ lastParameter ->getNativeType ();
55925583 $ parameter = $ lastParameter ;
55935584 }
55945585 }
@@ -5777,10 +5768,7 @@ private function processArgs(
57775768 $ paramOutType = $ this ->getParameterOutExtensionsType ($ callLike , $ calleeReflection , $ currentParameter , $ scope );
57785769 if ($ paramOutType !== null ) {
57795770 $ byRefType = $ paramOutType ;
5780- } elseif (
5781- $ currentParameter instanceof ExtendedParameterReflection
5782- && $ currentParameter ->getOutType () !== null
5783- ) {
5771+ } elseif ($ currentParameter ->getOutType () !== null ) {
57845772 $ byRefType = $ currentParameter ->getOutType ();
57855773 } elseif (
57865774 $ calleeReflection instanceof MethodReflection
0 commit comments