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

Fix #3917 - allow comparisons between classes and interfaces

This commit is contained in:
Matthew Brown 2020-08-16 16:25:59 -04:00
parent 38af5db8f0
commit cb243778d2
3 changed files with 15 additions and 3 deletions

View File

@ -239,7 +239,7 @@ class ObjectComparator
$input_type_is_interface = $codebase->interfaceExists($intersection_input_type_lower); $input_type_is_interface = $codebase->interfaceExists($intersection_input_type_lower);
$container_type_is_interface = $codebase->interfaceExists($intersection_container_type_lower); $container_type_is_interface = $codebase->interfaceExists($intersection_container_type_lower);
if ($allow_interface_equality && $input_type_is_interface && $container_type_is_interface) { if ($allow_interface_equality && $container_type_is_interface) {
continue 2; continue 2;
} }

View File

@ -428,7 +428,8 @@ class UnionTypeComparator
$type2_part, $type2_part,
true, true,
false, false,
$first_comparison_result $first_comparison_result,
true
) )
&& !$first_comparison_result->to_string_cast && !$first_comparison_result->to_string_cast
) || (AtomicTypeComparator::isContainedBy( ) || (AtomicTypeComparator::isContainedBy(
@ -437,7 +438,8 @@ class UnionTypeComparator
$type1_part, $type1_part,
true, true,
false, false,
$second_comparison_result $second_comparison_result,
true
) )
&& !$second_comparison_result->to_string_cast && !$second_comparison_result->to_string_cast
) || ($first_comparison_result->type_coerced ) || ($first_comparison_result->type_coerced

View File

@ -2818,6 +2818,16 @@ class ConditionalTest extends \Psalm\Tests\TestCase
} }
}' }'
], ],
'getClassInterfaceCanBeClass' => [
'<?php
interface Id {}
class A {
public function is(Id $other): bool {
return get_class($this) === get_class($other);
}
}'
],
]; ];
} }