diff --git a/src/Generator/ParameterGenerator.php b/src/Generator/ParameterGenerator.php index a5b59ed0..4c12642f 100644 --- a/src/Generator/ParameterGenerator.php +++ b/src/Generator/ParameterGenerator.php @@ -63,7 +63,7 @@ public static function fromReflection(ParameterReflection $reflectionParameter) $param->setVariadic($variadic); - if (! $variadic && $reflectionParameter->isOptional()) { + if (! $variadic && ($reflectionParameter->isOptional() || $reflectionParameter->isDefaultValueAvailable())) { try { $param->setDefaultValue($reflectionParameter->getDefaultValue()); } catch (\ReflectionException $e) { diff --git a/test/Generator/ParameterGeneratorTest.php b/test/Generator/ParameterGeneratorTest.php index 5c1ad4b3..b7e82c4b 100644 --- a/test/Generator/ParameterGeneratorTest.php +++ b/test/Generator/ParameterGeneratorTest.php @@ -98,6 +98,21 @@ public function testFromReflectionGetDefaultValue() $this->assertEquals('\'foo\'', (string) $defaultValue); } + public function testFromReflectionGetDefaultValueNotOptional() + { + $reflectionClass = new \Zend\Code\Reflection\ClassReflection( + 'ZendTest\Code\Generator\TestAsset\ParameterClass' + ); + $method = $reflectionClass->getMethod('defaultObjectEqualsNullAndNotOptional'); + + $params = $method->getParameters(); + $this->assertCount(2, $params); + + $firstParameter = $codeGenParam = ParameterGenerator::fromReflection($params[0]); + $this->assertInstanceOf(ValueGenerator::class, $firstParameter->getDefaultValue()); + $this->assertNull($firstParameter->getDefaultValue()->getSourceContent()); + } + public function testFromReflectionGetArrayHint() { $reflectionParameter = $this->getFirstReflectionParameter('fromArray'); diff --git a/test/Generator/TestAsset/ParameterClass.php b/test/Generator/TestAsset/ParameterClass.php index bbb3fd3f..397cd1d9 100644 --- a/test/Generator/TestAsset/ParameterClass.php +++ b/test/Generator/TestAsset/ParameterClass.php @@ -82,6 +82,11 @@ public function defaultConstant($con = self::FOO) } + public function defaultObjectEqualsNullAndNotOptional(\stdClass $a = null, $b) + { + + } + /** * @param int $integer */