src/Psalm/Internal/Analyzer/MethodAnalyzer.php
public static function checkStatic(
        $method_id,
        $self_call,
        $is_context_dynamic,
        Codebase $codebase,
        CodeLocation $code_location,
        array $suppressed_issues,
        &$is_dynamic_this_method = false
    ) {
        $codebase_methods = $codebase->methods;

        if ($method_id === 'Closure::fromcallable') {
            return true;
        }

        $original_method_id = $method_id;

        $method_id = $codebase_methods->getDeclaringMethodId($method_id);

        if (!$method_id) {
            throw new \LogicException('Declaring method for ' . $original_method_id . ' should not be null');
        }

        $storage = $codebase_methods->getStorage($method_id);

        if (!$storage->is_static) {
            if ($self_call) {
                if (!$is_context_dynamic) {
                    if (IssueBuffer::accepts(
                        new NonStaticSelfCall(
                            'Method ' . $codebase_methods->getCasedMethodId($method_id) .
                                ' is not static, but is called ' .
                                'using self::',
                            $code_location
                        ),
                        $suppressed_issues
                    )) {
                        return false;
                    }
                } else {
                    $is_dynamic_this_method = true;
                }
            } else {
                if (IssueBuffer::accepts(
                    new InvalidStaticInvocation(
                        'Method ' . $codebase_methods->getCasedMethodId($method_id) .
                            ' is not static, but is called ' .
                            'statically',
                        $code_location
                    ),
                    $suppressed_issues
                )) {
                    return false;
                }
            }
        }

        return true;
    }
public static function checkStatic(
        $method_id,
        $self_call,
        $is_context_dynamic,
        Codebase $codebase,
        CodeLocation $code_location,
        array $suppressed_issues,
        &$is_dynamic_this_method = false
    ) {
        $codebase_methods = $codebase->methods;

        if ($method_id === 'Closure::fromcallable') {
            return true;
        }

        $original_method_id = $method_id;

        $method_id = $codebase_methods->getDeclaringMethodId($method_id);

        if (!$method_id) {
            throw new \LogicException('Declaring method for ' . $original_method_id . ' should not be null');
        }

        $storage = $codebase_methods->getStorage($method_id);

        if (!$storage->is_static) {
            if ($self_call) {
                if (!$is_context_dynamic) {
                    if (IssueBuffer::accepts(
                        new NonStaticSelfCall(
                            'Method ' . $codebase_methods->getCasedMethodId($method_id) .
                                ' is not static, but is called ' .
                                'using self::',
                            $code_location
                        ),
                        $suppressed_issues
                    )) {
                        return false;
                    }
                } else {
                    $is_dynamic_this_method = true;
                }
            } else {
                if (IssueBuffer::accepts(
                    new InvalidStaticInvocation(
                        'Method ' . $codebase_methods->getCasedMethodId($method_id) .
                            ' is not static, but is called ' .
                            'statically',
                        $code_location
                    ),
                    $suppressed_issues
                )) {
                    return false;
                }
            }
        }

        return true;
    }
public static function checkStatic ( $ method_id , $ self_call , $ is_context_dynamic , Codebase $ codebase , CodeLocation $ code_location , array $ suppressed_issues , & $ is_dynamic_this_method = false ) { $ codebase_methods = $ codebase -> methods ; if ( $ method_id === 'Closure::fromcallable' ) { return true ; } $ original_method_id = $ method_id ; $ method_id = $ codebase_methods -> getDeclaringMethodId ( $ method_id ) ; if ( ! $ method_id ) { throw new \ LogicException ( 'Declaring method for ' . $ original_method_id . ' should not be null' ) ; } $ storage = $ codebase_methods -> getStorage ( $ method_id ) ; if ( ! $ storage -> is_static ) { if ( $ self_call ) { if ( ! $ is_context_dynamic ) { if ( IssueBuffer :: accepts ( new NonStaticSelfCall ( 'Method ' . $ codebase_methods -> getCasedMethodId ( $ method_id ) . ' is not static, but is called ' . 'using self::' , $ code_location ) , $ suppressed_issues ) ) { return false ; } } else { $ is_dynamic_this_method = true ; } } else { if ( IssueBuffer :: accepts ( new InvalidStaticInvocation ( 'Method ' . $ codebase_methods -> getCasedMethodId ( $ method_id ) . ' is not static, but is called ' . 'statically' , $ code_location ) , $ suppressed_issues ) ) { return false ; } } } return true ; }
Determines whether a given method is static or not

@param  string          $method_id
@param  bool            $self_call
@param  bool            $is_context_dynamic
@param  CodeLocation    $code_location
@param  array<string>   $suppressed_issues
@param  bool            $is_dynamic_this_method

@return bool
Determines whether a given method is static or not