first commit
This commit is contained in:
131
vendor/hamcrest/hamcrest-php/generator/FactoryParameter.php
vendored
Normal file
131
vendor/hamcrest/hamcrest-php/generator/FactoryParameter.php
vendored
Normal file
@ -0,0 +1,131 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
|
||||
class FactoryParameter
|
||||
{
|
||||
/**
|
||||
* @var FactoryMethod
|
||||
*/
|
||||
private $method;
|
||||
|
||||
/**
|
||||
* @var ReflectionParameter
|
||||
*/
|
||||
private $reflector;
|
||||
|
||||
public function __construct(FactoryMethod $method, ReflectionParameter $reflector)
|
||||
{
|
||||
$this->method = $method;
|
||||
$this->reflector = $reflector;
|
||||
}
|
||||
|
||||
/**
|
||||
* Compute the declaration code.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getDeclaration()
|
||||
{
|
||||
$code = $this->getTypeCode() . $this->getInvocation();
|
||||
|
||||
if ($this->reflector->isOptional()) {
|
||||
$default = $this->reflector->getDefaultValue();
|
||||
if (is_null($default)) {
|
||||
$default = 'null';
|
||||
} elseif (is_bool($default)) {
|
||||
$default = $default ? 'true' : 'false';
|
||||
} elseif (is_string($default)) {
|
||||
$default = "'" . $default . "'";
|
||||
} elseif (is_numeric($default)) {
|
||||
$default = strval($default);
|
||||
} elseif (is_array($default)) {
|
||||
$default = 'array()';
|
||||
} else {
|
||||
echo 'Warning: unknown default type for ' . $this->getMethod()->getFullName() . "\n";
|
||||
var_dump($default);
|
||||
$default = 'null';
|
||||
}
|
||||
$code .= ' = ' . $default;
|
||||
}
|
||||
return $code;
|
||||
}
|
||||
|
||||
/**
|
||||
* Compute the type code for the paramater.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function getTypeCode()
|
||||
{
|
||||
// Handle PHP 5 separately
|
||||
if (PHP_VERSION_ID < 70000) {
|
||||
if ($this->reflector->isArray()) {
|
||||
return 'array';
|
||||
}
|
||||
|
||||
$class = $this->reflector->getClass();
|
||||
|
||||
return $class ? sprintf('\\%s ', $class->getName()) : '';
|
||||
}
|
||||
|
||||
if (!$this->reflector->hasType()) {
|
||||
return '';
|
||||
}
|
||||
|
||||
$type = $this->reflector->getType();
|
||||
$name = self::getQualifiedName($type);
|
||||
|
||||
// PHP 7.1+ supports nullable types via a leading question mark
|
||||
return (PHP_VERSION_ID >= 70100 && $type->allowsNull()) ? sprintf('?%s ', $name) : sprintf('%s ', $name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Compute qualified name for the given type.
|
||||
*
|
||||
* This function knows how to prefix class names with a leading slash and
|
||||
* also how to handle PHP 8's union types.
|
||||
*
|
||||
* @param ReflectionType $type
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private static function getQualifiedName(ReflectionType $type)
|
||||
{
|
||||
// PHP 8 union types can be recursively processed
|
||||
if ($type instanceof ReflectionUnionType) {
|
||||
return implode('|', array_map(function (ReflectionType $type) {
|
||||
// The "self::" call within a Closure is fine here because this
|
||||
// code will only ever be executed on PHP 7.0+
|
||||
return self::getQualifiedName($type);
|
||||
}, $type->getTypes()));
|
||||
}
|
||||
|
||||
// PHP 7.0 doesn't have named types, but 7.1+ does
|
||||
$name = $type instanceof ReflectionNamedType ? $type->getName() : (string) $type;
|
||||
|
||||
return $type->isBuiltin() ? $name : sprintf('\\%s', $name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Compute the invocation code.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getInvocation()
|
||||
{
|
||||
return sprintf('$%s', $this->reflector->getName());
|
||||
}
|
||||
|
||||
/**
|
||||
* Compute the method name.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getMethod()
|
||||
{
|
||||
return $this->method;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user