Skip to content

Commit e772208

Browse files
committed
Printer: fixed combination nullable + union type [Closes #72]
1 parent fa9d71a commit e772208

File tree

3 files changed

+17
-5
lines changed

3 files changed

+17
-5
lines changed

src/PhpGenerator/Printer.php

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -287,9 +287,18 @@ public function printParameters($function, PhpNamespace $namespace = null): stri
287287

288288
public function printType(?string $type, bool $nullable = false, PhpNamespace $namespace = null): string
289289
{
290-
return $type
291-
? ($nullable ? '?' : '') . ($this->resolveTypes && $namespace ? $namespace->unresolveUnionType($type) : $type)
292-
: '';
290+
if ($type === null) {
291+
return '';
292+
}
293+
if ($this->resolveTypes && $namespace) {
294+
$type = $namespace->unresolveUnionType($type);
295+
}
296+
if ($nullable) {
297+
$type = strpos('|', $type) === false
298+
? '?' . $type
299+
: $type . '|null';
300+
}
301+
return $type;
293302
}
294303

295304

tests/PhpGenerator/ClassType.phpt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,9 @@ $method->addParameter('res', null)
127127
->setReference(true)
128128
->setType(Type::union(Type::ARRAY, 'null'));
129129

130+
$method->addParameter('bar', null)
131+
->setType('stdClass|string')
132+
->setNullable(true);
130133

131134
$class->addTrait('foo');
132135
$class->removeTrait('foo');
@@ -150,7 +153,7 @@ $class->setProperties(array_values($properties));
150153
Assert::same($properties, $class->getProperties());
151154

152155
$parameters = $method->getParameters();
153-
Assert::count(2, $parameters);
156+
Assert::count(3, $parameters);
154157
$method->setParameters(array_values($parameters));
155158
Assert::same($parameters, $method->getParameters());
156159

tests/PhpGenerator/expected/ClassType.expect

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,5 +43,5 @@ abstract class Example extends ParentClass implements IExample, IOne
4343
}
4444

4545

46-
abstract public function show($item, array|null &$res = null);
46+
abstract public function show($item, array|null &$res = null, ?stdClass|string $bar = null);
4747
}

0 commit comments

Comments
 (0)