Skip to content

Commit 07b758d

Browse files
authored
[CodeQuality] Handle intersection on OptionalParametersAfterRequiredRector (#7223)
1 parent 89accb6 commit 07b758d

2 files changed

Lines changed: 21 additions & 8 deletions

File tree

rules-tests/CodeQuality/Rector/ClassMethod/OptionalParametersAfterRequiredRector/Fixture/typed_params.php.inc

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ class TypedParams
1515
function run3($optional = 1, null|int $required)
1616
{
1717
}
18+
19+
function run4($optional = 1, A&B $required)
20+
{
21+
}
1822
}
1923

2024
?>
@@ -36,6 +40,10 @@ class TypedParams
3640
function run3($optional = 1, null|int $required = null)
3741
{
3842
}
43+
44+
function run4($optional = 1, (A&B)|null $required = null)
45+
{
46+
}
3947
}
4048

4149
?>

rules/CodeQuality/Rector/ClassMethod/OptionalParametersAfterRequiredRector.php

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -85,32 +85,37 @@ public function refactor(Node $node): ClassMethod|Function_|null
8585
$hasChanged = true;
8686

8787
$param->default = new ConstFetch(new Name('null'));
88-
$paramType = $param->type;
8988

90-
if (! $paramType instanceof Node) {
89+
if (! $param->type instanceof Node) {
9190
continue;
9291
}
9392

94-
if ($paramType instanceof NullableType) {
93+
if ($param->type instanceof NullableType) {
9594
continue;
9695
}
9796

98-
if ($paramType instanceof UnionType || $paramType instanceof IntersectionType) {
99-
foreach ($paramType->types as $unionedType) {
97+
if ($param->type instanceof UnionType) {
98+
foreach ($param->type->types as $unionedType) {
10099
if ($unionedType instanceof Identifier && $this->isName($unionedType, 'null')) {
101100
continue 2;
102101
}
103102
}
104103

105-
$paramType->types[] = new Identifier('null');
104+
$param->type->types[] = new Identifier('null');
106105
continue;
107106
}
108107

109-
if ($paramType instanceof ComplexType) {
108+
if ($param->type instanceof IntersectionType) {
109+
$param->type = new UnionType([$param->type, new Identifier('null')]);
110+
111+
continue;
112+
}
113+
114+
if ($param->type instanceof ComplexType) {
110115
continue;
111116
}
112117

113-
$param->type = new NullableType($paramType);
118+
$param->type = new NullableType($param->type);
114119
}
115120
}
116121

0 commit comments

Comments
 (0)