Skip to content

Commit dfde47a

Browse files
committed
Add null as possible return type of Request::getAttribute()
1 parent 7600174 commit dfde47a

File tree

3 files changed

+9
-8
lines changed

3 files changed

+9
-8
lines changed

src/Type/RequestDynamicReturnTypeExtension.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use PHPStan\Reflection\ParametersAcceptorSelector;
1010
use PHPStan\Type\DynamicMethodReturnTypeExtension;
1111
use PHPStan\Type\Type;
12+
use PHPStan\Type\TypeCombinator;
1213

1314
class RequestDynamicReturnTypeExtension implements DynamicMethodReturnTypeExtension
1415
{
@@ -46,7 +47,7 @@ public function getTypeFromMethodCall(
4647
}
4748

4849
if (isset($this->requestGetAttributeMapping[$argument->value->value])) {
49-
return $this->typeStringResolver->resolve($this->requestGetAttributeMapping[$argument->value->value]);
50+
return TypeCombinator::addNull($this->typeStringResolver->resolve($this->requestGetAttributeMapping[$argument->value->value]));
5051
}
5152

5253
return ParametersAcceptorSelector::selectSingle($methodReflection->getVariants())->getReturnType();

tests/Unit/Type/data/request-get-attribute-return-types.neon

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ parameters:
22
typo3:
33
requestGetAttributeMapping:
44
myCustomAttribute: FlowdGmbh\MyProject\Http\MyAttribute
5-
myCustomNullableAttribute: FlowdGmbh\MyProject\Http\MyAttribute|null
5+
myCustomThatCanBeIntAttribute: FlowdGmbh\MyProject\Http\MyAttribute|int

tests/Unit/Type/data/request-get-attribute-return-types.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@ class MyRequest
1414

1515
public function getAttributeTests(ServerRequestInterface $request): void
1616
{
17-
assertType(SiteLanguage::class, $request->getAttribute('language'));
18-
assertType(Site::class, $request->getAttribute('site'));
19-
assertType(NormalizedParams::class, $request->getAttribute('normalizedParams'));
20-
assertType('1|2|4|8|16', $request->getAttribute('applicationType'));
21-
assertType('FlowdGmbh\\MyProject\\Http\\MyAttribute', $request->getAttribute('myCustomAttribute'));
22-
assertType('FlowdGmbh\\MyProject\\Http\\MyAttribute|null', $request->getAttribute('myCustomNullableAttribute'));
17+
assertType(SiteLanguage::class . '|null', $request->getAttribute('language'));
18+
assertType(Site::class . '|null', $request->getAttribute('site'));
19+
assertType(NormalizedParams::class . '|null', $request->getAttribute('normalizedParams'));
20+
assertType('1|2|4|8|16|null', $request->getAttribute('applicationType'));
21+
assertType('FlowdGmbh\\MyProject\\Http\\MyAttribute|null', $request->getAttribute('myCustomAttribute'));
22+
assertType('FlowdGmbh\\MyProject\\Http\\MyAttribute|int|null', $request->getAttribute('myCustomThatCanBeIntAttribute'));
2323
}
2424

2525
}

0 commit comments

Comments
 (0)