/**
  * @return \Donquixote\HastyReflectionCommon\Reflection\ClassLike\ClassLikeReflectionInterface[]
  */
 private function buildInterfaces()
 {
     $interfaces = array();
     foreach ($this->ownInterfaceNames as $qcn) {
         $interface = $this->autoloadSource->classGetReflection($qcn);
         if ($interface && $interface->isInterface()) {
             $interfaces[$qcn] = $interface;
         }
     }
     return $interfaces;
 }
 /**
  * @return \Donquixote\HastyReflectionCommon\Reflection\ClassLike\ClassLikeReflectionInterface[]
  */
 protected function buildAllInterfacesWithoutSelf()
 {
     $interfaces = array();
     foreach ($this->allInterfaceNamesWithoutSelf as $interfaceName) {
         $interface = $this->autoloadSource->classGetReflection($interfaceName);
         if ($interface && $interface->isInterface()) {
             $interfaces[$interfaceName] = $interface;
         }
     }
     return $interfaces;
 }
 /**
  * @return \Donquixote\HastyReflectionCommon\Reflection\ClassLike\ClassLikeReflectionInterface|null
  */
 private function buildParentClass()
 {
     if (NULL === $this->parentClassQcn) {
         return NULL;
     }
     $classLikeReflection = $this->autoloadSource->classGetReflection($this->parentClassQcn);
     if (!$classLikeReflection || !$classLikeReflection->isClass()) {
         return NULL;
     }
     return $classLikeReflection;
 }
 /**
  * Gets all interfaces directly or indirectly implemented by this class.
  *
  * Will include the class itself if it is an interface.
  *
  * @param bool $includeSelf
  *
  * @return \Donquixote\HastyReflectionCommon\Reflection\ClassLike\ClassLikeReflectionInterface[]
  */
 function getAllInterfaces($includeSelf)
 {
     if (NULL === $this->interfacesAll) {
         $this->interfacesAllInclSelf = $this->interfacesAll = $this->buildAllInterfacesWithoutSelf();
         if (NULL !== $this->selfInterfaceName) {
             $selfInterface = $this->classIndex->classGetReflection($this->selfInterfaceName);
             if (NULL !== $selfInterface) {
                 $this->interfacesAllInclSelf = array($this->selfInterfaceName => $selfInterface) + $this->interfacesAllInclSelf;
             }
         }
     }
     return $includeSelf ? $this->interfacesAllInclSelf : $this->interfacesAll;
 }
 /**
  * @return \Donquixote\HastyReflectionCommon\Reflection\FunctionLike\MethodReflectionInterface[]
  */
 protected function findOwnMethods()
 {
     $classReflection = $this->autoloadSource->classGetReflection($this->reflectionClass->getName());
     if (NULL === $classReflection) {
         return array();
     }
     $class = $this->reflectionClass->getName();
     $methods = array();
     foreach ($this->reflectionClass->getMethods() as $reflectionMethod) {
         if ($class === $reflectionMethod->getDeclaringClass()->getName()) {
             $methods[$reflectionMethod->getName()] = new MethodReflection_Native($classReflection, $reflectionMethod);
         }
     }
     return $methods;
 }
 /**
  * @param \Donquixote\HastyReflectionCommon\Canvas\ClassIndex\ClassIndexInterface $classIndex
  * @param string $class
  *
  * @dataProvider provideClassIndexArgs()
  */
 function testClassIndex(ClassIndexInterface $classIndex, $class)
 {
     $classReflection = $classIndex->classGetReflection($class);
     $reflectionClass = new \ReflectionClass($class);
     // Test identity.
     $this->assertTrue($classReflection === $classIndex->classGetReflection($class));
     // Test class type/info.
     $expectedIsClass = !$reflectionClass->isInterface() && !$reflectionClass->isTrait();
     $this->assertEquals($reflectionClass->getName(), $classReflection->getName());
     $this->assertEquals($reflectionClass->getShortName(), $classReflection->getShortName());
     $this->assertEquals($reflectionClass->getDocComment(), $classReflection->getDocComment());
     $this->assertEquals($reflectionClass->isInterface(), $classReflection->isInterface());
     $this->assertEquals($reflectionClass->isTrait(), $classReflection->isTrait());
     $this->assertEquals($expectedIsClass, $classReflection->isClass());
     $this->assertEquals($reflectionClass->isAbstract() && $expectedIsClass, $classReflection->isAbstractClass());
     // Test context.
     $this->assertEquals($reflectionClass->getNamespaceName(), $classReflection->getNamespaceUseContext()->getNamespaceName());
     // Test interfaces
     foreach ($classReflection->getOwnInterfaces() as $interfaceName => $interfaceReflection) {
         $this->assertTrue($reflectionClass->implementsInterface($interfaceName));
     }
     foreach ($reflectionClass->getInterfaceNames() as $interfaceName) {
         $this->assertTrue($classReflection->extendsOrImplementsInterface($interfaceName, FALSE));
     }
     $expectedAllInterfaceNames = $expectedAllAndSelfInterfaceNames = $reflectionClass->getInterfaceNames();
     if ($reflectionClass->isInterface()) {
         array_unshift($expectedAllAndSelfInterfaceNames, $class);
     }
     $this->assertEqualSorted($expectedAllAndSelfInterfaceNames, array_keys($classReflection->getAllInterfaces(TRUE)));
     $this->assertEqualSorted($expectedAllInterfaceNames, array_keys($classReflection->getAllInterfaces(FALSE)));
     $expectedMethodNames = array();
     $expectedOwnMethodNames = array();
     foreach ($reflectionClass->getMethods() as $method) {
         $expectedMethodNames[] = $method->getName();
         if ($method->getDeclaringClass()->getName() === $reflectionClass->getName()) {
             $expectedOwnMethodNames[] = $method->getName();
         }
     }
     $this->assertEquals($expectedOwnMethodNames, array_keys($classReflection->getOwnMethods()));
     $this->assertEqualSorted($expectedMethodNames, array_keys($classReflection->getMethods()));
     $methodReflections = $classReflection->getMethods();
     foreach ($reflectionClass->getMethods() as $reflectionMethod) {
         $methodReflection = $methodReflections[$reflectionMethod->getShortName()];
         $this->assertEqualMethods($reflectionMethod, $methodReflection);
     }
     // isAbstract() is a beast, so we test it least.
     $this->assertEquals($reflectionClass->isAbstract(), $classReflection->isAbstract());
 }
 /**
  * @param \Donquixote\HastyPhpAst\Ast\FunctionLike\AstFunctionLikeInterface $methodNode
  *
  * @return \Donquixote\HastyReflectionCommon\Reflection\FunctionLike\MethodReflectionInterface
  */
 private function methodNodeBuildMethod(AstFunctionLikeInterface $methodNode)
 {
     $declaringClass = $this->autoloadSource->classGetReflection($this->name);
     return new MethodReflection_Ast($declaringClass, $methodNode);
 }