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) {} }