1<?php 2 3declare(strict_types=1); 4 5namespace PhpParser\Builder; 6 7use PhpParser; 8use PhpParser\BuilderHelpers; 9use PhpParser\Node; 10use PhpParser\Node\Identifier; 11use PhpParser\Node\Stmt; 12 13class EnumCase implements PhpParser\Builder { 14 /** @var Identifier|string */ 15 protected $name; 16 protected ?Node\Expr $value = null; 17 /** @var array<string, mixed> */ 18 protected array $attributes = []; 19 20 /** @var list<Node\AttributeGroup> */ 21 protected array $attributeGroups = []; 22 23 /** 24 * Creates an enum case builder. 25 * 26 * @param string|Identifier $name Name 27 */ 28 public function __construct($name) { 29 $this->name = $name; 30 } 31 32 /** 33 * Sets the value. 34 * 35 * @param Node\Expr|string|int $value 36 * 37 * @return $this 38 */ 39 public function setValue($value) { 40 $this->value = BuilderHelpers::normalizeValue($value); 41 42 return $this; 43 } 44 45 /** 46 * Sets doc comment for the constant. 47 * 48 * @param PhpParser\Comment\Doc|string $docComment Doc comment to set 49 * 50 * @return $this The builder instance (for fluid interface) 51 */ 52 public function setDocComment($docComment) { 53 $this->attributes = [ 54 'comments' => [BuilderHelpers::normalizeDocComment($docComment)] 55 ]; 56 57 return $this; 58 } 59 60 /** 61 * Adds an attribute group. 62 * 63 * @param Node\Attribute|Node\AttributeGroup $attribute 64 * 65 * @return $this The builder instance (for fluid interface) 66 */ 67 public function addAttribute($attribute) { 68 $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute); 69 70 return $this; 71 } 72 73 /** 74 * Returns the built enum case node. 75 * 76 * @return Stmt\EnumCase The built constant node 77 */ 78 public function getNode(): PhpParser\Node { 79 return new Stmt\EnumCase( 80 $this->name, 81 $this->value, 82 $this->attributeGroups, 83 $this->attributes 84 ); 85 } 86} 87