protected function isScopeMethodUsable(ReflectionMethod $method)
    {
        // Scope methods with more or less required parameters than the query, should not be used.
        if ($method->getNumberOfRequiredParameters() != 1) {
            return false;
        }

        // If the required parameter is not the first, don't use it (safeguard)
        if ( ! ($firstParameter = head($method->getParameters())) || $firstParameter->isOptional()) {
            // @codeCoverageIgnoreStart
            return false;
            // @codeCoverageIgnoreEnd
        }

        $scopeName = camel_case(substr($method->name, 5));

        // Ignore scope methods with an explicity ignore cms docblock tag
        $cmsTags = $this->getCmsDocBlockTags($method);

        if (    array_get($cmsTags, 'ignore')
            ||  (   ! array_get($cmsTags, 'scope')
                &&  in_array($scopeName, $this->getIgnoredScopeNames() )
            )
        ) {
            return false;
        }

        return true;
    }