Skip to content

Commit cede05e

Browse files
committed
Improve docblock reader
1 parent 6511ebf commit cede05e

File tree

6 files changed

+39
-22
lines changed

6 files changed

+39
-22
lines changed

src/Mapping/Driver/DocBlockDriver.php

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
use TypeLang\Mapper\Mapping\Driver\ArrayConfigDriver\ClassConfigLoaderInterface;
99
use TypeLang\Mapper\Mapping\Driver\ArrayConfigDriver\PropertyConfigLoaderInterface;
1010
use TypeLang\Mapper\Mapping\Driver\DocBlockDriver\ClassDocBlockLoaderInterface;
11-
use TypeLang\Mapper\Mapping\Driver\DocBlockDriver\ClassPropertyTypeDriver;
12-
use TypeLang\Mapper\Mapping\Driver\DocBlockDriver\PromotedPropertyTypeDriver;
1311
use TypeLang\Mapper\Mapping\Driver\DocBlockDriver\PropertyDocBlockLoaderInterface;
12+
use TypeLang\Mapper\Mapping\Driver\DocBlockDriver\Reader\ParamTagReader;
13+
use TypeLang\Mapper\Mapping\Driver\DocBlockDriver\Reader\VarTagReader;
1414
use TypeLang\Mapper\Mapping\Driver\DocBlockDriver\TypePropertyDocBlockLoader;
1515
use TypeLang\Mapper\Mapping\Metadata\ClassMetadata;
1616
use TypeLang\Mapper\Runtime\Parser\TypeParserInterface;
@@ -36,9 +36,9 @@ final class DocBlockDriver extends LoadableDriver
3636
*/
3737
private const DEFAULT_VAR_TAG_NAME = 'var';
3838

39-
private readonly PromotedPropertyTypeDriver $promotedProperties;
39+
private readonly ParamTagReader $paramTags;
4040

41-
private readonly ClassPropertyTypeDriver $classProperties;
41+
private readonly VarTagReader $varTags;
4242

4343
/**
4444
* @var list<ClassConfigLoaderInterface>
@@ -68,14 +68,14 @@ public function __construct(
6868
$varTagName => new VarTagFactory(),
6969
]));
7070

71-
$this->classProperties = new ClassPropertyTypeDriver(
71+
$this->varTags = new VarTagReader(
7272
varTagName: $varTagName,
7373
parser: $parser,
7474
);
7575

76-
$this->promotedProperties = new PromotedPropertyTypeDriver(
76+
$this->paramTags = new ParamTagReader(
7777
paramTagName: $paramTagName,
78-
classProperties: $this->classProperties,
78+
varTag: $this->varTags,
7979
parser: $parser,
8080
);
8181

@@ -101,8 +101,8 @@ private function createPropertyLoaders(): array
101101
{
102102
return [
103103
new TypePropertyDocBlockLoader(
104-
promotedProperties: $this->promotedProperties,
105-
classProperties: $this->classProperties,
104+
paramTags: $this->paramTags,
105+
varTags: $this->varTags,
106106
),
107107
];
108108
}
@@ -163,6 +163,6 @@ class: $reflection,
163163
}
164164
}
165165

166-
$this->promotedProperties->cleanup();
166+
$this->paramTags->cleanup();
167167
}
168168
}

src/Mapping/Driver/DocBlockDriver/PromotedPropertyTypeDriver.php renamed to src/Mapping/Driver/DocBlockDriver/Reader/ParamTagReader.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
declare(strict_types=1);
44

5-
namespace TypeLang\Mapper\Mapping\Driver\DocBlockDriver;
5+
namespace TypeLang\Mapper\Mapping\Driver\DocBlockDriver\Reader;
66

77
use TypeLang\Mapper\Mapping\Metadata\PropertyMetadata;
88
use TypeLang\Parser\Node\Stmt\TypeStatement;
@@ -11,7 +11,7 @@
1111
use TypeLang\PHPDoc\Standard\ParamTag;
1212
use TypeLang\PHPDoc\Tag\TagInterface;
1313

14-
final class PromotedPropertyTypeDriver
14+
final class ParamTagReader implements TagReaderInterface
1515
{
1616
/**
1717
* @var array<class-string, DocBlock>
@@ -23,7 +23,7 @@ final class PromotedPropertyTypeDriver
2323
*/
2424
public function __construct(
2525
private readonly string $paramTagName,
26-
private readonly ClassPropertyTypeDriver $classProperties,
26+
private readonly VarTagReader $varTag,
2727
private readonly ParserInterface $parser,
2828
) {}
2929

