/** * @param ClassName $className * * @return ClassName */ public function shorten(ClassName $className) { if (!$className->isAbsolute()) { return $className; } foreach ($this->usedClasses() as $tuple) { list($usedClass, $as) = $tuple; if ($this->comparator()->equals($usedClass, $className)) { return $as; } } if (null !== $this->namespaceName() && $this->namespaceName()->hasDescendant($className)) { return $className->stripNamespace($this->namespaceName()); } return $className; }
/** * @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; }