/** * @param ClassName $className * @param array<array<ClassName>> $usedClasses * @param array<MethodDefinition> $methods * @param array<PropertyDefinition> $properties */ public function __construct(ClassName $className, array $usedClasses = array(), array $methods = array(), array $properties = array()) { $this->typeCheck = TypeCheck::get(__CLASS__, func_get_args()); $this->className = $className->toAbsolute(); $this->methods = $methods; $this->properties = $properties; if ($className->hasParent()) { $namespaceName = $className->parent(); } else { $namespaceName = null; } $this->classNameResolver = new ClassNameResolver($namespaceName, $usedClasses); }
/** * @param ClassName $className * @param Comparator|null $comparator * * @return boolean */ public function hasDescendant(ClassName $className, Comparator $comparator = null) { if ($this->isAbsolute() !== $className->isAbsolute()) { return false; } if (null === $comparator) { $comparator = new Comparator(); } while ($className->hasParent()) { $className = $className->parent(); if ($comparator->equals($this, $className)) { return true; } } return false; }