Esempio n. 1
0
 /**
  * Creates a negated version of any expression. For instance, passing a
  * VariableNode will result in !$var.
  *
  * @param \Pharborist\ExpressionNode $expr
  *  The expression to negate.
  *
  * @return static
  */
 public static function fromExpression(ExpressionNode $expr)
 {
     $not = new static();
     $not->addChild(Token::not(), 'operator');
     /** @var \Pharborist\Node $expr */
     $not->addChild($expr->remove(), 'operand');
     return $not;
 }
Esempio n. 2
0
 /**
  * Creates a new class member.
  *
  * @param string $name
  *  The name of the member, with or without the leading $.
  * @param \Pharborist\ExpressionNode $value
  *  The default value of the member, if any.
  * @param string $visibility
  *  The member's visibility. Can be public, private, or protected. Defaults to
  *  public.
  *
  * @return ClassMemberListNode
  *
  * @todo Not all expressions can be default values, but I forget what sorts of
  * expressions are valid for this. Will need better sanity checking here.
  */
 public static function create($name, ExpressionNode $value = NULL, $visibility = 'public')
 {
     $code = $visibility . ' $' . ltrim($name, '$');
     if ($value instanceof ExpressionNode) {
         $code .= ' = ' . $value->getText();
     }
     /** @var ClassNode $class_node */
     $class_node = Parser::parseSnippet('class Foo { ' . $code . '; }');
     return $class_node->getStatements()[0]->remove();
 }
Esempio n. 3
0
 /**
  * @param ExpressionNode|NULL $node
  * @return $this
  */
 public function setValue($node)
 {
     if ($node === NULL) {
         if (isset($this->value)) {
             $this->value->previousUntil(Filter::isInstanceOf('\\Pharborist\\Variables\\VariableNode'))->remove();
             $this->value->remove();
         }
     } else {
         if (isset($this->value)) {
             /** @var Node $node */
             $this->value->replaceWith($node);
         } else {
             $this->append([Token::space(), Token::assign(), Token::space(), $node]);
         }
     }
     return $this;
 }
Esempio n. 4
0
 /**
  * @param ExpressionNode $operand
  * @return $this
  */
 public function setRightOperand(ExpressionNode $operand)
 {
     /** @var Node $operand */
     $this->right->replaceWith($operand);
     return $this;
 }
 /**
  * Rewrites an assignment expression as a property setter. Returns NULL if
  * the expression cannot be rewritten.
  *
  * @param \Pharborist\ExpressionNode $expr
  *  The expression to rewrite.
  * @param string $property
  *  The property being used in the expression.
  * @param \Pharborist\Operators\AssignNode $assignment
  *  The entire assignment expression being rewritten.
  *
  * @return \Pharborist\ExpressionNode|NULL
  */
 public function rewriteAsSetter(ExpressionNode $expr, $property, AssignNode $assignment)
 {
     if ($expr instanceof ObjectPropertyNode) {
         // Should be getRootObject() or getLookupRoot().
         // @see Pharborist issue #191
         $object = clone $expr->getObject();
     } elseif ($expr instanceof ArrayLookupNode) {
         $object = clone $expr->getRootArray();
     }
     if (isset($object) && isset($this->pluginDefinition['properties'][$property]['set'])) {
         return ObjectMethodCallNode::create($object, $this->pluginDefinition['properties'][$property]['set'])->appendArgument(clone $assignment->getRightOperand());
     }
 }
 /**
  * {@inheritdoc}
  */
 public function rewriteAsSetter(ExpressionNode $expr, $property, AssignNode $assignment)
 {
     /** @var \Pharborist\ArrayLookupNode $expr */
     $object = clone $expr->getRootArray();
     $keys = $expr->getKeys();
     $value = clone $assignment->getRightOperand();
     // $form_state['values']['baz'] = 'foo' --> $form_state->setValue(['baz'], 'foo')
     if ($property == 'values') {
         array_shift($keys);
         return ObjectMethodCallNode::create($object, 'setValue')->appendArgument(ArrayNode::create($keys))->appendArgument($value);
     } elseif (isset($this->pluginDefinition['properties'][$property]['set'])) {
         return parent::rewriteAsSetter($expr, $property, $assignment);
     } else {
         return ObjectMethodCallNode::create($object, 'set')->appendArgument(ArrayNode::create($keys))->appendArgument($value);
     }
 }
Esempio n. 7
0
 /**
  * @param ExpressionNode $else
  *
  * @return $this
  */
 public function setElse(ExpressionNode $else)
 {
     /** @var \Pharborist\Node $else */
     $this->condition->replaceWith($else);
     return $this;
 }
Esempio n. 8
0
 /**
  * Creates a new return statement.
  *
  * @param \Pharborist\ExpressionNode $expr
  *  The expression to return.
  *
  * @return static
  */
 public static function create(ExpressionNode $expr)
 {
     return Parser::parseSnippet('return ' . $expr->getText() . ';');
 }
Esempio n. 9
0
 /**
  * @param ExpressionNode $operand
  * @return $this
  */
 public function setOperand(ExpressionNode $operand)
 {
     /** @var \Pharborist\Node $operand */
     $this->operand->replaceWith($operand);
     return $this;
 }