| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399 | 
							- <?php declare(strict_types=1);
 
- namespace PhpParser;
 
- use PhpParser\Node\Arg;
 
- use PhpParser\Node\Expr;
 
- use PhpParser\Node\Expr\BinaryOp\Concat;
 
- use PhpParser\Node\Identifier;
 
- use PhpParser\Node\Name;
 
- use PhpParser\Node\Scalar\String_;
 
- use PhpParser\Node\Stmt\Use_;
 
- class BuilderFactory
 
- {
 
-     /**
 
-      * Creates an attribute node.
 
-      *
 
-      * @param string|Name $name Name of the attribute
 
-      * @param array       $args Attribute named arguments
 
-      *
 
-      * @return Node\Attribute
 
-      */
 
-     public function attribute($name, array $args = []) : Node\Attribute {
 
-         return new Node\Attribute(
 
-             BuilderHelpers::normalizeName($name),
 
-             $this->args($args)
 
-         );
 
-     }
 
-     /**
 
-      * Creates a namespace builder.
 
-      *
 
-      * @param null|string|Node\Name $name Name of the namespace
 
-      *
 
-      * @return Builder\Namespace_ The created namespace builder
 
-      */
 
-     public function namespace($name) : Builder\Namespace_ {
 
-         return new Builder\Namespace_($name);
 
-     }
 
-     /**
 
-      * Creates a class builder.
 
-      *
 
-      * @param string $name Name of the class
 
-      *
 
-      * @return Builder\Class_ The created class builder
 
-      */
 
-     public function class(string $name) : Builder\Class_ {
 
-         return new Builder\Class_($name);
 
-     }
 
-     /**
 
-      * Creates an interface builder.
 
-      *
 
-      * @param string $name Name of the interface
 
-      *
 
-      * @return Builder\Interface_ The created interface builder
 
-      */
 
-     public function interface(string $name) : Builder\Interface_ {
 
-         return new Builder\Interface_($name);
 
-     }
 
-     /**
 
-      * Creates a trait builder.
 
-      *
 
-      * @param string $name Name of the trait
 
-      *
 
-      * @return Builder\Trait_ The created trait builder
 
-      */
 
-     public function trait(string $name) : Builder\Trait_ {
 
-         return new Builder\Trait_($name);
 
-     }
 
-     /**
 
-      * Creates an enum builder.
 
-      *
 
-      * @param string $name Name of the enum
 
-      *
 
-      * @return Builder\Enum_ The created enum builder
 
-      */
 
-     public function enum(string $name) : Builder\Enum_ {
 
-         return new Builder\Enum_($name);
 
-     }
 
-     /**
 
-      * Creates a trait use builder.
 
-      *
 
-      * @param Node\Name|string ...$traits Trait names
 
-      *
 
-      * @return Builder\TraitUse The create trait use builder
 
-      */
 
-     public function useTrait(...$traits) : Builder\TraitUse {
 
-         return new Builder\TraitUse(...$traits);
 
-     }
 
-     /**
 
-      * Creates a trait use adaptation builder.
 
-      *
 
-      * @param Node\Name|string|null  $trait  Trait name
 
-      * @param Node\Identifier|string $method Method name
 
-      *
 
-      * @return Builder\TraitUseAdaptation The create trait use adaptation builder
 
-      */
 
-     public function traitUseAdaptation($trait, $method = null) : Builder\TraitUseAdaptation {
 
-         if ($method === null) {
 
-             $method = $trait;
 
-             $trait = null;
 
-         }
 
-         return new Builder\TraitUseAdaptation($trait, $method);
 
-     }
 
-     /**
 
-      * Creates a method builder.
 
-      *
 
-      * @param string $name Name of the method
 
-      *
 
-      * @return Builder\Method The created method builder
 
-      */
 
-     public function method(string $name) : Builder\Method {
 
-         return new Builder\Method($name);
 
-     }
 
-     /**
 
-      * Creates a parameter builder.
 
-      *
 
-      * @param string $name Name of the parameter
 
-      *
 
-      * @return Builder\Param The created parameter builder
 
-      */
 
-     public function param(string $name) : Builder\Param {
 
-         return new Builder\Param($name);
 
-     }
 
-     /**
 
-      * Creates a property builder.
 
-      *
 
-      * @param string $name Name of the property
 
-      *
 
-      * @return Builder\Property The created property builder
 
-      */
 
-     public function property(string $name) : Builder\Property {
 
-         return new Builder\Property($name);
 
-     }
 
-     /**
 
-      * Creates a function builder.
 
-      *
 
-      * @param string $name Name of the function
 
-      *
 
-      * @return Builder\Function_ The created function builder
 
-      */
 
-     public function function(string $name) : Builder\Function_ {
 
-         return new Builder\Function_($name);
 
-     }
 
-     /**
 
-      * Creates a namespace/class use builder.
 
-      *
 
-      * @param Node\Name|string $name Name of the entity (namespace or class) to alias
 
-      *
 
-      * @return Builder\Use_ The created use builder
 
-      */
 
-     public function use($name) : Builder\Use_ {
 
-         return new Builder\Use_($name, Use_::TYPE_NORMAL);
 
-     }
 
-     /**
 
-      * Creates a function use builder.
 
-      *
 
-      * @param Node\Name|string $name Name of the function to alias
 
-      *
 
-      * @return Builder\Use_ The created use function builder
 
-      */
 
-     public function useFunction($name) : Builder\Use_ {
 
-         return new Builder\Use_($name, Use_::TYPE_FUNCTION);
 
-     }
 
-     /**
 
-      * Creates a constant use builder.
 
-      *
 
-      * @param Node\Name|string $name Name of the const to alias
 
-      *
 
-      * @return Builder\Use_ The created use const builder
 
-      */
 
-     public function useConst($name) : Builder\Use_ {
 
-         return new Builder\Use_($name, Use_::TYPE_CONSTANT);
 
-     }
 
-     /**
 
-      * Creates a class constant builder.
 
-      *
 
-      * @param string|Identifier                          $name  Name
 
-      * @param Node\Expr|bool|null|int|float|string|array $value Value
 
-      *
 
-      * @return Builder\ClassConst The created use const builder
 
-      */
 
-     public function classConst($name, $value) : Builder\ClassConst {
 
-         return new Builder\ClassConst($name, $value);
 
-     }
 
-     /**
 
-      * Creates an enum case builder.
 
-      *
 
-      * @param string|Identifier $name  Name
 
-      *
 
-      * @return Builder\EnumCase The created use const builder
 
-      */
 
-     public function enumCase($name) : Builder\EnumCase {
 
-         return new Builder\EnumCase($name);
 
-     }
 
-     /**
 
-      * Creates node a for a literal value.
 
-      *
 
-      * @param Expr|bool|null|int|float|string|array $value $value
 
-      *
 
-      * @return Expr
 
-      */
 
-     public function val($value) : Expr {
 
-         return BuilderHelpers::normalizeValue($value);
 
-     }
 
-     /**
 
-      * Creates variable node.
 
-      *
 
-      * @param string|Expr $name Name
 
-      *
 
-      * @return Expr\Variable
 
-      */
 
-     public function var($name) : Expr\Variable {
 
-         if (!\is_string($name) && !$name instanceof Expr) {
 
-             throw new \LogicException('Variable name must be string or Expr');
 
-         }
 
-         return new Expr\Variable($name);
 
-     }
 
-     /**
 
-      * Normalizes an argument list.
 
-      *
 
-      * Creates Arg nodes for all arguments and converts literal values to expressions.
 
-      *
 
-      * @param array $args List of arguments to normalize
 
-      *
 
-      * @return Arg[]
 
-      */
 
-     public function args(array $args) : array {
 
-         $normalizedArgs = [];
 
-         foreach ($args as $key => $arg) {
 
-             if (!($arg instanceof Arg)) {
 
-                 $arg = new Arg(BuilderHelpers::normalizeValue($arg));
 
-             }
 
-             if (\is_string($key)) {
 
-                 $arg->name = BuilderHelpers::normalizeIdentifier($key);
 
-             }
 
-             $normalizedArgs[] = $arg;
 
-         }
 
-         return $normalizedArgs;
 
-     }
 
-     /**
 
-      * Creates a function call node.
 
-      *
 
-      * @param string|Name|Expr $name Function name
 
-      * @param array            $args Function arguments
 
-      *
 
-      * @return Expr\FuncCall
 
-      */
 
-     public function funcCall($name, array $args = []) : Expr\FuncCall {
 
-         return new Expr\FuncCall(
 
-             BuilderHelpers::normalizeNameOrExpr($name),
 
-             $this->args($args)
 
-         );
 
-     }
 
-     /**
 
-      * Creates a method call node.
 
-      *
 
-      * @param Expr                   $var  Variable the method is called on
 
-      * @param string|Identifier|Expr $name Method name
 
-      * @param array                  $args Method arguments
 
-      *
 
-      * @return Expr\MethodCall
 
-      */
 
-     public function methodCall(Expr $var, $name, array $args = []) : Expr\MethodCall {
 
-         return new Expr\MethodCall(
 
-             $var,
 
-             BuilderHelpers::normalizeIdentifierOrExpr($name),
 
-             $this->args($args)
 
-         );
 
-     }
 
-     /**
 
-      * Creates a static method call node.
 
-      *
 
-      * @param string|Name|Expr       $class Class name
 
-      * @param string|Identifier|Expr $name  Method name
 
-      * @param array                  $args  Method arguments
 
-      *
 
-      * @return Expr\StaticCall
 
-      */
 
-     public function staticCall($class, $name, array $args = []) : Expr\StaticCall {
 
-         return new Expr\StaticCall(
 
-             BuilderHelpers::normalizeNameOrExpr($class),
 
-             BuilderHelpers::normalizeIdentifierOrExpr($name),
 
-             $this->args($args)
 
-         );
 
-     }
 
-     /**
 
-      * Creates an object creation node.
 
-      *
 
-      * @param string|Name|Expr $class Class name
 
-      * @param array            $args  Constructor arguments
 
-      *
 
-      * @return Expr\New_
 
-      */
 
-     public function new($class, array $args = []) : Expr\New_ {
 
-         return new Expr\New_(
 
-             BuilderHelpers::normalizeNameOrExpr($class),
 
-             $this->args($args)
 
-         );
 
-     }
 
-     /**
 
-      * Creates a constant fetch node.
 
-      *
 
-      * @param string|Name $name Constant name
 
-      *
 
-      * @return Expr\ConstFetch
 
-      */
 
-     public function constFetch($name) : Expr\ConstFetch {
 
-         return new Expr\ConstFetch(BuilderHelpers::normalizeName($name));
 
-     }
 
-     /**
 
-      * Creates a property fetch node.
 
-      *
 
-      * @param Expr                   $var  Variable holding object
 
-      * @param string|Identifier|Expr $name Property name
 
-      *
 
-      * @return Expr\PropertyFetch
 
-      */
 
-     public function propertyFetch(Expr $var, $name) : Expr\PropertyFetch {
 
-         return new Expr\PropertyFetch($var, BuilderHelpers::normalizeIdentifierOrExpr($name));
 
-     }
 
-     /**
 
-      * Creates a class constant fetch node.
 
-      *
 
-      * @param string|Name|Expr  $class Class name
 
-      * @param string|Identifier $name  Constant name
 
-      *
 
-      * @return Expr\ClassConstFetch
 
-      */
 
-     public function classConstFetch($class, $name): Expr\ClassConstFetch {
 
-         return new Expr\ClassConstFetch(
 
-             BuilderHelpers::normalizeNameOrExpr($class),
 
-             BuilderHelpers::normalizeIdentifier($name)
 
-         );
 
-     }
 
-     /**
 
-      * Creates nested Concat nodes from a list of expressions.
 
-      *
 
-      * @param Expr|string ...$exprs Expressions or literal strings
 
-      *
 
-      * @return Concat
 
-      */
 
-     public function concat(...$exprs) : Concat {
 
-         $numExprs = count($exprs);
 
-         if ($numExprs < 2) {
 
-             throw new \LogicException('Expected at least two expressions');
 
-         }
 
-         $lastConcat = $this->normalizeStringExpr($exprs[0]);
 
-         for ($i = 1; $i < $numExprs; $i++) {
 
-             $lastConcat = new Concat($lastConcat, $this->normalizeStringExpr($exprs[$i]));
 
-         }
 
-         return $lastConcat;
 
-     }
 
-     /**
 
-      * @param string|Expr $expr
 
-      * @return Expr
 
-      */
 
-     private function normalizeStringExpr($expr) : Expr {
 
-         if ($expr instanceof Expr) {
 
-             return $expr;
 
-         }
 
-         if (\is_string($expr)) {
 
-             return new String_($expr);
 
-         }
 
-         throw new \LogicException('Expected string or Expr');
 
-     }
 
- }
 
 
  |