From c9d76cb38ae363adb9c5102271040f75e5ff4598 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20Pudil?= Date: Thu, 8 Dec 2022 10:15:47 +0100 Subject: [PATCH] Do not check variance validity in private methods --- .../FunctionSignatureVarianceRule.php | 1 + .../Generics/MethodSignatureVarianceRule.php | 1 + src/Rules/Generics/VarianceCheck.php | 27 +++++++++++-------- ...ethod-signature-variance-contravariant.php | 3 +++ .../method-signature-variance-covariant.php | 3 +++ 5 files changed, 24 insertions(+), 11 deletions(-) diff --git a/src/Rules/Generics/FunctionSignatureVarianceRule.php b/src/Rules/Generics/FunctionSignatureVarianceRule.php index 9b75ab2f57..374c40ff40 100644 --- a/src/Rules/Generics/FunctionSignatureVarianceRule.php +++ b/src/Rules/Generics/FunctionSignatureVarianceRule.php @@ -40,6 +40,7 @@ public function processNode(Node $node, Scope $scope): array sprintf('in return type of function %s()', $functionName), sprintf('in function %s()', $functionName), false, + false, ); } diff --git a/src/Rules/Generics/MethodSignatureVarianceRule.php b/src/Rules/Generics/MethodSignatureVarianceRule.php index b2207734d9..a7f56d585a 100644 --- a/src/Rules/Generics/MethodSignatureVarianceRule.php +++ b/src/Rules/Generics/MethodSignatureVarianceRule.php @@ -39,6 +39,7 @@ public function processNode(Node $node, Scope $scope): array sprintf('in return type of method %s::%s()', $method->getDeclaringClass()->getDisplayName(), $method->getName()), sprintf('in method %s::%s()', $method->getDeclaringClass()->getDisplayName(), $method->getName()), $method->getName() === '__construct' || $method->isStatic(), + $method->isPrivate(), ); } diff --git a/src/Rules/Generics/VarianceCheck.php b/src/Rules/Generics/VarianceCheck.php index 34f2e4ffe6..3d1670a3c8 100644 --- a/src/Rules/Generics/VarianceCheck.php +++ b/src/Rules/Generics/VarianceCheck.php @@ -20,21 +20,11 @@ public function checkParametersAcceptor( string $returnTypeMessage, string $generalMessage, bool $isStatic, + bool $isPrivate, ): array { $errors = []; - foreach ($parametersAcceptor->getParameters() as $parameterReflection) { - $variance = $isStatic - ? TemplateTypeVariance::createStatic() - : TemplateTypeVariance::createContravariant(); - $type = $parameterReflection->getType(); - $message = sprintf($parameterTypeMessage, $parameterReflection->getName()); - foreach ($this->check($variance, $type, $message) as $error) { - $errors[] = $error; - } - } - foreach ($parametersAcceptor->getTemplateTypeMap()->getTypes() as $templateType) { if (!$templateType instanceof TemplateType || $templateType->getScope()->getFunctionName() === null @@ -50,6 +40,21 @@ public function checkParametersAcceptor( ))->build(); } + if ($isPrivate) { + return $errors; + } + + foreach ($parametersAcceptor->getParameters() as $parameterReflection) { + $variance = $isStatic + ? TemplateTypeVariance::createStatic() + : TemplateTypeVariance::createContravariant(); + $type = $parameterReflection->getType(); + $message = sprintf($parameterTypeMessage, $parameterReflection->getName()); + foreach ($this->check($variance, $type, $message) as $error) { + $errors[] = $error; + } + } + $variance = TemplateTypeVariance::createCovariant(); $type = $parametersAcceptor->getReturnType(); foreach ($this->check($variance, $type, $returnTypeMessage) as $error) { diff --git a/tests/PHPStan/Rules/Generics/data/method-signature-variance-contravariant.php b/tests/PHPStan/Rules/Generics/data/method-signature-variance-contravariant.php index 8e38f07574..2b5394497a 100644 --- a/tests/PHPStan/Rules/Generics/data/method-signature-variance-contravariant.php +++ b/tests/PHPStan/Rules/Generics/data/method-signature-variance-contravariant.php @@ -69,4 +69,7 @@ function l() {} /** @return Invariant> */ function m() {} + + /** @return X */ + private function n() {} } diff --git a/tests/PHPStan/Rules/Generics/data/method-signature-variance-covariant.php b/tests/PHPStan/Rules/Generics/data/method-signature-variance-covariant.php index bca969516a..4837dbba5d 100644 --- a/tests/PHPStan/Rules/Generics/data/method-signature-variance-covariant.php +++ b/tests/PHPStan/Rules/Generics/data/method-signature-variance-covariant.php @@ -69,4 +69,7 @@ function l() {} /** @return Invariant> */ function m() {} + + /** @param X $n */ + private function n($n) {} }