Pinq\Tests\Integration\Analysis\ExpressionAnalysisTestCase::getAnalysis PHP Метод

getAnalysis() защищенный Метод

protected getAnalysis ( callable $function, array $variableTypeMap = [], mixed &$expression = null ) : Pinq\Analysis\ITypeAnalysis
$function callable
$variableTypeMap array
$expression mixed
Результат Pinq\Analysis\ITypeAnalysis
    protected function getAnalysis(callable $function, array $variableTypeMap = [], &$expression = null)
    {
        $reflection = $this->functionInterpreter->getReflection($function);
        foreach ($reflection->getSignature()->getParameterExpressions() as $parameterExpression) {
            $variableTypeMap[$parameterExpression->getName()] = $this->typeSystem->getTypeFromTypeHint($parameterExpression->getTypeHint());
        }
        $analysisContext = $this->expressionAnalyser->createAnalysisContext($reflection->asEvaluationContext());
        foreach ($variableTypeMap as $variable => $type) {
            $analysisContext->setExpressionType(O\Expression::variable(O\Expression::value($variable)), $type);
        }
        $bodyExpressions = $this->functionInterpreter->getStructure($reflection)->getBodyExpressions();
        foreach ($bodyExpressions as $expression) {
            if ($expression instanceof O\ReturnExpression) {
                return $this->expressionAnalyser->analyse($analysisContext, $expression->getValue());
            } elseif (count($bodyExpressions) === 1) {
                return $this->expressionAnalyser->analyse($analysisContext, $expression);
            } else {
                $this->expressionAnalyser->analyse($analysisContext, $expression);
            }
        }
    }