1
0
mirror of https://github.com/danog/psalm.git synced 2024-12-02 09:37:59 +01:00

Fix thread data merging

This commit is contained in:
Daniil Gentili 2023-07-25 10:38:48 +02:00
parent 1ad9fc66f8
commit 8cc5af9592
Signed by: danog
GPG Key ID: 8C1BE3B34B230CA7
2 changed files with 19 additions and 9 deletions

View File

@ -2347,15 +2347,24 @@ class ClassLikes
$existing_classes,
] = $thread_data;
$this->existing_classlikes_lc = array_merge($existing_classlikes_lc, $this->existing_classlikes_lc);
$this->existing_classes_lc = array_merge($existing_classes_lc, $this->existing_classes_lc);
$this->existing_traits_lc = array_merge($existing_traits_lc, $this->existing_traits_lc);
$this->existing_traits = array_merge($existing_traits, $this->existing_traits);
$this->existing_enums_lc = array_merge($existing_enums_lc, $this->existing_enums_lc);
$this->existing_enums = array_merge($existing_enums, $this->existing_enums);
$this->existing_interfaces_lc = array_merge($existing_interfaces_lc, $this->existing_interfaces_lc);
$this->existing_interfaces = array_merge($existing_interfaces, $this->existing_interfaces);
$this->existing_classes = array_merge($existing_classes, $this->existing_classes);
$this->existing_classlikes_lc = self::mergeThreadData($existing_classlikes_lc, $this->existing_classlikes_lc);
$this->existing_classes_lc = self::mergeThreadData($existing_classes_lc, $this->existing_classes_lc);
$this->existing_traits_lc = self::mergeThreadData($existing_traits_lc, $this->existing_traits_lc);
$this->existing_traits = self::mergeThreadData($existing_traits, $this->existing_traits);
$this->existing_enums_lc = self::mergeThreadData($existing_enums_lc, $this->existing_enums_lc);
$this->existing_enums = self::mergeThreadData($existing_enums, $this->existing_enums);
$this->existing_interfaces_lc = self::mergeThreadData($existing_interfaces_lc, $this->existing_interfaces_lc);
$this->existing_interfaces = self::mergeThreadData($existing_interfaces, $this->existing_interfaces);
$this->existing_classes = self::mergeThreadData($existing_classes, $this->existing_classes);
}
private static function mergeThreadData(array $old, array $new): array
{
foreach ($new as $name => $value) {
if (!isset($old[$name]) || (!$old[$name] && $value)) {
$old[$name] = $value;
}
}
return $old;
}
public function getStorageFor(string $fq_class_name): ?ClassLikeStorage

View File

@ -631,6 +631,7 @@ class InternalCallMapHandlerTest extends TestCase
} catch (InvalidArgumentException $e) {
if (preg_match('/^Could not get class storage for (.*)$/', $e->getMessage(), $matches)
&& !class_exists($matches[1])
&& !interface_exists($matches[1])
) {
$this->fail("Class used in CallMap does not exist: {$matches[1]}");
}