mirror of
https://github.com/danog/psalm.git
synced 2024-11-30 04:39:00 +01:00
Fix trait method evaluation order
This commit is contained in:
parent
c38cf9b672
commit
0b58ee425d
@ -115,6 +115,9 @@ trait CanAlias
|
|||||||
return $this->aliased_classes_flipped;
|
return $this->aliased_classes_flipped;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Aliases
|
||||||
|
*/
|
||||||
public function getAliases()
|
public function getAliases()
|
||||||
{
|
{
|
||||||
return new Aliases(
|
return new Aliases(
|
||||||
|
@ -566,6 +566,19 @@ class ProjectChecker
|
|||||||
|
|
||||||
$storage_provider = $this->classlike_storage_provider;
|
$storage_provider = $this->classlike_storage_provider;
|
||||||
|
|
||||||
|
foreach ($storage->used_traits as $used_trait_lc => $used_trait) {
|
||||||
|
try {
|
||||||
|
$trait_storage = $storage_provider->get($used_trait_lc);
|
||||||
|
} catch (\InvalidArgumentException $e) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->populateClassLikeStorage($trait_storage, $dependent_classlikes);
|
||||||
|
|
||||||
|
$this->inheritMethodsFromParent($storage, $trait_storage);
|
||||||
|
$this->inheritPropertiesFromParent($storage, $trait_storage);
|
||||||
|
}
|
||||||
|
|
||||||
$dependent_classlikes[strtolower($storage->name)] = true;
|
$dependent_classlikes[strtolower($storage->name)] = true;
|
||||||
|
|
||||||
if (isset($storage->parent_classes[0])) {
|
if (isset($storage->parent_classes[0])) {
|
||||||
@ -657,19 +670,6 @@ class ProjectChecker
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($storage->used_traits as $used_trait_lc => $used_trait) {
|
|
||||||
try {
|
|
||||||
$trait_storage = $storage_provider->get($used_trait_lc);
|
|
||||||
} catch (\InvalidArgumentException $e) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->populateClassLikeStorage($trait_storage, $dependent_classlikes);
|
|
||||||
|
|
||||||
$this->inheritMethodsFromParent($storage, $trait_storage);
|
|
||||||
$this->inheritPropertiesFromParent($storage, $trait_storage);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($storage->location) {
|
if ($storage->location) {
|
||||||
$file_path = $storage->location->file_path;
|
$file_path = $storage->location->file_path;
|
||||||
|
|
||||||
|
@ -122,7 +122,7 @@ trait GenericTrait
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param array<string, string|Type\Union> $template_types
|
* @param array<string, string|Union> $template_types
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
|
@ -162,6 +162,27 @@ class UnusedCodeTest extends TestCase
|
|||||||
$m->foo("value");
|
$m->foo("value");
|
||||||
$m->modifyFoo("value2");',
|
$m->modifyFoo("value2");',
|
||||||
],
|
],
|
||||||
|
'usedTraitMethod' => [
|
||||||
|
'<?php
|
||||||
|
class A {
|
||||||
|
public function foo() : void {
|
||||||
|
echo "parent method";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
trait T {
|
||||||
|
public function foo() : void {
|
||||||
|
echo "trait method";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class B extends A {
|
||||||
|
use T;
|
||||||
|
}
|
||||||
|
|
||||||
|
(new A)->foo();
|
||||||
|
(new B)->foo();',
|
||||||
|
],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user