PHPSA\Analyzer\Pass\Expression\Casts::pass PHP Method

pass() public method

public pass ( PhpParser\Node\Expr $expr, Context $context ) : boolean
$expr PhpParser\Node\Expr
$context PHPSA\Context
return boolean
    public function pass(Expr $expr, Context $context)
    {
        $castType = CompiledExpression::UNKNOWN;
        switch (get_class($expr)) {
            case Expr\Cast\Array_::class:
                $castType = CompiledExpression::ARR;
                break;
            case Expr\Cast\Bool_::class:
                $castType = CompiledExpression::BOOLEAN;
                break;
            case Expr\Cast\Int_::class:
                $castType = CompiledExpression::INTEGER;
                break;
            case Expr\Cast\Double::class:
                $castType = CompiledExpression::DOUBLE;
                break;
            case Expr\Cast\Object_::class:
                $castType = CompiledExpression::OBJECT;
                break;
            case Expr\Cast\String_::class:
                $castType = CompiledExpression::STRING;
                break;
        }
        $compiledExpression = $context->getExpressionCompiler()->compile($expr->expr);
        $exprType = $compiledExpression->getType();
        $typeName = $compiledExpression->getTypeName();
        if ($castType === $exprType) {
            $context->notice('stupid.cast', sprintf("You are trying to cast '%s' to '%s'", $typeName, $typeName), $expr);
            return true;
        } elseif (get_class($expr) == Expr\Cast\Unset_::class && $exprType === CompiledExpression::NULL) {
            $context->notice('stupid.cast', "You are trying to cast 'null' to 'unset' (null)", $expr);
            return true;
        }
        return false;
    }