Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / vendor / nikic / php-parser / lib / PhpParser / Node / Stmt / ClassMethod.php
index de05390adfd7ea859cb940339a060567a95801da..550b54ba2dee53973a8dcd5f24a5f96c2607583d 100644 (file)
@@ -1,4 +1,4 @@
-<?php
+<?php declare(strict_types=1);
 
 namespace PhpParser\Node\Stmt;
 
@@ -11,51 +11,65 @@ class ClassMethod extends Node\Stmt implements FunctionLike
     public $flags;
     /** @var bool Whether to return by reference */
     public $byRef;
-    /** @var string Name */
+    /** @var Node\Identifier Name */
     public $name;
     /** @var Node\Param[] Parameters */
     public $params;
-    /** @var null|string|Node\Name|Node\NullableType Return type */
+    /** @var null|Node\Identifier|Node\Name|Node\NullableType Return type */
     public $returnType;
-    /** @var Node[]|null Statements */
+    /** @var Node\Stmt[]|null Statements */
     public $stmts;
 
-    /** @deprecated Use $flags instead */
-    public $type;
+    private static $magicNames = [
+        '__construct'  => true,
+        '__destruct'   => true,
+        '__call'       => true,
+        '__callstatic' => true,
+        '__get'        => true,
+        '__set'        => true,
+        '__isset'      => true,
+        '__unset'      => true,
+        '__sleep'      => true,
+        '__wakeup'     => true,
+        '__tostring'   => true,
+        '__set_state'  => true,
+        '__clone'      => true,
+        '__invoke'     => true,
+        '__debuginfo'  => true,
+    ];
 
     /**
      * Constructs a class method node.
      *
-     * @param string      $name       Name
-     * @param array       $subNodes   Array of the following optional subnodes:
-     *                                'flags       => MODIFIER_PUBLIC: Flags
-     *                                'byRef'      => false          : Whether to return by reference
-     *                                'params'     => array()        : Parameters
-     *                                'returnType' => null           : Return type
-     *                                'stmts'      => array()        : Statements
-     * @param array       $attributes Additional attributes
+     * @param string|Node\Identifier $name Name
+     * @param array $subNodes   Array of the following optional subnodes:
+     *                          'flags       => MODIFIER_PUBLIC: Flags
+     *                          'byRef'      => false          : Whether to return by reference
+     *                          'params'     => array()        : Parameters
+     *                          'returnType' => null           : Return type
+     *                          'stmts'      => array()        : Statements
+     * @param array $attributes Additional attributes
      */
-    public function __construct($name, array $subNodes = array(), array $attributes = array()) {
+    public function __construct($name, array $subNodes = [], array $attributes = []) {
         parent::__construct($attributes);
-        $this->flags = isset($subNodes['flags']) ? $subNodes['flags']
-            : (isset($subNodes['type']) ? $subNodes['type'] : 0);
-        $this->type = $this->flags;
-        $this->byRef = isset($subNodes['byRef'])  ? $subNodes['byRef']  : false;
-        $this->name = $name;
-        $this->params = isset($subNodes['params']) ? $subNodes['params'] : array();
-        $this->returnType = isset($subNodes['returnType']) ? $subNodes['returnType'] : null;
-        $this->stmts = array_key_exists('stmts', $subNodes) ? $subNodes['stmts'] : array();
+        $this->flags = $subNodes['flags'] ?? $subNodes['type'] ?? 0;
+        $this->byRef = $subNodes['byRef'] ?? false;
+        $this->name = \is_string($name) ? new Node\Identifier($name) : $name;
+        $this->params = $subNodes['params'] ?? [];
+        $returnType = $subNodes['returnType'] ?? null;
+        $this->returnType = \is_string($returnType) ? new Node\Identifier($returnType) : $returnType;
+        $this->stmts = array_key_exists('stmts', $subNodes) ? $subNodes['stmts'] : [];
     }
 
-    public function getSubNodeNames() {
-        return array('flags', 'byRef', 'name', 'params', 'returnType', 'stmts');
+    public function getSubNodeNames() : array {
+        return ['flags', 'byRef', 'name', 'params', 'returnType', 'stmts'];
     }
 
-    public function returnsByRef() {
+    public function returnsByRef() : bool {
         return $this->byRef;
     }
 
-    public function getParams() {
+    public function getParams() : array {
         return $this->params;
     }
 
@@ -67,28 +81,71 @@ class ClassMethod extends Node\Stmt implements FunctionLike
         return $this->stmts;
     }
 
-    public function isPublic() {
+    /**
+     * Whether the method is explicitly or implicitly public.
+     *
+     * @return bool
+     */
+    public function isPublic() : bool {
         return ($this->flags & Class_::MODIFIER_PUBLIC) !== 0
             || ($this->flags & Class_::VISIBILITY_MODIFIER_MASK) === 0;
     }
 
-    public function isProtected() {
+    /**
+     * Whether the method is protected.
+     *
+     * @return bool
+     */
+    public function isProtected() : bool {
         return (bool) ($this->flags & Class_::MODIFIER_PROTECTED);
     }
 
-    public function isPrivate() {
+    /**
+     * Whether the method is private.
+     *
+     * @return bool
+     */
+    public function isPrivate() : bool {
         return (bool) ($this->flags & Class_::MODIFIER_PRIVATE);
     }
 
-    public function isAbstract() {
+    /**
+     * Whether the method is abstract.
+     *
+     * @return bool
+     */
+    public function isAbstract() : bool {
         return (bool) ($this->flags & Class_::MODIFIER_ABSTRACT);
     }
 
-    public function isFinal() {
+    /**
+     * Whether the method is final.
+     * 
+     * @return bool
+     */
+    public function isFinal() : bool {
         return (bool) ($this->flags & Class_::MODIFIER_FINAL);
     }
 
-    public function isStatic() {
+    /**
+     * Whether the method is static.
+     *
+     * @return bool
+     */
+    public function isStatic() : bool {
         return (bool) ($this->flags & Class_::MODIFIER_STATIC);
     }
+
+    /**
+     * Whether the method is magic.
+     *
+     * @return bool
+     */
+    public function isMagic() : bool {
+        return isset(self::$magicNames[$this->name->toLowerString()]);
+    }
+    
+    public function getType() : string {
+        return 'Stmt_ClassMethod';
+    }
 }