Skip to content

Commit e2a645b

Browse files
committed
Simplify ParametersAcceptorSelector
1 parent 1f150cc commit e2a645b

File tree

1 file changed

+63
-65
lines changed

1 file changed

+63
-65
lines changed

src/Reflection/ParametersAcceptorSelector.php

Lines changed: 63 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ public static function selectFromArgs(
155155
}
156156
}
157157

158-
if (isset($args[0]) && (bool) $args[0]->getAttribute(ArrayFilterArgVisitor::ATTRIBUTE_NAME)) {
158+
if ((bool) $args[0]->getAttribute(ArrayFilterArgVisitor::ATTRIBUTE_NAME)) {
159159
if (isset($args[2])) {
160160
$mode = $scope->getType($args[2]->value);
161161
if ($mode instanceof ConstantIntegerType) {
@@ -203,7 +203,7 @@ public static function selectFromArgs(
203203
];
204204
}
205205

206-
if (isset($args[0]) && (bool) $args[0]->getAttribute(ArrayWalkArgVisitor::ATTRIBUTE_NAME)) {
206+
if ((bool) $args[0]->getAttribute(ArrayWalkArgVisitor::ATTRIBUTE_NAME)) {
207207
$arrayWalkParameters = [
208208
new DummyParameter('item', $scope->getIterableValueType($scope->getType($args[0]->value)), false, PassedByReference::createReadsArgument(), false, null),
209209
new DummyParameter('key', $scope->getIterableKeyType($scope->getType($args[0]->value)), false, PassedByReference::createNo(), false, null),
@@ -234,7 +234,7 @@ public static function selectFromArgs(
234234
];
235235
}
236236

237-
if (isset($args[0]) && (bool) $args[0]->getAttribute(ArrayFindArgVisitor::ATTRIBUTE_NAME)) {
237+
if ((bool) $args[0]->getAttribute(ArrayFindArgVisitor::ATTRIBUTE_NAME)) {
238238
$acceptor = $parametersAcceptors[0];
239239
$parameters = $acceptor->getParameters();
240240
$argType = $scope->getType($args[0]->value);
@@ -265,58 +265,14 @@ public static function selectFromArgs(
265265
];
266266
}
267267

268-
if (isset($args[0])) {
269-
$closureBindToVar = $args[0]->getAttribute(ClosureBindToVarVisitor::ATTRIBUTE_NAME);
270-
if (
271-
$closureBindToVar !== null
272-
&& $closureBindToVar instanceof Node\Expr\Variable
273-
&& is_string($closureBindToVar->name)
274-
) {
275-
$varType = $scope->getType($closureBindToVar);
276-
if ((new ObjectType(Closure::class))->isSuperTypeOf($varType)->yes()) {
277-
$inFunction = $scope->getFunction();
278-
if ($inFunction !== null) {
279-
$closureThisParameters = [];
280-
foreach ($inFunction->getParameters() as $parameter) {
281-
if ($parameter->getClosureThisType() === null) {
282-
continue;
283-
}
284-
$closureThisParameters[$parameter->getName()] = $parameter->getClosureThisType();
285-
}
286-
if (array_key_exists($closureBindToVar->name, $closureThisParameters)) {
287-
if ($scope->hasExpressionType(new ParameterVariableOriginalValueExpr($closureBindToVar->name))->yes()) {
288-
$acceptor = $parametersAcceptors[0];
289-
$parameters = $acceptor->getParameters();
290-
$parameters[0] = new NativeParameterReflection(
291-
$parameters[0]->getName(),
292-
$parameters[0]->isOptional(),
293-
$closureThisParameters[$closureBindToVar->name],
294-
$parameters[0]->passedByReference(),
295-
$parameters[0]->isVariadic(),
296-
$parameters[0]->getDefaultValue(),
297-
);
298-
$parametersAcceptors = [
299-
new FunctionVariant(
300-
$acceptor->getTemplateTypeMap(),
301-
$acceptor->getResolvedTemplateTypeMap(),
302-
$parameters,
303-
$acceptor->isVariadic(),
304-
$acceptor->getReturnType(),
305-
$acceptor instanceof ExtendedParametersAcceptor ? $acceptor->getCallSiteVarianceMap() : TemplateTypeVarianceMap::createEmpty(),
306-
),
307-
];
308-
}
309-
}
310-
}
311-
}
312-
}
313-
314-
if (
315-
$args[0]->getAttribute(ClosureBindArgVisitor::ATTRIBUTE_NAME) !== null
316-
&& $args[0]->value instanceof Node\Expr\Variable
317-
&& is_string($args[0]->value->name)
318-
) {
319-
$closureVarName = $args[0]->value->name;
268+
$closureBindToVar = $args[0]->getAttribute(ClosureBindToVarVisitor::ATTRIBUTE_NAME);
269+
if (
270+
$closureBindToVar !== null
271+
&& $closureBindToVar instanceof Node\Expr\Variable
272+
&& is_string($closureBindToVar->name)
273+
) {
274+
$varType = $scope->getType($closureBindToVar);
275+
if ((new ObjectType(Closure::class))->isSuperTypeOf($varType)->yes()) {
320276
$inFunction = $scope->getFunction();
321277
if ($inFunction !== null) {
322278
$closureThisParameters = [];
@@ -326,23 +282,23 @@ public static function selectFromArgs(
326282
}
327283
$closureThisParameters[$parameter->getName()] = $parameter->getClosureThisType();
328284
}
329-
if (array_key_exists($closureVarName, $closureThisParameters)) {
330-
if ($scope->hasExpressionType(new ParameterVariableOriginalValueExpr($closureVarName))->yes()) {
285+
if (array_key_exists($closureBindToVar->name, $closureThisParameters)) {
286+
if ($scope->hasExpressionType(new ParameterVariableOriginalValueExpr($closureBindToVar->name))->yes()) {
331287
$acceptor = $parametersAcceptors[0];
332288
$parameters = $acceptor->getParameters();
333-
$parameters[1] = new NativeParameterReflection(
334-
$parameters[1]->getName(),
335-
$parameters[1]->isOptional(),
336-
$closureThisParameters[$closureVarName],
337-
$parameters[1]->passedByReference(),
338-
$parameters[1]->isVariadic(),
339-
$parameters[1]->getDefaultValue(),
289+
$parameters[0] = new NativeParameterReflection(
290+
$parameters[0]->getName(),
291+
$parameters[0]->isOptional(),
292+
$closureThisParameters[$closureBindToVar->name],
293+
$parameters[0]->passedByReference(),
294+
$parameters[0]->isVariadic(),
295+
$parameters[0]->getDefaultValue(),
340296
);
341297
$parametersAcceptors = [
342298
new FunctionVariant(
343299
$acceptor->getTemplateTypeMap(),
344300
$acceptor->getResolvedTemplateTypeMap(),
345-
array_values($parameters),
301+
$parameters,
346302
$acceptor->isVariadic(),
347303
$acceptor->getReturnType(),
348304
$acceptor instanceof ExtendedParametersAcceptor ? $acceptor->getCallSiteVarianceMap() : TemplateTypeVarianceMap::createEmpty(),
@@ -353,6 +309,48 @@ public static function selectFromArgs(
353309
}
354310
}
355311
}
312+
313+
if (
314+
$args[0]->getAttribute(ClosureBindArgVisitor::ATTRIBUTE_NAME) !== null
315+
&& $args[0]->value instanceof Node\Expr\Variable
316+
&& is_string($args[0]->value->name)
317+
) {
318+
$closureVarName = $args[0]->value->name;
319+
$inFunction = $scope->getFunction();
320+
if ($inFunction !== null) {
321+
$closureThisParameters = [];
322+
foreach ($inFunction->getParameters() as $parameter) {
323+
if ($parameter->getClosureThisType() === null) {
324+
continue;
325+
}
326+
$closureThisParameters[$parameter->getName()] = $parameter->getClosureThisType();
327+
}
328+
if (array_key_exists($closureVarName, $closureThisParameters)) {
329+
if ($scope->hasExpressionType(new ParameterVariableOriginalValueExpr($closureVarName))->yes()) {
330+
$acceptor = $parametersAcceptors[0];
331+
$parameters = $acceptor->getParameters();
332+
$parameters[1] = new NativeParameterReflection(
333+
$parameters[1]->getName(),
334+
$parameters[1]->isOptional(),
335+
$closureThisParameters[$closureVarName],
336+
$parameters[1]->passedByReference(),
337+
$parameters[1]->isVariadic(),
338+
$parameters[1]->getDefaultValue(),
339+
);
340+
$parametersAcceptors = [
341+
new FunctionVariant(
342+
$acceptor->getTemplateTypeMap(),
343+
$acceptor->getResolvedTemplateTypeMap(),
344+
array_values($parameters),
345+
$acceptor->isVariadic(),
346+
$acceptor->getReturnType(),
347+
$acceptor instanceof ExtendedParametersAcceptor ? $acceptor->getCallSiteVarianceMap() : TemplateTypeVarianceMap::createEmpty(),
348+
),
349+
];
350+
}
351+
}
352+
}
353+
}
356354
}
357355

358356
if (count($parametersAcceptors) === 1) {

0 commit comments

Comments
 (0)