/**
  * {@inheritDoc}
  */
 public function getParentClass()
 {
     if (!isset($this->parentClass)) {
         static $extendsField = 'extends';
         $parentClass = false;
         $hasExtends = in_array($extendsField, $this->classLikeNode->getSubNodeNames());
         $extendsNode = $hasExtends ? $this->classLikeNode->{$extendsField} : null;
         if ($extendsNode instanceof FullyQualified) {
             $extendsName = $extendsNode->toString();
             $parentClass = class_exists($extendsName, false) ? new parent($extendsName) : new static($extendsName);
         }
         $this->parentClass = $parentClass;
     }
     return $this->parentClass;
 }
 /**
  * Parses interfaces from the concrete class node
  *
  * @param ClassLike $classLikeNode Class-like node
  *
  * @return array|\ReflectionClass[] List of reflections of interfaces
  */
 public static function collectInterfacesFromClassNode(ClassLike $classLikeNode)
 {
     $interfaces = [];
     $isInterface = $classLikeNode instanceof Interface_;
     $interfaceField = $isInterface ? 'extends' : 'implements';
     $hasInterfaces = in_array($interfaceField, $classLikeNode->getSubNodeNames());
     $implementsList = $hasInterfaces ? $classLikeNode->{$interfaceField} : array();
     if ($implementsList) {
         foreach ($implementsList as $implementNode) {
             if ($implementNode instanceof FullyQualified) {
                 $implementName = $implementNode->toString();
                 $interface = interface_exists($implementName, false) ? new parent($implementName) : new static($implementName);
                 $interfaces[$implementName] = $interface;
             }
         }
     }
     return $interfaces;
 }