/**
  * Maps reflection type
  *
  * @param  php.ReflectionMethod|php.ReflectionParameter $reflect
  * @param  string $name
  * @return php.Closure
  */
 private function mapReflectionType($reflect, $name)
 {
     if ('self' === $name) {
         return function () use($reflect) {
             return new XPClass($reflect->getDeclaringClass());
         };
     } else {
         if ('parent' === $name) {
             return function () use($reflect) {
                 if ($parent = $reflect->getDeclaringClass()->getParentClass()) {
                     return new XPClass($parent);
                 }
                 throw new IllegalStateException('Cannot resolve parent type of class without parent');
             };
         } else {
             return function () use($name) {
                 return Type::forName($name);
             };
         }
     }
 }
Esempio n. 2
0
 /**
  * Maps annotations
  *
  * @param  php.ReflectionParameter $reflect
  * @return [:var]
  */
 protected function paramAnnotations($reflect)
 {
     $target = '$' . $reflect->name;
     $details = XPClass::detailsForMethod($reflect->getDeclaringClass(), $reflect->getDeclaringFunction()->name);
     return isset($details[DETAIL_TARGET_ANNO][$target]) ? $this->annotationsOf($details[DETAIL_TARGET_ANNO][$target]) : null;
 }