|
49 | 49 | use Psr\Log\LoggerInterface; |
50 | 50 | use Ramsey\Collection\Exception\CollectionMismatchException; |
51 | 51 |
|
| 52 | +use function array_filter; |
52 | 53 | use function class_exists; |
53 | 54 | use function count; |
54 | 55 | use function is_a; |
@@ -226,18 +227,18 @@ private function loadDescriptorParser(string $parserNameOrScript): DescriptorPar |
226 | 227 | */ |
227 | 228 | private function write(callable $formatter, DescriptorCollection $descriptors): void |
228 | 229 | { |
229 | | - if ($this->options->flatten === true) { |
230 | | - /** @var DescriptorInterface[] $flattened */ |
231 | | - $flattened = $descriptors->map($this->flattenMessage())->toArray(); |
232 | | - $descriptors = new DescriptorCollection($flattened); |
233 | | - } |
234 | | - |
235 | 230 | if ($this->options->validateMessages === true && count($this->errors) > 0) { |
236 | 231 | $this->logger->error('Validation errors encountered; extraction failed'); |
237 | 232 |
|
238 | 233 | return; |
239 | 234 | } |
240 | 235 |
|
| 236 | + if ($this->options->flatten === true) { |
| 237 | + /** @var DescriptorInterface[] $flattened */ |
| 238 | + $flattened = $descriptors->map($this->flattenMessage())->toArray(); |
| 239 | + $descriptors = new DescriptorCollection(array_filter($flattened)); |
| 240 | + } |
| 241 | + |
241 | 242 | $file = $this->options->outFile ?? 'php://output'; |
242 | 243 |
|
243 | 244 | $writerOptions = new WriterOptions(); |
@@ -282,11 +283,15 @@ public function __invoke( |
282 | 283 |
|
283 | 284 | private function flattenMessage(): Closure |
284 | 285 | { |
285 | | - return function (Descriptor $descriptor): Descriptor { |
| 286 | + return function (Descriptor $descriptor): ?Descriptor { |
286 | 287 | $message = $descriptor->getDefaultMessage(); |
287 | 288 | $messageFormatParser = new MessageFormatParser((string) $message); |
288 | 289 | $result = $messageFormatParser->parse(); |
289 | 290 |
|
| 291 | + if ($result->err !== null) { |
| 292 | + return null; |
| 293 | + } |
| 294 | + |
290 | 295 | /** @var MessageFormatParser\Type\ElementCollection $messageAst */ |
291 | 296 | $messageAst = $result->val; |
292 | 297 |
|
|
0 commit comments