Skip to content

Commit 4f321ba

Browse files
authored
Simplify ParametersAcceptorSelector
1 parent 70a039f commit 4f321ba

File tree

1 file changed

+62
-65
lines changed

1 file changed

+62
-65
lines changed

src/Reflection/ParametersAcceptorSelector.php

Lines changed: 62 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,13 @@ 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 instanceof Node\Expr\Variable
271+
&& is_string($closureBindToVar->name)
272+
) {
273+
$varType = $scope->getType($closureBindToVar);
274+
if ((new ObjectType(Closure::class))->isSuperTypeOf($varType)->yes()) {
320275
$inFunction = $scope->getFunction();
321276
if ($inFunction !== null) {
322277
$closureThisParameters = [];
@@ -326,23 +281,23 @@ public static function selectFromArgs(
326281
}
327282
$closureThisParameters[$parameter->getName()] = $parameter->getClosureThisType();
328283
}
329-
if (array_key_exists($closureVarName, $closureThisParameters)) {
330-
if ($scope->hasExpressionType(new ParameterVariableOriginalValueExpr($closureVarName))->yes()) {
284+
if (array_key_exists($closureBindToVar->name, $closureThisParameters)) {
285+
if ($scope->hasExpressionType(new ParameterVariableOriginalValueExpr($closureBindToVar->name))->yes()) {
331286
$acceptor = $parametersAcceptors[0];
332287
$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(),
288+
$parameters[0] = new NativeParameterReflection(
289+
$parameters[0]->getName(),
290+
$parameters[0]->isOptional(),
291+
$closureThisParameters[$closureBindToVar->name],
292+
$parameters[0]->passedByReference(),
293+
$parameters[0]->isVariadic(),
294+
$parameters[0]->getDefaultValue(),
340295
);
341296
$parametersAcceptors = [
342297
new FunctionVariant(
343298
$acceptor->getTemplateTypeMap(),
344299
$acceptor->getResolvedTemplateTypeMap(),
345-
array_values($parameters),
300+
$parameters,
346301
$acceptor->isVariadic(),
347302
$acceptor->getReturnType(),
348303
$acceptor instanceof ExtendedParametersAcceptor ? $acceptor->getCallSiteVarianceMap() : TemplateTypeVarianceMap::createEmpty(),
@@ -353,6 +308,48 @@ public static function selectFromArgs(
353308
}
354309
}
355310
}
311+
312+
if (
313+
$args[0]->getAttribute(ClosureBindArgVisitor::ATTRIBUTE_NAME) !== null
314+
&& $args[0]->value instanceof Node\Expr\Variable
315+
&& is_string($args[0]->value->name)
316+
) {
317+
$closureVarName = $args[0]->value->name;
318+
$inFunction = $scope->getFunction();
319+
if ($inFunction !== null) {
320+
$closureThisParameters = [];
321+
foreach ($inFunction->getParameters() as $parameter) {
322+
if ($parameter->getClosureThisType() === null) {
323+
continue;
324+
}
325+
$closureThisParameters[$parameter->getName()] = $parameter->getClosureThisType();
326+
}
327+
if (array_key_exists($closureVarName, $closureThisParameters)) {
328+
if ($scope->hasExpressionType(new ParameterVariableOriginalValueExpr($closureVarName))->yes()) {
329+
$acceptor = $parametersAcceptors[0];
330+
$parameters = $acceptor->getParameters();
331+
$parameters[1] = new NativeParameterReflection(
332+
$parameters[1]->getName(),
333+
$parameters[1]->isOptional(),
334+
$closureThisParameters[$closureVarName],
335+
$parameters[1]->passedByReference(),
336+
$parameters[1]->isVariadic(),
337+
$parameters[1]->getDefaultValue(),
338+
);
339+
$parametersAcceptors = [
340+
new FunctionVariant(
341+
$acceptor->getTemplateTypeMap(),
342+
$acceptor->getResolvedTemplateTypeMap(),
343+
array_values($parameters),
344+
$acceptor->isVariadic(),
345+
$acceptor->getReturnType(),
346+
$acceptor instanceof ExtendedParametersAcceptor ? $acceptor->getCallSiteVarianceMap() : TemplateTypeVarianceMap::createEmpty(),
347+
),
348+
];
349+
}
350+
}
351+
}
352+
}
356353
}
357354

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

0 commit comments

Comments
 (0)