/**
  * Initializes a reflection for the property
  *
  * @param string|array $unusedFunctionName Name of the function/method
  * @param string $parameterName Name of the parameter to reflect
  * @param Param $parameterNode Parameter definition node
  * @param int $parameterIndex Index of parameter
  * @param \ReflectionFunctionAbstract $declaringFunction
  */
 public function __construct($unusedFunctionName, $parameterName, Param $parameterNode = null, $parameterIndex = 0, \ReflectionFunctionAbstract $declaringFunction = null)
 {
     // Let's unset original read-only property to have a control over it via __get
     unset($this->name);
     $this->parameterNode = $parameterNode;
     $this->parameterIndex = $parameterIndex;
     $this->declaringFunction = $declaringFunction;
     if ($this->isDefaultValueAvailable()) {
         if ($declaringFunction instanceof \ReflectionMethod) {
             $context = $declaringFunction->getDeclaringClass();
         } else {
             $context = $declaringFunction;
         }
         $expressionSolver = new NodeExpressionResolver($context);
         $expressionSolver->process($this->parameterNode->default);
         $this->defaultValue = $expressionSolver->getValue();
         $this->isDefaultValueConstant = $expressionSolver->isConstant();
         $this->defaultValueConstantName = $expressionSolver->getConstantName();
     }
 }