@@ -32,7 +32,7 @@ public function __construct(
3232
*/
3333
public function findType(\ReflectionProperty $property, PropertyMetadata $meta): ?TypeStatement
3434
{
35-
$result = $this->classProperties->findType($property);
35+
$result = $this->varTag->findType($property, $meta);
3636

3737
if ($result !== null) {
3838
return $result;
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace TypeLang\Mapper\Mapping\Driver\DocBlockDriver\Reader;
6+
7+
use TypeLang\Mapper\Mapping\Metadata\PropertyMetadata;
8+
use TypeLang\Parser\Node\Stmt\TypeStatement;
9+
10+
interface TagReaderInterface
11+
{
12+
public function findType(\ReflectionProperty $property, PropertyMetadata $meta): ?TypeStatement;
13+
}

src/Mapping/Driver/DocBlockDriver/ClassPropertyTypeDriver.php renamed to src/Mapping/Driver/DocBlockDriver/Reader/VarTagReader.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,16 @@
22

33
declare(strict_types=1);
44

5-
namespace TypeLang\Mapper\Mapping\Driver\DocBlockDriver;
5+
namespace TypeLang\Mapper\Mapping\Driver\DocBlockDriver\Reader;
66

7+
use TypeLang\Mapper\Mapping\Metadata\PropertyMetadata;
78
use TypeLang\Parser\Node\Stmt\TypeStatement;
89
use TypeLang\PHPDoc\DocBlock;
910
use TypeLang\PHPDoc\ParserInterface;
1011
use TypeLang\PHPDoc\Standard\VarTag;
1112
use TypeLang\PHPDoc\Tag\TagInterface;
1213

13-
final class ClassPropertyTypeDriver
14+
final class VarTagReader implements TagReaderInterface
1415
{
1516
/**
1617
* @param non-empty-string $varTagName
@@ -23,7 +24,7 @@ public function __construct(
2324
/**
2425
* Return type for given property from docblock.
2526
*/
26-
public function findType(\ReflectionProperty $property): ?TypeStatement
27+
public function findType(\ReflectionProperty $property, PropertyMetadata $meta): ?TypeStatement
2728
{
2829
$phpdoc = $this->getDocBlockFromProperty($property);
2930

src/Mapping/Driver/DocBlockDriver/TypePropertyDocBlockLoader.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
use TypeLang\Mapper\Exception\Definition\PropertyTypeNotFoundException;
88
use TypeLang\Mapper\Exception\Definition\TypeNotFoundException;
9+
use TypeLang\Mapper\Mapping\Driver\DocBlockDriver\Reader\ParamTagReader;
10+
use TypeLang\Mapper\Mapping\Driver\DocBlockDriver\Reader\VarTagReader;
911
use TypeLang\Mapper\Mapping\Metadata\PropertyMetadata;
1012
use TypeLang\Mapper\Mapping\Metadata\TypeMetadata;
1113
use TypeLang\Mapper\Runtime\Parser\TypeParserInterface;
@@ -15,8 +17,8 @@
1517
final class TypePropertyDocBlockLoader extends PropertyDocBlockLoader
1618
{
1719
public function __construct(
18-
private readonly PromotedPropertyTypeDriver $promotedProperties,
19-
private readonly ClassPropertyTypeDriver $classProperties,
20+
private readonly ParamTagReader $paramTags,
21+
private readonly VarTagReader $varTags,
2022
) {}
2123

2224
public function load(
@@ -60,9 +62,9 @@ private function findType(\ReflectionClass $class, PropertyMetadata $meta): ?Typ
6062
$property = $class->getProperty($meta->name);
6163

6264
if ($property->isPromoted()) {
63-
return $this->promotedProperties->findType($property, $meta);
65+
return $this->paramTags->findType($property, $meta);
6466
}
6567

66-
return $this->classProperties->findType($property);
68+
return $this->varTags->findType($property, $meta);
6769
}
6870
}

src/Type/ClassType/ClassTypeDenormalizer.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use TypeLang\Mapper\Runtime\Path\Entry\ObjectPropertyEntry;
1818
use TypeLang\Mapper\Runtime\PropertyAccessor\PropertyAccessorInterface;
1919
use TypeLang\Mapper\Type\TypeInterface;
20+
use TypeLang\Parser\Node\Stmt\NamedTypeNode;
2021

2122
/**
2223
* @template T of object
@@ -51,7 +52,7 @@ private function getPropertyType(PropertyMetadata $meta, Context $context): Type
5152
$info = $meta->type;
5253

5354
if ($info === null) {
54-
return $context->getTypeByDefinition('mixed');
55+
return $context->getTypeByStatement(new NamedTypeNode('mixed'));
5556
}
5657

5758
return $info->type;

0 commit comments

Comments
 (0)