Files
apimacro/vendor/nikic/php-parser/lib/PhpParser/Builder/Param.php

150 lines
3.8 KiB
PHP
Raw Normal View History

2024-05-07 12:17:25 +02:00
<?php declare(strict_types=1);
namespace PhpParser\Builder;
use PhpParser;
use PhpParser\BuilderHelpers;
2024-05-17 12:24:19 +00:00
use PhpParser\Modifiers;
2024-05-07 12:17:25 +02:00
use PhpParser\Node;
2024-05-17 12:24:19 +00:00
class Param implements PhpParser\Builder {
protected string $name;
protected ?Node\Expr $default = null;
/** @var Node\Identifier|Node\Name|Node\ComplexType|null */
protected ?Node $type = null;
protected bool $byRef = false;
protected int $flags = 0;
protected bool $variadic = false;
/** @var list<Node\AttributeGroup> */
protected array $attributeGroups = [];
2024-05-07 12:17:25 +02:00
/**
* 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\Identifier|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;
}
/**
2024-05-17 12:24:19 +00:00
* Make the parameter accept the value by reference.
2024-05-07 12:17:25 +02:00
*
2024-05-17 12:24:19 +00:00
* @return $this The builder instance (for fluid interface)
*/
public function makeByRef() {
$this->byRef = true;
return $this;
}
/**
* Make the parameter variadic
2024-05-07 12:17:25 +02:00
*
* @return $this The builder instance (for fluid interface)
2024-05-17 12:24:19 +00:00
*/
public function makeVariadic() {
$this->variadic = true;
return $this;
}
/**
* Makes the (promoted) parameter public.
2024-05-07 12:17:25 +02:00
*
2024-05-17 12:24:19 +00:00
* @return $this The builder instance (for fluid interface)
2024-05-07 12:17:25 +02:00
*/
2024-05-17 12:24:19 +00:00
public function makePublic() {
$this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PUBLIC);
return $this;
2024-05-07 12:17:25 +02:00
}
/**
2024-05-17 12:24:19 +00:00
* Makes the (promoted) parameter protected.
2024-05-07 12:17:25 +02:00
*
* @return $this The builder instance (for fluid interface)
*/
2024-05-17 12:24:19 +00:00
public function makeProtected() {
$this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PROTECTED);
2024-05-07 12:17:25 +02:00
return $this;
}
/**
2024-05-17 12:24:19 +00:00
* Makes the (promoted) parameter private.
2024-05-07 12:17:25 +02:00
*
* @return $this The builder instance (for fluid interface)
*/
2024-05-17 12:24:19 +00:00
public function makePrivate() {
$this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PRIVATE);
return $this;
}
/**
* Makes the (promoted) parameter readonly.
*
* @return $this The builder instance (for fluid interface)
*/
public function makeReadonly() {
$this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::READONLY);
2024-05-07 12:17:25 +02:00
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
*/
2024-05-17 12:24:19 +00:00
public function getNode(): Node {
2024-05-07 12:17:25 +02:00
return new Node\Param(
new Node\Expr\Variable($this->name),
2024-05-17 12:24:19 +00:00
$this->default, $this->type, $this->byRef, $this->variadic, [], $this->flags, $this->attributeGroups
2024-05-07 12:17:25 +02:00
);
}
}