1
0
mirror of https://github.com/danog/psalm.git synced 2024-11-26 20:34:47 +01:00

Fix false positive in trait comparison in 7.4

Fixes #3042
This commit is contained in:
Brown 2020-04-03 15:11:37 -04:00
parent 3c9ec90919
commit 4f07a8fc5d
2 changed files with 59 additions and 2 deletions

View File

@ -85,6 +85,7 @@ class MethodComparator
$implementer_method_storage,
$guide_method_storage->signature_return_type,
$cased_guide_method_id,
$implementer_called_class_name,
$cased_implementer_method_id,
$code_location,
$suppressed_issues
@ -658,6 +659,7 @@ class MethodComparator
MethodStorage $implementer_method_storage,
Type\Union $guide_signature_return_type,
string $cased_guide_method_id,
string $implementer_called_class_name,
string $cased_implementer_method_id,
CodeLocation $code_location,
array $suppressed_issues
@ -684,8 +686,12 @@ class MethodComparator
? ExpressionAnalyzer::fleshOutType(
$codebase,
$implementer_method_storage->signature_return_type,
$implementer_classlike_storage->name,
$implementer_classlike_storage->name,
$implementer_classlike_storage->is_trait
? $implementer_called_class_name
: $implementer_classlike_storage->name,
$implementer_classlike_storage->is_trait
? $implementer_called_class_name
: $implementer_classlike_storage->name,
$implementer_classlike_storage->parent_class
) : null;

View File

@ -748,6 +748,31 @@ class MethodSignatureTest extends TestCase
}
}'
],
'allowMatchIn74' => [
'<?php
trait FooTrait {
/**
* @return static
*/
public function bar(): self {
return $this;
}
}
interface FooInterface {
/**
* @return static
*/
public function bar(): self;
}
class FooClass implements FooInterface {
use FooTrait;
}',
[],
[],
'7.4'
],
];
}
@ -1250,6 +1275,32 @@ class MethodSignatureTest extends TestCase
}',
'error_message' => 'MethodSignatureMismatch',
],
'preventTraitMatchIn73' => [
'<?php
trait FooTrait {
/**
* @return static
*/
public function bar(): self {
return $this;
}
}
interface FooInterface {
/**
* @return static
*/
public function bar(): self;
}
class FooClass implements FooInterface {
use FooTrait;
}',
'error_message' => 'MethodSignatureMismatch',
[],
false,
'7.3'
],
];
}
}