mirror of
https://github.com/phabelio/PHP-Parser.git
synced 2024-12-03 09:57:51 +01:00
0483391aca
With the upcoming addition of intersection types, a type can be Identifier|Name|NullableType|UnionType|IntersectionType, which is quite the mouthful. Give NullableType and UnionType a common base class ComplexType, which does not have any behavior, but allows to write these types (and check them in instanceof) more easily.
123 lines
2.8 KiB
PHP
123 lines
2.8 KiB
PHP
<?php declare(strict_types=1);
|
|
|
|
namespace PhpParser\Builder;
|
|
|
|
use PhpParser;
|
|
use PhpParser\BuilderHelpers;
|
|
use PhpParser\Node;
|
|
|
|
class Param implements PhpParser\Builder
|
|
{
|
|
protected $name;
|
|
|
|
protected $default = null;
|
|
|
|
/** @var Node\Identifier|Node\Name|Node\NullableType|null */
|
|
protected $type = null;
|
|
|
|
protected $byRef = false;
|
|
|
|
protected $variadic = false;
|
|
|
|
/** @var Node\AttributeGroup[] */
|
|
protected $attributeGroups = [];
|
|
|
|
/**
|
|
* Creates a parameter builder.
|
|
*
|
|
* @param string $name Name of the parameter
|
|
*/
|
|
public function __construct(string $name) {
|
|
$this->name = $name;
|
|
}
|
|
|
|
/**
|
|
* Sets default value for the parameter.
|
|
*
|
|
* @param mixed $value Default value to use
|
|
*
|
|
* @return $this The builder instance (for fluid interface)
|
|
*/
|
|
public function setDefault($value) {
|
|
$this->default = BuilderHelpers::normalizeValue($value);
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Sets type for the parameter.
|
|
*
|
|
* @param string|Node\Name|Node\ComplexType $type Parameter type
|
|
*
|
|
* @return $this The builder instance (for fluid interface)
|
|
*/
|
|
public function setType($type) {
|
|
$this->type = BuilderHelpers::normalizeType($type);
|
|
if ($this->type == 'void') {
|
|
throw new \LogicException('Parameter type cannot be void');
|
|
}
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Sets type for the parameter.
|
|
*
|
|
* @param string|Node\Name|Node\ComplexType $type Parameter type
|
|
*
|
|
* @return $this The builder instance (for fluid interface)
|
|
*
|
|
* @deprecated Use setType() instead
|
|
*/
|
|
public function setTypeHint($type) {
|
|
return $this->setType($type);
|
|
}
|
|
|
|
/**
|
|
* Make the parameter accept the value by reference.
|
|
*
|
|
* @return $this The builder instance (for fluid interface)
|
|
*/
|
|
public function makeByRef() {
|
|
$this->byRef = true;
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Make the parameter variadic
|
|
*
|
|
* @return $this The builder instance (for fluid interface)
|
|
*/
|
|
public function makeVariadic() {
|
|
$this->variadic = true;
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Adds an attribute group.
|
|
*
|
|
* @param Node\Attribute|Node\AttributeGroup $attribute
|
|
*
|
|
* @return $this The builder instance (for fluid interface)
|
|
*/
|
|
public function addAttribute($attribute) {
|
|
$this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute);
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Returns the built parameter node.
|
|
*
|
|
* @return Node\Param The built parameter node
|
|
*/
|
|
public function getNode() : Node {
|
|
return new Node\Param(
|
|
new Node\Expr\Variable($this->name),
|
|
$this->default, $this->type, $this->byRef, $this->variadic, [], 0, $this->attributeGroups
|
|
);
|
|
}
|
|
}
|