Skip to content

Commit 9438e5e

Browse files
Bartłomiej Nowakbnowak
Bartłomiej Nowak
authored andcommitted
adjust MessageMap to contain only supported cases
1 parent 224c478 commit 9438e5e

File tree

4 files changed

+19
-56
lines changed

4 files changed

+19
-56
lines changed

src/Symfony/Message.php

-40
This file was deleted.

src/Symfony/MessageMap.php

+9-9
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,25 @@
22

33
namespace PHPStan\Symfony;
44

5+
use PHPStan\Type\Type;
6+
57
final class MessageMap
68
{
79

8-
/** @var Message[] */
9-
private $messages = [];
10+
/** @var array<string, Type> */
11+
private $messageMap;
1012

1113
/**
12-
* @param Message[] $messages
14+
* @param array<string, Type> $messageMap
1315
*/
14-
public function __construct(array $messages)
16+
public function __construct(array $messageMap)
1517
{
16-
foreach ($messages as $message) {
17-
$this->messages[$message->getClass()] = $message;
18-
}
18+
$this->messageMap = $messageMap;
1919
}
2020

21-
public function getMessageForClass(string $class): ?Message
21+
public function getTypeForClass(string $class): ?Type
2222
{
23-
return $this->messages[$class] ?? null;
23+
return $this->messageMap[$class] ?? null;
2424
}
2525

2626
}

src/Symfony/MessageMapFactory.php

+7-3
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,16 @@ public function create(): MessageMap
6868
}
6969
}
7070

71-
$messages = [];
71+
$messageMap = [];
7272
foreach ($returnTypesMap as $messageClassName => $returnTypes) {
73-
$messages[] = new Message($messageClassName, $returnTypes);
73+
if (count($returnTypes) !== 1) {
74+
continue;
75+
}
76+
77+
$messageMap[$messageClassName] = $returnTypes[0];
7478
}
7579

76-
return new MessageMap($messages);
80+
return new MessageMap($messageMap);
7781
}
7882

7983
/** @return array<string, array<string, string>> */

src/Type/Symfony/MessengerHandleTraitReturnTypeExtension.php

+3-4
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,12 @@ public function getType(Expr $expr, Scope $scope): ?Type
4646
$arg = $expr->getArgs()[0]->value;
4747
$argClassNames = $scope->getType($arg)->getObjectClassNames();
4848

49-
// todo filter out not handled cases on map creation?
5049
if (count($argClassNames) === 1) {
5150
$messageMap = $this->getMessageMap();
52-
$message = $messageMap->getMessageForClass($argClassNames[0]);
51+
$returnType = $messageMap->getTypeForClass($argClassNames[0]);
5352

54-
if (!is_null($message) && $message->countReturnTypes() === 1) {
55-
return $message->getReturnTypes()[0];
53+
if (!is_null($returnType)) {
54+
return $returnType;
5655
}
5756
}
5857
}

0 commit comments

Comments
 (0)