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

Fix #714 - fix trait class constants

This commit is contained in:
Matthew Brown 2018-05-08 22:32:57 -04:00
parent 8f9b4098bc
commit 77d4629896
3 changed files with 35 additions and 9 deletions

View File

@ -242,15 +242,17 @@ abstract class ClassLikeChecker extends SourceChecker implements StatementsSourc
$interface_exists = $codebase->interfaceExists($fq_class_name);
if (!$class_exists && !$interface_exists) {
if (IssueBuffer::accepts(
new UndefinedClass(
'Class or interface ' . $fq_class_name . ' does not exist',
$code_location,
$fq_class_name
),
$suppressed_issues
)) {
return false;
if (!$codebase->classlikes->traitExists($fq_class_name)) {
if (IssueBuffer::accepts(
new UndefinedClass(
'Class or interface ' . $fq_class_name . ' does not exist',
$code_location,
$fq_class_name
),
$suppressed_issues
)) {
return false;
}
}
return null;

View File

@ -508,6 +508,16 @@ class ClassLikes
return $storage->parent_interfaces;
}
/**
* @param string $fq_trait_name
*
* @return bool
*/
public function traitExists($fq_trait_name)
{
return $this->hasFullyQualifiedTraitName($fq_trait_name);
}
/**
* Determine whether or not a class has the correct casing
*

View File

@ -522,6 +522,20 @@ class TraitTest extends TestCase
}
}',
],
'traitClassConst' => [
'<?php
trait A {
public function foo(): string {
return B::class;
}
}
trait B {}
class C {
use A;
}'
],
];
}