private function paramType(\ReflectionMethod $method, \ReflectionParameter $param)
    {
        $methodAnnotations = annotationsOf($method);
        $paramAnnotations  = annotationsOf($param);
        $paramClass        = $param->getClass();
        if (null !== $paramClass) {
            if ($methodAnnotations->contain('Property') || $paramAnnotations->contain('Property')) {
                return PropertyBinding::TYPE;
            }

            return $paramClass->getName();
        }

        if ($methodAnnotations->contain('List') || $paramAnnotations->contain('List')) {
            return ListBinding::TYPE;
        }

        if ($methodAnnotations->contain('Map') || $paramAnnotations->contain('Map')) {
            return MapBinding::TYPE;
        }

        if ($methodAnnotations->contain('Property') || $paramAnnotations->contain('Property')) {
            return PropertyBinding::TYPE;
        }

        return ConstantBinding::TYPE;
    }
private function paramType(\ReflectionMethod $method, \ReflectionParameter $param)
    {
        $methodAnnotations = annotationsOf($method);
        $paramAnnotations  = annotationsOf($param);
        $paramClass        = $param->getClass();
        if (null !== $paramClass) {
            if ($methodAnnotations->contain('Property') || $paramAnnotations->contain('Property')) {
                return PropertyBinding::TYPE;
            }

            return $paramClass->getName();
        }

        if ($methodAnnotations->contain('List') || $paramAnnotations->contain('List')) {
            return ListBinding::TYPE;
        }

        if ($methodAnnotations->contain('Map') || $paramAnnotations->contain('Map')) {
            return MapBinding::TYPE;
        }

        if ($methodAnnotations->contain('Property') || $paramAnnotations->contain('Property')) {
            return PropertyBinding::TYPE;
        }

        return ConstantBinding::TYPE;
    }
returns type of param

@param   \ReflectionMethod     $method
@param   \ReflectionParameter  $param
@return  string