Skip to content

Commit 0a1a216

Browse files
committed
Optimization - no need to append setParameter() calls
1 parent 98a7072 commit 0a1a216

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

src/Type/Doctrine/QueryBuilder/QueryBuilderMethodDynamicReturnTypeExtension.php

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace PHPStan\Type\Doctrine\QueryBuilder;
44

55
use PhpParser\Node\Expr\MethodCall;
6+
use PhpParser\Node\Identifier;
67
use PHPStan\Analyser\Scope;
78
use PHPStan\Reflection\MethodReflection;
89
use PHPStan\Reflection\ParametersAcceptorSelector;
@@ -46,11 +47,20 @@ public function getTypeFromMethodCall(
4647
): Type
4748
{
4849
$calledOnType = $scope->getType($methodCall->var);
50+
if (!$methodCall->name instanceof Identifier) {
51+
return $calledOnType;
52+
}
53+
$lowerMethodName = strtolower($methodCall->name->toString());
54+
if (in_array($lowerMethodName, [
55+
'setparameter',
56+
'setparameters',
57+
], true)) {
58+
return $calledOnType;
59+
}
60+
4961
$queryBuilderTypes = DoctrineTypeUtils::getQueryBuilderTypes($calledOnType);
5062
if (count($queryBuilderTypes) === 0) {
51-
return ParametersAcceptorSelector::selectSingle(
52-
$methodReflection->getVariants()
53-
)->getReturnType();
63+
return $calledOnType;
5464
}
5565

5666
$resultTypes = [];

src/Type/Doctrine/QueryBuilder/QueryBuilderTypeSpecifyingExtension.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace PHPStan\Type\Doctrine\QueryBuilder;
44

55
use PhpParser\Node\Expr\MethodCall;
6+
use PhpParser\Node\Identifier;
67
use PHPStan\Analyser\Scope;
78
use PHPStan\Analyser\SpecifiedTypes;
89
use PHPStan\Analyser\TypeSpecifier;
@@ -50,6 +51,17 @@ public function specifyTypes(MethodReflection $methodReflection, MethodCall $nod
5051
if (!$scope->isInFirstLevelStatement()) {
5152
return new SpecifiedTypes([]);
5253
}
54+
if (!$node->name instanceof Identifier) {
55+
return new SpecifiedTypes([]);
56+
}
57+
58+
$lowerMethodName = strtolower($node->name->toString());
59+
if (in_array($lowerMethodName, [
60+
'setparameter',
61+
'setparameters',
62+
], true)) {
63+
return new SpecifiedTypes([]);
64+
}
5365

5466
$returnType = ParametersAcceptorSelector::selectFromArgs(
5567
$scope,

0 commit comments

Comments
 (0)