createFromNode() public static method

Create from a Class Node.
public static createFromNode ( BetterReflection\Reflector\Reflector $reflector, ClassLike $node, BetterReflection\SourceLocator\Located\LocatedSource $locatedSource, Namespace_ $namespace = null ) : ReflectionClass
$reflector BetterReflection\Reflector\Reflector
$node PhpParser\Node\Stmt\ClassLike
$locatedSource BetterReflection\SourceLocator\Located\LocatedSource
$namespace PhpParser\Node\Stmt\Namespace_ optional - if omitted, we assume it is global namespaced class
return ReflectionClass
 /**
  * Take an AST node in some located source (potentially in a namespace) and
  * convert it to a Reflection
  *
  * @param Reflector $reflector
  * @param Node $node
  * @param LocatedSource $locatedSource
  * @param Node\Stmt\Namespace_|null $namespace
  * @return Reflection|null
  */
 public function __invoke(Reflector $reflector, Node $node, LocatedSource $locatedSource, Node\Stmt\Namespace_ $namespace = null)
 {
     if ($node instanceof Node\Stmt\ClassLike) {
         return ReflectionClass::createFromNode($reflector, $node, $locatedSource, $namespace);
     }
     if ($node instanceof Node\FunctionLike) {
         return ReflectionFunction::createFromNode($reflector, $node, $locatedSource, $namespace);
     }
     return null;
 }
Example #2
0
 /**
  * @param Node $node
  * @param LocatedSource $locatedSource
  * @param Node\Stmt\Namespace_|null $namespace
  * @return Reflection|null
  */
 private function reflectNode(Node $node, LocatedSource $locatedSource, Node\Stmt\Namespace_ $namespace = null)
 {
     if ($node instanceof Node\Stmt\ClassLike) {
         return ReflectionClass::createFromNode(new ClassReflector($this->sourceLocator), $node, $locatedSource, $namespace);
     }
     if ($node instanceof Node\Stmt\Function_) {
         return ReflectionFunction::createFromNode(new FunctionReflector($this->sourceLocator), $node, $locatedSource, $namespace);
     }
     return null;
 }
Example #3
0
 /**
  * @param Node $node
  * @param LocatedSource $locatedSource
  * @param Node\Stmt\Namespace_|null $namespace
  * @return Reflection|null
  */
 private function reflectNode(Node $node, LocatedSource $locatedSource, Node\Stmt\Namespace_ $namespace = null)
 {
     if ($node instanceof Node\Stmt\Class_) {
         return ReflectionClass::createFromNode($node, $locatedSource, $namespace);
     }
     if ($node instanceof Node\Stmt\Function_) {
         return ReflectionFunction::createFromNode($node, $locatedSource, $namespace);
     }
     return null;
 }
 public function testFetchingFqsenThrowsExceptionWithNonObjectName()
 {
     $sourceLocator = new StringSourceLocator('<?php class Foo {}');
     $reflector = new ClassReflector($sourceLocator);
     $identifier = new Identifier('Foo', new IdentifierType(IdentifierType::IDENTIFIER_CLASS));
     $locatedSource = $sourceLocator->__invoke($identifier);
     $node = new Class_('Foo');
     $reflection = ReflectionClass::createFromNode($reflector, $node, $locatedSource);
     $reflectionClassReflection = new \ReflectionClass(ReflectionClass::class);
     $reflectionClassMethodReflection = $reflectionClassReflection->getMethod('getFqsenFromNamedNode');
     $reflectionClassMethodReflection->setAccessible(true);
     $nameNode = new Name(['int']);
     $this->setExpectedException(\Exception::class, 'Unable to determine FQSEN for named node');
     $reflectionClassMethodReflection->invoke($reflection, $nameNode);
 }