Ejemplo n.º 1
0
 /**
  * @param Param $param
  * @param InjectionPoint $ip
  * @return Node\Expr
  * @throws Exception\DomainException
  */
 protected function compileParam(Param $param, InjectionPoint $ip)
 {
     if ($param instanceof Param\ClassParam) {
         $key = $param->getClass();
         // Just return this if it's asking for a container
         if ($key == Container::class) {
             return new Node\Expr\Variable('this');
         }
         // Get definition
         $definition = Utils::resolveAliasKey($this->definitions, $key, $param->isOptional());
         if ($definition) {
             return $this->compileParamInjectionPoint($definition, $ip);
         } else {
             return new Node\Expr\ConstFetch(new Node\Name('null'));
         }
     } else {
         if ($param instanceof Param\NamedParam) {
             $definition = Utils::resolveAliasKey($this->definitions, $param->getName(), true);
             if ($definition) {
                 return $this->compileParamInjectionPoint($definition, $ip);
             } else {
                 return new Node\Expr\MethodCall(new Node\Expr\Variable('this'), 'get', array(new Node\Arg(new Node\Scalar\String_($param->getName()))));
             }
         } else {
             if ($param instanceof Param\ValueParam) {
                 return new Node\Arg($this->compileValue($param->getValue()));
             } else {
                 if ($param instanceof Param\UnresolvedParam) {
                     $definition = Utils::resolveGlobalKey($this->definitions, $param->getName(), true);
                     if (!$definition) {
                         throw new Exception\OutOfBoundsException("Undefined identifier: " . $param->getName() . ' for definition: ' . $this->definition->getKey());
                     }
                     return $this->compileParamInjectionPoint($definition, $ip);
                 } else {
                     if ($param instanceof Param\InjectionPointParam) {
                         return new Node\Expr\ConstFetch(new Node\Name('WHOOPSIES'));
                     } else {
                         throw new Exception\DomainException('Unsupported parameter: ' . Utils::varInfo($param) . ' for definition: ' . $this->definition->getKey());
                     }
                 }
             }
         }
     }
 }
Ejemplo n.º 2
0
 /**
  * @param Definition $definition
  * @return $this
  */
 public function addDefinition(Definition $definition)
 {
     $this->definitions[$definition->getKey()] = $definition;
     return $this;
 }