| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 | <?php declare(strict_types=1);namespace PhpParser\Builder;use PhpParser;use PhpParser\BuilderHelpers;use PhpParser\Node;use PhpParser\Node\Identifier;use PhpParser\Node\Name;use PhpParser\Node\Stmt;use PhpParser\Node\ComplexType;class Property implements PhpParser\Builder{    protected $name;    protected $flags = 0;    protected $default = null;    protected $attributes = [];    /** @var null|Identifier|Name|NullableType */    protected $type;    /** @var Node\AttributeGroup[] */    protected $attributeGroups = [];    /**     * Creates a property builder.     *     * @param string $name Name of the property     */    public function __construct(string $name) {        $this->name = $name;    }    /**     * Makes the property public.     *     * @return $this The builder instance (for fluid interface)     */    public function makePublic() {        $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_PUBLIC);        return $this;    }    /**     * Makes the property protected.     *     * @return $this The builder instance (for fluid interface)     */    public function makeProtected() {        $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_PROTECTED);        return $this;    }    /**     * Makes the property private.     *     * @return $this The builder instance (for fluid interface)     */    public function makePrivate() {        $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_PRIVATE);        return $this;    }    /**     * Makes the property static.     *     * @return $this The builder instance (for fluid interface)     */    public function makeStatic() {        $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_STATIC);        return $this;    }    /**     * Makes the property readonly.     *     * @return $this The builder instance (for fluid interface)     */    public function makeReadonly() {        $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_READONLY);        return $this;    }    /**     * Sets default value for the property.     *     * @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 doc comment for the property.     *     * @param PhpParser\Comment\Doc|string $docComment Doc comment to set     *     * @return $this The builder instance (for fluid interface)     */    public function setDocComment($docComment) {        $this->attributes = [            'comments' => [BuilderHelpers::normalizeDocComment($docComment)]        ];        return $this;    }    /**     * Sets the property type for PHP 7.4+.     *     * @param string|Name|Identifier|ComplexType $type     *     * @return $this     */    public function setType($type) {        $this->type = BuilderHelpers::normalizeType($type);        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 class node.     *     * @return Stmt\Property The built property node     */    public function getNode() : PhpParser\Node {        return new Stmt\Property(            $this->flags !== 0 ? $this->flags : Stmt\Class_::MODIFIER_PUBLIC,            [                new Stmt\PropertyProperty($this->name, $this->default)            ],            $this->attributes,            $this->type,            $this->attributeGroups        );    }}
 |