Skip to content

Commit 078219f

Browse files
authored
Detect nullable-default parameters and generate appropriate outputs (#486)
1 parent 26b520c commit 078219f

File tree

2 files changed

+27
-3
lines changed

2 files changed

+27
-3
lines changed

generator/src/Parameter.php

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,15 @@ public function isVariadic(): bool
8181

8282
public function isNullable(): bool
8383
{
84-
return $this->type->isNullable();
84+
if ($this->type->isNullable()) {
85+
return true;
86+
}
87+
88+
if ($this->getDefaultValue() === "null") {
89+
return true;
90+
}
91+
92+
return $this->getDefaultValue() === "NULL";
8593
}
8694

8795
/*
@@ -94,7 +102,7 @@ public function getInitializer(): string
94102

95103
public function hasDefaultValue(): bool
96104
{
97-
return isset($this->parameter->initializer);
105+
return property_exists($this->parameter, 'initializer') && $this->parameter->initializer !== null;
98106
}
99107

100108
public function getDefaultValue(): ?string

generator/src/WritePhpFunction.php

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,9 +137,21 @@ private function displayParamsWithType(array $params): string
137137
$optDetected = false;
138138

139139
foreach ($params as $param) {
140-
$paramAsString = $param->getSignatureType();
140+
$paramAsString = '';
141+
$typeDetected = false;
142+
143+
// parameters can not have type void
144+
if ($param->getSignatureType() !== 'void') {
145+
$paramAsString = $param->getSignatureType();
146+
}
147+
141148
if ($paramAsString !== '') {
142149
$paramAsString .= ' ';
150+
if ($param->isNullable() && $paramAsString[0] !== "?") {
151+
$paramAsString = "?" . $paramAsString;
152+
}
153+
154+
$typeDetected = true;
143155
}
144156

145157
$paramName = $param->getParameterName();
@@ -161,6 +173,10 @@ private function displayParamsWithType(array $params): string
161173
$paramAsString .= ' = '.$this->defaultValueToString($defaultValue);
162174
} elseif ($optDetected && !$param->isVariadic()) {
163175
$paramAsString .= ' = null';
176+
177+
if ($typeDetected && $paramAsString[0] !== "?") {
178+
$paramAsString = "?" . $paramAsString;
179+
}
164180
}
165181
$paramsAsString[] = $paramAsString;
166182
}

0 commit comments

Comments
 (0)