mirror of
https://github.com/danog/psalm.git
synced 2024-11-30 04:39:00 +01:00
Fix psl inheritance stuff cc @azjezz
This commit is contained in:
parent
1c2650fe65
commit
1f295e4597
@ -673,8 +673,6 @@ class Populator
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
$parent_interface_storage->dependent_classlikes[strtolower($storage->name)] = true;
|
|
||||||
|
|
||||||
$parent_interfaces = array_merge($parent_interfaces, $parent_interface_storage->parent_interfaces);
|
$parent_interfaces = array_merge($parent_interfaces, $parent_interface_storage->parent_interfaces);
|
||||||
|
|
||||||
$this->inheritMethodsFromParent($storage, $parent_interface_storage);
|
$this->inheritMethodsFromParent($storage, $parent_interface_storage);
|
||||||
@ -683,6 +681,21 @@ class Populator
|
|||||||
}
|
}
|
||||||
|
|
||||||
$storage->parent_interfaces = array_merge($parent_interfaces, $storage->parent_interfaces);
|
$storage->parent_interfaces = array_merge($parent_interfaces, $storage->parent_interfaces);
|
||||||
|
|
||||||
|
foreach ($storage->parent_interfaces as $parent_interface_lc => $_) {
|
||||||
|
try {
|
||||||
|
$parent_interface_lc = strtolower(
|
||||||
|
$this->classlikes->getUnAliasedName(
|
||||||
|
$parent_interface_lc
|
||||||
|
)
|
||||||
|
);
|
||||||
|
$parent_interface_storage = $storage_provider->get($parent_interface_lc);
|
||||||
|
} catch (\InvalidArgumentException $e) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$parent_interface_storage->dependent_classlikes[strtolower($storage->name)] = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function populateDataFromImplementedInterfaces(
|
private function populateDataFromImplementedInterfaces(
|
||||||
|
@ -4240,6 +4240,48 @@ class ClassTemplateExtendsTest extends TestCase
|
|||||||
[],
|
[],
|
||||||
'7.4'
|
'7.4'
|
||||||
],
|
],
|
||||||
|
'inheritInterfacesManyTimes' => [
|
||||||
|
'<?php
|
||||||
|
/**
|
||||||
|
* @template Tv
|
||||||
|
*
|
||||||
|
* @extends IteratorAggregate<int, Tv>
|
||||||
|
*/
|
||||||
|
interface C1 extends \IteratorAggregate
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @template Tv
|
||||||
|
*
|
||||||
|
* @extends C1<Tv>
|
||||||
|
*/
|
||||||
|
interface C2 extends C1
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @template Tv
|
||||||
|
*
|
||||||
|
* @extends C2<Tv>
|
||||||
|
*/
|
||||||
|
interface C3 extends C2
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @template Tv
|
||||||
|
*
|
||||||
|
* @extends C3<Tv>
|
||||||
|
*/
|
||||||
|
interface C4 extends C3
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @psalm-return Traversable<int, Tv>
|
||||||
|
*/
|
||||||
|
function getIterator(): Traversable;
|
||||||
|
}'
|
||||||
|
],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user