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
- {
-
- public function attribute($name, array $args = []) : Node\Attribute {
- return new Node\Attribute(
- BuilderHelpers::normalizeName($name),
- $this->args($args)
- );
- }
-
- public function namespace($name) : Builder\Namespace_ {
- return new Builder\Namespace_($name);
- }
-
- public function class(string $name) : Builder\Class_ {
- return new Builder\Class_($name);
- }
-
- public function interface(string $name) : Builder\Interface_ {
- return new Builder\Interface_($name);
- }
-
- public function trait(string $name) : Builder\Trait_ {
- return new Builder\Trait_($name);
- }
-
- public function enum(string $name) : Builder\Enum_ {
- return new Builder\Enum_($name);
- }
-
- public function useTrait(...$traits) : Builder\TraitUse {
- return new Builder\TraitUse(...$traits);
- }
-
- public function traitUseAdaptation($trait, $method = null) : Builder\TraitUseAdaptation {
- if ($method === null) {
- $method = $trait;
- $trait = null;
- }
- return new Builder\TraitUseAdaptation($trait, $method);
- }
-
- public function method(string $name) : Builder\Method {
- return new Builder\Method($name);
- }
-
- public function param(string $name) : Builder\Param {
- return new Builder\Param($name);
- }
-
- public function property(string $name) : Builder\Property {
- return new Builder\Property($name);
- }
-
- public function function(string $name) : Builder\Function_ {
- return new Builder\Function_($name);
- }
-
- public function use($name) : Builder\Use_ {
- return new Builder\Use_($name, Use_::TYPE_NORMAL);
- }
-
- public function useFunction($name) : Builder\Use_ {
- return new Builder\Use_($name, Use_::TYPE_FUNCTION);
- }
-
- public function useConst($name) : Builder\Use_ {
- return new Builder\Use_($name, Use_::TYPE_CONSTANT);
- }
-
- public function classConst($name, $value) : Builder\ClassConst {
- return new Builder\ClassConst($name, $value);
- }
-
- public function enumCase($name) : Builder\EnumCase {
- return new Builder\EnumCase($name);
- }
-
- public function val($value) : Expr {
- return BuilderHelpers::normalizeValue($value);
- }
-
- 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);
- }
-
- 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;
- }
-
- public function funcCall($name, array $args = []) : Expr\FuncCall {
- return new Expr\FuncCall(
- BuilderHelpers::normalizeNameOrExpr($name),
- $this->args($args)
- );
- }
-
- public function methodCall(Expr $var, $name, array $args = []) : Expr\MethodCall {
- return new Expr\MethodCall(
- $var,
- BuilderHelpers::normalizeIdentifierOrExpr($name),
- $this->args($args)
- );
- }
-
- public function staticCall($class, $name, array $args = []) : Expr\StaticCall {
- return new Expr\StaticCall(
- BuilderHelpers::normalizeNameOrExpr($class),
- BuilderHelpers::normalizeIdentifierOrExpr($name),
- $this->args($args)
- );
- }
-
- public function new($class, array $args = []) : Expr\New_ {
- return new Expr\New_(
- BuilderHelpers::normalizeNameOrExpr($class),
- $this->args($args)
- );
- }
-
- public function constFetch($name) : Expr\ConstFetch {
- return new Expr\ConstFetch(BuilderHelpers::normalizeName($name));
- }
-
- public function propertyFetch(Expr $var, $name) : Expr\PropertyFetch {
- return new Expr\PropertyFetch($var, BuilderHelpers::normalizeIdentifierOrExpr($name));
- }
-
- public function classConstFetch($class, $name): Expr\ClassConstFetch {
- return new Expr\ClassConstFetch(
- BuilderHelpers::normalizeNameOrExpr($class),
- BuilderHelpers::normalizeIdentifierOrExpr($name)
- );
- }
-
- 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;
- }
-
- 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');
- }
- }
|