2019-10-13 07:59:52 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
declare(strict_types=1);
|
2019-03-22 11:48:41 +01:00
|
|
|
|
|
|
|
namespace Rector\PhpSpecToPHPUnit;
|
|
|
|
|
|
|
|
use PhpParser\Node\Expr\Array_;
|
|
|
|
use PhpParser\Node\Scalar\String_;
|
|
|
|
use PhpParser\Node\Stmt\Class_;
|
|
|
|
use PhpParser\Node\Stmt\Return_;
|
|
|
|
|
|
|
|
final class MatchersManipulator
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* @return string[]
|
|
|
|
*/
|
|
|
|
public function resolveMatcherNamesFromClass(Class_ $class): array
|
|
|
|
{
|
2020-07-19 20:52:42 +02:00
|
|
|
$classMethod = $class->getMethod('getMatchers');
|
|
|
|
if ($classMethod === null) {
|
2019-03-22 11:48:41 +01:00
|
|
|
return [];
|
|
|
|
}
|
|
|
|
|
2020-07-19 20:52:42 +02:00
|
|
|
if (! isset($classMethod->stmts[0])) {
|
2019-03-22 11:48:41 +01:00
|
|
|
return [];
|
|
|
|
}
|
|
|
|
|
2020-07-19 20:52:42 +02:00
|
|
|
if (! $classMethod->stmts[0] instanceof Return_) {
|
2019-03-22 11:48:41 +01:00
|
|
|
return [];
|
|
|
|
}
|
|
|
|
|
|
|
|
/** @var Return_ $return */
|
2020-07-19 20:52:42 +02:00
|
|
|
$return = $classMethod->stmts[0];
|
2019-03-22 11:48:41 +01:00
|
|
|
if (! $return->expr instanceof Array_) {
|
|
|
|
return [];
|
|
|
|
}
|
|
|
|
|
|
|
|
$keys = [];
|
|
|
|
foreach ($return->expr->items as $arrayItem) {
|
2020-08-10 23:59:40 +02:00
|
|
|
if ($arrayItem === null) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
2019-03-22 11:48:41 +01:00
|
|
|
if ($arrayItem->key instanceof String_) {
|
|
|
|
$keys[] = $arrayItem->key->value;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $keys;
|
|
|
|
}
|
|
|
|
}
|