mirror of
https://github.com/danog/psalm.git
synced 2024-11-27 12:55:26 +01:00
Expand documentation method return type to ensure we’re giving a fair shot
This commit is contained in:
parent
45694d37d4
commit
04f3e29f94
@ -764,15 +764,29 @@ class Methods
|
||||
return clone $candidate_type;
|
||||
}
|
||||
|
||||
$overridden_class_storage =
|
||||
$this->classlike_storage_provider->get($overridden_method_id->fq_class_name);
|
||||
|
||||
$overridden_storage_return_type = \Psalm\Internal\Type\TypeExpander::expandUnion(
|
||||
$source_analyzer->getCodebase(),
|
||||
clone $overridden_storage->return_type,
|
||||
$overridden_method_id->fq_class_name,
|
||||
$appearing_fq_class_name,
|
||||
$overridden_class_storage->parent_class,
|
||||
true,
|
||||
false,
|
||||
$storage->final
|
||||
);
|
||||
|
||||
$old_contained_by_new = UnionTypeComparator::isContainedBy(
|
||||
$source_analyzer->getCodebase(),
|
||||
$candidate_type,
|
||||
$overridden_storage->return_type
|
||||
$overridden_storage_return_type
|
||||
);
|
||||
|
||||
$new_contained_by_old = UnionTypeComparator::isContainedBy(
|
||||
$source_analyzer->getCodebase(),
|
||||
$overridden_storage->return_type,
|
||||
$overridden_storage_return_type,
|
||||
$candidate_type
|
||||
);
|
||||
|
||||
|
@ -4350,6 +4350,56 @@ class ClassTemplateExtendsTest extends TestCase
|
||||
|
||||
$foo = new ObjectStorage();'
|
||||
],
|
||||
'liskovTerminatedByFinalClass' => [
|
||||
'<?php
|
||||
final class CustomEnum extends Enum
|
||||
{
|
||||
public static function all() : CustomEnumSet
|
||||
{
|
||||
return new CustomEnumSet();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @template T of Enum
|
||||
*/
|
||||
class EnumSet
|
||||
{
|
||||
private $type;
|
||||
|
||||
/**
|
||||
* @param class-string<T> $type
|
||||
*/
|
||||
public function __construct(string $type)
|
||||
{
|
||||
$this->type = $type;
|
||||
}
|
||||
}
|
||||
|
||||
abstract class Enum {
|
||||
/**
|
||||
* @return EnumSet<static>
|
||||
*/
|
||||
public static function all() : EnumSet
|
||||
{
|
||||
return new EnumSet(static::class);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @extends EnumSet<CustomEnum>
|
||||
*/
|
||||
final class CustomEnumSet extends EnumSet {
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(CustomEnum::class);
|
||||
}
|
||||
}',
|
||||
[],
|
||||
[],
|
||||
'7.4'
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user