Skip to content

Commit 0be1424

Browse files
staabmclxmstaab
andauthored
prevent wrong type inference on doctrine dbal 2.x (#151)
Co-authored-by: Markus Staab <[email protected]>
1 parent 4c7aa6e commit 0be1424

File tree

3 files changed

+16
-1
lines changed

3 files changed

+16
-1
lines changed

composer.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
"require": {
66
"php": "^8.0",
77
"ext-mysqli": "*",
8+
"composer-runtime-api": "^2.0",
9+
"composer/semver": "^3.2",
810
"phpstan/phpstan": "^1.2"
911
},
1012
"require-dev": {

src/Extensions/DoctrineConnectionDynamicReturnTypeExtension.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
namespace staabm\PHPStanDba\Extensions;
66

7+
use Composer\InstalledVersions;
8+
use Composer\Semver\VersionParser;
79
use Doctrine\DBAL\Connection;
810
use Doctrine\DBAL\Result;
911
use Doctrine\DBAL\Statement;
@@ -51,6 +53,11 @@ public function getTypeFromMethodCall(MethodReflection $methodReflection, Method
5153
return $defaultReturn;
5254
}
5355

56+
// make sure we don't report wrong types in doctrine 2.x
57+
if (!InstalledVersions::satisfies(new VersionParser(), 'doctrine/dbal', '3.*')) {
58+
return $defaultReturn;
59+
}
60+
5461
$resultType = $this->inferType($methodReflection, $args[0]->value, $scope);
5562
if (null !== $resultType) {
5663
return $resultType;

src/Extensions/DoctrineResultDynamicReturnTypeExtension.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
namespace staabm\PHPStanDba\Extensions;
66

7+
use Composer\InstalledVersions;
8+
use Composer\Semver\VersionParser;
79
use Doctrine\DBAL\Result;
810
use PhpParser\Node\Expr\MethodCall;
911
use PHPStan\Analyser\Scope;
@@ -37,8 +39,12 @@ public function getTypeFromMethodCall(MethodReflection $methodReflection, Method
3739
{
3840
$defaultReturn = ParametersAcceptorSelector::selectSingle($methodReflection->getVariants())->getReturnType();
3941

40-
$resultType = $scope->getType($methodCall->var);
42+
// make sure we don't report wrong types in doctrine 2.x
43+
if (!InstalledVersions::satisfies(new VersionParser(), 'doctrine/dbal', '3.*')) {
44+
return $defaultReturn;
45+
}
4146

47+
$resultType = $scope->getType($methodCall->var);
4248
if (!$resultType instanceof GenericObjectType) {
4349
return $defaultReturn;
4450
}

0 commit comments

Comments
 (0)