Skip to content

Commit 6c8fef9

Browse files
authored
Merge pull request #1016 from doctrine/PHP8.4-ImplicitlyNull
Add PHP 8.4 support
2 parents 3b1a31e + b397427 commit 6c8fef9

File tree

4 files changed

+17
-7
lines changed

4 files changed

+17
-7
lines changed

.github/workflows/continuous-integration.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,6 @@ jobs:
1717
name: "PHPUnit"
1818
uses: "doctrine/.github/.github/workflows/[email protected]"
1919
with:
20-
php-versions: '["7.1", "7.2", "7.3", "7.4", "8.0", "8.1", "8.2", "8.3"]'
20+
php-versions: '["7.1", "7.2", "7.3", "7.4", "8.0", "8.1", "8.2", "8.3", "8.4"]'
2121
secrets:
2222
CODECOV_TOKEN: "${{ secrets.CODECOV_TOKEN }}"

src/Proxy/ProxyGenerator.php

-1
Original file line numberDiff line numberDiff line change
@@ -1282,7 +1282,6 @@ function (ReflectionType $intersectedType) use ($method, $parameter) {
12821282
if (
12831283
$type->allowsNull()
12841284
&& ! in_array($name, ['mixed', 'null'], true)
1285-
&& ($parameter === null || ! $parameter->isDefaultValueAvailable() || $parameter->getDefaultValue() !== null)
12861285
) {
12871286
$name = '?' . $name;
12881287
}

tests/Common/Proxy/Php8UnionTypes.php

+6
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,16 @@ class Php8UnionTypes
1212

1313
public function setValue(stdClass|array $value) : bool|float
1414
{
15+
return true;
1516
}
1617

1718
public function setNullableValue(stdClass|array|null $value) : bool|float|null
1819
{
20+
return true;
1921
}
2022

23+
public function setNullableValueDefaultNull(stdClass|array|null $value = null) : bool|float|null
24+
{
25+
return true;
26+
}
2127
}

tests/Common/Proxy/ProxyGeneratorTest.php

+10-5
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ public function testClassWithScalarTypeHintsOnProxiedMethods()
180180
self::assertEquals(1, substr_count($classCode, 'function combinationOfTypeHintsAndNormal(\stdClass $a, \Countable $b, $c, int $d)'));
181181
self::assertEquals(1, substr_count($classCode, 'function typeHintsWithVariadic(int ...$foo)'));
182182
self::assertEquals(1, substr_count($classCode, 'function withDefaultValue(int $foo = 123)'));
183-
self::assertEquals(1, substr_count($classCode, 'function withDefaultValueNull(int $foo = NULL)'));
183+
self::assertEquals(1, substr_count($classCode, 'function withDefaultValueNull(?int $foo = NULL)'));
184184
}
185185

186186
public function testClassWithReturnTypesOnProxiedMethods()
@@ -220,8 +220,8 @@ public function testClassWithNullableTypeHintsOnProxiedMethods()
220220
self::assertEquals(1, substr_count($classCode, 'function nullableTypeHintObject(?\stdClass $param)'));
221221
self::assertEquals(1, substr_count($classCode, 'function nullableTypeHintSelf(?\\' . $className . ' $param)'));
222222
self::assertEquals(1, substr_count($classCode, 'function nullableTypeHintWithDefault(?int $param = 123)'));
223-
self::assertEquals(1, substr_count($classCode, 'function nullableTypeHintWithDefaultNull(int $param = NULL)'));
224-
self::assertEquals(1, substr_count($classCode, 'function notNullableTypeHintWithDefaultNull(int $param = NULL)'));
223+
self::assertEquals(1, substr_count($classCode, 'function nullableTypeHintWithDefaultNull(?int $param = NULL)'));
224+
self::assertEquals(1, substr_count($classCode, 'function notNullableTypeHintWithDefaultNull(?int $param = NULL)'));
225225
}
226226

227227
public function testClassWithNullableReturnTypesOnProxiedMethods()
@@ -259,7 +259,7 @@ public function testClassWithNullableOptionalNonLastParameterOnProxiedMethods()
259259
}
260260

261261
self::assertStringContainsString(
262-
'public function midSignatureNullableParameter(\stdClass $param = NULL, $secondParam)',
262+
'public function midSignatureNullableParameter(?\stdClass $param = NULL, $secondParam)',
263263
file_get_contents(__DIR__ . '/generated/__CG__DoctrineTestsCommonProxyNullableNonOptionalHintClass.php')
264264
);
265265

@@ -287,7 +287,7 @@ public function testClassWithPhp71NullableOptionalNonLastParameterOnProxiedMetho
287287
}
288288

289289
self::assertStringContainsString(
290-
'public function midSignatureNullableParameter(string $param = NULL, $secondParam)',
290+
'public function midSignatureNullableParameter(?string $param = NULL, $secondParam)',
291291
file_get_contents(__DIR__ . '/generated/__CG__DoctrineTestsCommonProxyPhp71NullableDefaultedNonOptionalHintClass.php'),
292292
'Signature allows nullable type, although explicit "?" marker isn\'t used in the proxy'
293293
);
@@ -460,6 +460,11 @@ public function testPhp8UnionTypes()
460460
'setNullableValue(\stdClass|array|null $value): float|bool|null',
461461
file_get_contents(__DIR__ . '/generated/__CG__DoctrineTestsCommonProxyPhp8UnionTypes.php')
462462
);
463+
464+
self::assertStringContainsString(
465+
'setNullableValueDefaultNull(\stdClass|array|null $value = NULL): float|bool|null',
466+
file_get_contents(__DIR__ . '/generated/__CG__DoctrineTestsCommonProxyPhp8UnionTypes.php')
467+
);
463468
}
464469

465470
/**

0 commit comments

Comments
 (0)