Skip to content

Commit d51fd0b

Browse files
committed
fix: Block duplicate status code definitions
Signed-off-by: provokateurin <[email protected]>
1 parent 6283132 commit d51fd0b

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

src/ControllerMethod.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,13 @@ public static function parse(string $context, array $definitions, ClassMethod $m
7070
if ($docNode->value instanceof ReturnTagValueNode) {
7171
$type = $docNode->value->type;
7272

73-
$responses = array_merge($responses, ResponseType::resolve($context, $type));
73+
$resolvedResponses = ResponseType::resolve($context, $type);
74+
$statusCodes = array_map(static fn (ControllerMethodResponse|null $response) => $response?->statusCode, $resolvedResponses);
75+
$statusCodesDuplicates = array_filter(array_count_values($statusCodes), static fn (int $count) => $count > 1);
76+
if (!empty($statusCodesDuplicates)) {
77+
Logger::panic($context, 'Each status code can only be defined once, but '. implode(', ', $statusCodesDuplicates). ' was defined multiple times.');
78+
}
79+
$responses = array_merge($responses, $resolvedResponses);
7480
}
7581

7682
if ($docNode->value instanceof ThrowsTagValueNode) {

0 commit comments

Comments
 (0)