Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. ClassNode.php

class ClassNode

Same name in this branch
  1. 11.1.x vendor/symfony/css-selector/Node/ClassNode.php \Symfony\Component\CssSelector\Node\ClassNode

Class node.

@author Konstantin Kudryashov <ever.zet@gmail.com>

Hierarchy

  • class \Prophecy\Doubler\Generator\Node\ClassNode

Expanded class hierarchy of ClassNode

10 files declare their use of ClassNode
ClassCreatorException.php in vendor/phpspec/prophecy/src/Prophecy/Exception/Doubler/ClassCreatorException.php
ClassPatchInterface.php in vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/ClassPatchInterface.php
DisableConstructorPatch.php in vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/DisableConstructorPatch.php
KeywordPatch.php in vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/KeywordPatch.php
MagicCallPatch.php in vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/MagicCallPatch.php

... See full list

File

vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/ClassNode.php, line 22

Namespace

Prophecy\Doubler\Generator\Node
View source
class ClassNode {
    
    /**
     * @var class-string
     */
    private $parentClass = 'stdClass';
    
    /**
     * @var list<class-string>
     */
    private $interfaces = array();
    
    /**
     * @var array<string, string>
     *
     * @phpstan-var array<string, 'public'|'private'|'protected'>
     */
    private $properties = array();
    
    /**
     * @var list<string>
     */
    private $unextendableMethods = array();
    
    /**
     * @var bool
     */
    private $readOnly = false;
    
    /**
     * @var array<string, MethodNode>
     */
    private $methods = array();
    
    /**
     * @return class-string
     */
    public function getParentClass() {
        return $this->parentClass;
    }
    
    /**
     * @param class-string|null $class
     *
     * @return void
     */
    public function setParentClass($class) {
        $this->parentClass = $class ?: 'stdClass';
    }
    
    /**
     * @return list<class-string>
     */
    public function getInterfaces() {
        return $this->interfaces;
    }
    
    /**
     * @param class-string $interface
     *
     * @return void
     */
    public function addInterface($interface) {
        if ($this->hasInterface($interface)) {
            return;
        }
        array_unshift($this->interfaces, $interface);
    }
    
    /**
     * @param class-string $interface
     *
     * @return bool
     */
    public function hasInterface($interface) {
        return in_array($interface, $this->interfaces);
    }
    
    /**
     * @return array<string, string>
     *
     * @phpstan-return array<string, 'public'|'private'|'protected'>
     */
    public function getProperties() {
        return $this->properties;
    }
    
    /**
     * @param string $name
     * @param string $visibility
     *
     * @return void
     *
     * @phpstan-param 'public'|'private'|'protected' $visibility
     */
    public function addProperty($name, $visibility = 'public') {
        $visibility = strtolower($visibility);
        if (!\in_array($visibility, array(
            'public',
            'private',
            'protected',
        ), true)) {
            throw new InvalidArgumentException(sprintf('`%s` property visibility is not supported.', $visibility));
        }
        $this->properties[$name] = $visibility;
    }
    
    /**
     * @return array<string, MethodNode>
     */
    public function getMethods() {
        return $this->methods;
    }
    
    /**
     * @param MethodNode $method
     * @param bool       $force
     *
     * @return void
     */
    public function addMethod(MethodNode $method, $force = false) {
        if (!$this->isExtendable($method->getName())) {
            $message = sprintf('Method `%s` is not extendable, so can not be added.', $method->getName());
            throw new MethodNotExtendableException($message, $this->getParentClass(), $method->getName());
        }
        if ($force || !isset($this->methods[$method->getName()])) {
            $this->methods[$method->getName()] = $method;
        }
    }
    
    /**
     * @param string $name
     *
     * @return void
     */
    public function removeMethod($name) {
        unset($this->methods[$name]);
    }
    
    /**
     * @param string $name
     *
     * @return MethodNode|null
     */
    public function getMethod($name) {
        return $this->hasMethod($name) ? $this->methods[$name] : null;
    }
    
    /**
     * @param string $name
     *
     * @return bool
     */
    public function hasMethod($name) {
        return isset($this->methods[$name]);
    }
    
    /**
     * @return list<string>
     */
    public function getUnextendableMethods() {
        return $this->unextendableMethods;
    }
    
    /**
     * @param string $unextendableMethod
     *
     * @return void
     */
    public function addUnextendableMethod($unextendableMethod) {
        if (!$this->isExtendable($unextendableMethod)) {
            return;
        }
        $this->unextendableMethods[] = $unextendableMethod;
    }
    
    /**
     * @param string $method
     *
     * @return bool
     */
    public function isExtendable($method) {
        return !in_array($method, $this->unextendableMethods);
    }
    
    /**
     * @return bool
     */
    public function isReadOnly() {
        return $this->readOnly;
    }
    
    /**
     * @param bool $readOnly
     *
     * @return void
     */
    public function setReadOnly($readOnly) {
        $this->readOnly = $readOnly;
    }

}

Members

Title Sort descending Modifiers Object type Summary
ClassNode::$interfaces private property
ClassNode::$methods private property
ClassNode::$parentClass private property
ClassNode::$properties private property @phpstan-var array&lt;string, &#039;public&#039;|&#039;private&#039;|&#039;protected&#039;&gt;
ClassNode::$readOnly private property
ClassNode::$unextendableMethods private property
ClassNode::addInterface public function
ClassNode::addMethod public function
ClassNode::addProperty public function @phpstan-param &#039;public&#039;|&#039;private&#039;|&#039;protected&#039; $visibility
ClassNode::addUnextendableMethod public function
ClassNode::getInterfaces public function
ClassNode::getMethod public function
ClassNode::getMethods public function
ClassNode::getParentClass public function
ClassNode::getProperties public function @phpstan-return array&lt;string, &#039;public&#039;|&#039;private&#039;|&#039;protected&#039;&gt;
ClassNode::getUnextendableMethods public function
ClassNode::hasInterface public function
ClassNode::hasMethod public function
ClassNode::isExtendable public function
ClassNode::isReadOnly public function
ClassNode::removeMethod public function
ClassNode::setParentClass public function
ClassNode::setReadOnly public function
RSS feed
Powered by Drupal