Skip to content

Commit c2aff04

Browse files
committed
fix: #1011 class reflection was wrongly parsing docblocks
1 parent 5144bf3 commit c2aff04

File tree

3 files changed

+34
-3
lines changed

3 files changed

+34
-3
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Sylius package.
5+
*
6+
* (c) Sylius Sp. z o.o.
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
declare(strict_types=1);
13+
14+
namespace Sylius\Component\Resource\Tests\Dummy;
15+
16+
/**
17+
* This docblock for this class explains what to do.
18+
*/
19+
final readonly class DummyClassWithDocBlock
20+
{
21+
}

src/Component/legacy/tests/Reflection/ClassReflectionTest.php

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
use PHPUnit\Framework\TestCase;
2020
use Sylius\Component\Resource\Tests\Dummy\DummyClassOne;
2121
use Sylius\Component\Resource\Tests\Dummy\DummyClassTwo;
22+
use Sylius\Component\Resource\Tests\Dummy\DummyClassWithDocBlock;
2223
use Sylius\Component\Resource\Tests\Dummy\TraitPass;
2324
use Sylius\Resource\Annotation\SyliusCrudRoutes;
2425
use Sylius\Resource\Annotation\SyliusRoute;
@@ -38,16 +39,25 @@ public function it_returns_resource_classes_from_paths(): void
3839
/** @test */
3940
public function it_returns_resource_classes_from_a_directory(): void
4041
{
41-
$resources = ClassReflection::getResourcesByPath(__DIR__ . '/../Dummy');
42+
$resources = iterator_to_array(ClassReflection::getResourcesByPath(__DIR__ . '/../Dummy'));
4243

4344
$this->assertContains(DummyClassOne::class, $resources);
4445
$this->assertContains(DummyClassTwo::class, $resources);
4546
}
4647

48+
/** @test */
49+
public function it_excludes_docblock_comments(): void
50+
{
51+
$resources = iterator_to_array(ClassReflection::getResourcesByPath(__DIR__ . '/../Dummy'));
52+
53+
$this->assertContains(DummyClassWithDocBlock::class, $resources);
54+
$this->assertNotContains('This docblock for this class explains what to do', $resources);
55+
}
56+
4757
/** @test */
4858
public function it_excludes_traits(): void
4959
{
50-
$resources = ClassReflection::getResourcesByPath(__DIR__ . '/../Dummy');
60+
$resources = iterator_to_array(ClassReflection::getResourcesByPath(__DIR__ . '/../Dummy'));
5161

5262
$this->assertNotContains(TraitPass::class, $resources);
5363
}

src/Component/src/Reflection/ClassReflection.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public static function getResourcesByPath(string $path): iterable
4646

4747
$namespace = $matches[1] ?? null;
4848

49-
if (!preg_match('/class\s+(\w+)/', $fileContent, $matches)) {
49+
if (!preg_match('/^(?:\s*(?:final|abstract|readonly)\s+)*class\s+(\w+)/mi', $fileContent, $matches)) {
5050
// no class found
5151
continue;
5252
}

0 commit comments

Comments
 (0)