diff --git a/.github/workflows/ca.yml b/.github/workflows/ca.yml index 1e05d32..895e483 100644 --- a/.github/workflows/ca.yml +++ b/.github/workflows/ca.yml @@ -20,6 +20,7 @@ jobs: matrix: php-version: - "7.4" + - "8.1" steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/cs.yml b/.github/workflows/cs.yml index 19d71fc..1b826dd 100644 --- a/.github/workflows/cs.yml +++ b/.github/workflows/cs.yml @@ -20,6 +20,7 @@ jobs: matrix: php-version: - "7.4" + - "8.1" steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/example.yml b/.github/workflows/example.yml index e5739be..4f2842b 100644 --- a/.github/workflows/example.yml +++ b/.github/workflows/example.yml @@ -20,7 +20,7 @@ jobs: strategy: matrix: php-version: - - "7.4" + - "8.1" defaults: run: diff --git a/.github/workflows/mt.yml b/.github/workflows/mt.yml index fee5483..18ea155 100644 --- a/.github/workflows/mt.yml +++ b/.github/workflows/mt.yml @@ -17,7 +17,7 @@ jobs: strategy: matrix: php-version: - - "8.2" + - "8.4" steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml index b89fd5a..3795d39 100644 --- a/.github/workflows/php.yml +++ b/.github/workflows/php.yml @@ -22,6 +22,7 @@ jobs: - "8.1" - "8.2" - "8.3" + - "8.4" steps: - uses: actions/checkout@v3 diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php index 2edc5cd..eb56125 100644 --- a/.php-cs-fixer.dist.php +++ b/.php-cs-fixer.dist.php @@ -66,6 +66,7 @@ 'blank_line_after_opening_tag' => false, 'linebreak_after_opening_tag' => false, 'blank_line_between_import_groups' => false, + 'nullable_type_declaration_for_default_null_value' => true, ]) ->setFinder( PhpCsFixer\Finder::create() diff --git a/example/src/Automattic/MyAwesomeReader/StreamBuilder/Trending/Streams/TrendingTopicStream.php b/example/src/Automattic/MyAwesomeReader/StreamBuilder/Trending/Streams/TrendingTopicStream.php index 376abae..00f7957 100644 --- a/example/src/Automattic/MyAwesomeReader/StreamBuilder/Trending/Streams/TrendingTopicStream.php +++ b/example/src/Automattic/MyAwesomeReader/StreamBuilder/Trending/Streams/TrendingTopicStream.php @@ -48,8 +48,8 @@ public function __construct(string $identity) /** @inheritDoc */ protected function _enumerate( int $count, - StreamCursor $cursor = null, - StreamTracer $tracer = null, + ?StreamCursor $cursor = null, + ?StreamTracer $tracer = null, ?EnumerationOptions $option = null ): StreamResult { if (!$cursor instanceof TrendingTopicStreamCursor) { diff --git a/extras/phpcs/TumblrApp/ruleset.xml b/extras/phpcs/TumblrApp/ruleset.xml index 2c1282d..ee63131 100644 --- a/extras/phpcs/TumblrApp/ruleset.xml +++ b/extras/phpcs/TumblrApp/ruleset.xml @@ -202,6 +202,7 @@ + diff --git a/lib/Tumblr/StreamBuilder/Codec/Codec.php b/lib/Tumblr/StreamBuilder/Codec/Codec.php index d42cbf4..9520277 100644 --- a/lib/Tumblr/StreamBuilder/Codec/Codec.php +++ b/lib/Tumblr/StreamBuilder/Codec/Codec.php @@ -75,7 +75,7 @@ abstract class Codec * @param CacheProvider|null $cache_provider The cache provider used to deserialize a template. * @see @StreamContext, there are stuff from stream are cached during the to_template process. */ - public function __construct(CacheProvider $cache_provider = null) + public function __construct(?CacheProvider $cache_provider = null) { $this->cache_provider = $cache_provider; } diff --git a/lib/Tumblr/StreamBuilder/Exceptions/InvalidStreamArrayException.php b/lib/Tumblr/StreamBuilder/Exceptions/InvalidStreamArrayException.php index b92b8b1..93cb40e 100644 --- a/lib/Tumblr/StreamBuilder/Exceptions/InvalidStreamArrayException.php +++ b/lib/Tumblr/StreamBuilder/Exceptions/InvalidStreamArrayException.php @@ -30,7 +30,7 @@ class InvalidStreamArrayException extends \InvalidArgumentException /** * @param array|null $stream_array The stream_array which is sent to the deserializer */ - public function __construct(array $stream_array = null) + public function __construct(?array $stream_array = null) { parent::__construct(sprintf( 'Invalid stream array: %s', diff --git a/lib/Tumblr/StreamBuilder/Exceptions/TemplateNotFoundException.php b/lib/Tumblr/StreamBuilder/Exceptions/TemplateNotFoundException.php index 1f0755d..b6bdf3b 100644 --- a/lib/Tumblr/StreamBuilder/Exceptions/TemplateNotFoundException.php +++ b/lib/Tumblr/StreamBuilder/Exceptions/TemplateNotFoundException.php @@ -32,7 +32,7 @@ class TemplateNotFoundException extends \InvalidArgumentException * @param int $code The exception code. * @param \Throwable $previous The previous exception. */ - public function __construct($message = "Template not found", $code = 404, \Throwable $previous = null) + public function __construct($message = "Template not found", $code = 404, ?\Throwable $previous = null) { parent::__construct($message, $code, $previous); } diff --git a/lib/Tumblr/StreamBuilder/FencepostRanking/FencepostCursor.php b/lib/Tumblr/StreamBuilder/FencepostRanking/FencepostCursor.php index f65421f..805bfda 100644 --- a/lib/Tumblr/StreamBuilder/FencepostRanking/FencepostCursor.php +++ b/lib/Tumblr/StreamBuilder/FencepostRanking/FencepostCursor.php @@ -79,8 +79,8 @@ public function __construct( int $fencepost_timestamp_ms, int $region, int $head_offset, - StreamCursor $tail_cursor = null, - StreamCursor $inject_cursor = null + ?StreamCursor $tail_cursor = null, + ?StreamCursor $inject_cursor = null ) { if ($region !== self::REGION_INJECT && is_null($tail_cursor)) { throw new \InvalidArgumentException('Head or Tail region must contains tail_cursor'); diff --git a/lib/Tumblr/StreamBuilder/FencepostRanking/FencepostRankedStream.php b/lib/Tumblr/StreamBuilder/FencepostRanking/FencepostRankedStream.php index 3c099e6..6bd47fc 100644 --- a/lib/Tumblr/StreamBuilder/FencepostRanking/FencepostRankedStream.php +++ b/lib/Tumblr/StreamBuilder/FencepostRanking/FencepostRankedStream.php @@ -166,8 +166,8 @@ abstract protected function get_fence_id_str(): string; */ protected function _enumerate( int $count, - StreamCursor $cursor = null, - StreamTracer $tracer = null, + ?StreamCursor $cursor = null, + ?StreamTracer $tracer = null, ?EnumerationOptions $option = null ): StreamResult { if (!(is_null($cursor) || ($cursor instanceof FencepostCursor))) { @@ -195,7 +195,7 @@ protected function _enumerate( * @param EnumerationOptions|null $option The option on enumeration * @return array [Fencepost|null, FencepostRankedStreamCursor|null] */ - private function setup_enumeration(FencepostCursor $in_cursor = null, StreamTracer $tracer = null, ?EnumerationOptions $option = null) + private function setup_enumeration(?FencepostCursor $in_cursor = null, ?StreamTracer $tracer = null, ?EnumerationOptions $option = null) { if (!is_null($in_cursor)) { // you already have a cursor, try to turn it into a fencepost: @@ -287,7 +287,7 @@ private function setup_enumeration_from_existing_fencepost( private function setup_enumeration_from_new_fencepost( ?StreamTracer $tracer, int $now_ms, - int $latest_ms = null, + ?int $latest_ms = null, ?EnumerationOptions $option = null ): array { $fencepost = $this->commit_new_fencepost($now_ms, $latest_ms, $tracer, $option); @@ -558,7 +558,7 @@ private function enumerate_rec_head( protected function enumerate_final( int $count, FencepostCursor $cursor, - StreamTracer $tracer = null, + ?StreamTracer $tracer = null, ?EnumerationOptions $option = null ): StreamResult { StreamBuilder::getDependencyBag()->getLog() @@ -580,7 +580,7 @@ protected function enumerate_final_inner( int $count, ?StreamCursor $cursor, ?int $fencepost_timestamp_ms, - StreamTracer $tracer = null, + ?StreamTracer $tracer = null, ?EnumerationOptions $option = null ): StreamResult { $inner_result = $this->inner->enumerate($count, $cursor, $tracer, $option); @@ -608,8 +608,8 @@ protected function enumerate_final_inner( */ protected function commit_new_fencepost( int $current_ms, - int $previous_fencepost_ms = null, - StreamTracer $tracer = null, + ?int $previous_fencepost_ms = null, + ?StreamTracer $tracer = null, ?EnumerationOptions $option = null ) { // we are building a new fencepost between $current_ms and $previous_fencepost_ms. @@ -659,8 +659,8 @@ protected function enumerate_inner_between( int $before_ms_inclusive, ?int $after_ms_exclusive, int $count, - StreamCursor $inner_cursor = null, - StreamTracer $tracer = null + ?StreamCursor $inner_cursor = null, + ?StreamTracer $tracer = null ): StreamResult { $option = new EnumerationOptions($before_ms_inclusive, $after_ms_exclusive); $result = $this->inner->enumerate($count, $inner_cursor, $tracer, $option); @@ -701,7 +701,7 @@ public function can_enumerate_with_time_range(): bool public function log_commit_new_fence_stats( StreamResult $unranked_candidates, int $current_ms, - int $previous_fencepost_ms = null + ?int $previous_fencepost_ms = null ): void { $ps_gap_in_seconds = ($current_ms - ($previous_fencepost_ms ?? 0)) / 1000; // Track when last_ts is missing, putting 1 second as a placeholder diff --git a/lib/Tumblr/StreamBuilder/InjectionAllocatorResult.php b/lib/Tumblr/StreamBuilder/InjectionAllocatorResult.php index c108d1c..72efe4b 100644 --- a/lib/Tumblr/StreamBuilder/InjectionAllocatorResult.php +++ b/lib/Tumblr/StreamBuilder/InjectionAllocatorResult.php @@ -39,7 +39,7 @@ final class InjectionAllocatorResult * @param array|null $state The injector state to coordinate between different pages. * @throws TypeMismatchException If position is not an int. */ - public function __construct(array $out, array $state = null) + public function __construct(array $out, ?array $state = null) { foreach ($out as $position) { if (!is_int($position)) { diff --git a/lib/Tumblr/StreamBuilder/InjectionAllocators/ExpectedValueInjectionAllocator.php b/lib/Tumblr/StreamBuilder/InjectionAllocators/ExpectedValueInjectionAllocator.php index 1b3e525..e181446 100644 --- a/lib/Tumblr/StreamBuilder/InjectionAllocators/ExpectedValueInjectionAllocator.php +++ b/lib/Tumblr/StreamBuilder/InjectionAllocators/ExpectedValueInjectionAllocator.php @@ -72,7 +72,7 @@ public static function from_template(StreamContext $context): self /** * @inheritDoc */ - public function allocate(int $page_size, array $state = null): InjectionAllocatorResult + public function allocate(int $page_size, ?array $state = null): InjectionAllocatorResult { $expected_value = $page_size * $this->slot_injection_probability; $count = floor($expected_value); diff --git a/lib/Tumblr/StreamBuilder/InjectionAllocators/GlobalFixedInjectionAllocator.php b/lib/Tumblr/StreamBuilder/InjectionAllocators/GlobalFixedInjectionAllocator.php index 5597ccf..28c1fb9 100644 --- a/lib/Tumblr/StreamBuilder/InjectionAllocators/GlobalFixedInjectionAllocator.php +++ b/lib/Tumblr/StreamBuilder/InjectionAllocators/GlobalFixedInjectionAllocator.php @@ -32,7 +32,7 @@ class GlobalFixedInjectionAllocator extends FixedInjectionAllocator /** * @inheritDoc */ - public function allocate(int $page_size, array $state = null): InjectionAllocatorResult + public function allocate(int $page_size, ?array $state = null): InjectionAllocatorResult { $pos_base = $state['pos_base'] ?? 0; $out = []; diff --git a/lib/Tumblr/StreamBuilder/InjectionAllocators/InjectionAllocator.php b/lib/Tumblr/StreamBuilder/InjectionAllocators/InjectionAllocator.php index c63e6c0..b7ad276 100644 --- a/lib/Tumblr/StreamBuilder/InjectionAllocators/InjectionAllocator.php +++ b/lib/Tumblr/StreamBuilder/InjectionAllocators/InjectionAllocator.php @@ -36,5 +36,5 @@ abstract class InjectionAllocator extends Templatable * @param array|null $state The state of the injector. * @return InjectionAllocatorResult . */ - abstract public function allocate(int $page_size, array $state = null): InjectionAllocatorResult; + abstract public function allocate(int $page_size, ?array $state = null): InjectionAllocatorResult; } diff --git a/lib/Tumblr/StreamBuilder/InjectionAllocators/LocalFixedInjectionAllocator.php b/lib/Tumblr/StreamBuilder/InjectionAllocators/LocalFixedInjectionAllocator.php index d90a46e..f2bf685 100644 --- a/lib/Tumblr/StreamBuilder/InjectionAllocators/LocalFixedInjectionAllocator.php +++ b/lib/Tumblr/StreamBuilder/InjectionAllocators/LocalFixedInjectionAllocator.php @@ -31,7 +31,7 @@ class LocalFixedInjectionAllocator extends FixedInjectionAllocator /** * @inheritDoc */ - public function allocate(int $page_size, array $state = null): InjectionAllocatorResult + public function allocate(int $page_size, ?array $state = null): InjectionAllocatorResult { $out = []; foreach ($this->positions as $p) { diff --git a/lib/Tumblr/StreamBuilder/InjectionAllocators/ProbabilisticInjectionAllocator.php b/lib/Tumblr/StreamBuilder/InjectionAllocators/ProbabilisticInjectionAllocator.php index ebca9d7..76daac1 100644 --- a/lib/Tumblr/StreamBuilder/InjectionAllocators/ProbabilisticInjectionAllocator.php +++ b/lib/Tumblr/StreamBuilder/InjectionAllocators/ProbabilisticInjectionAllocator.php @@ -61,7 +61,7 @@ public static function from_template(StreamContext $context): self /** * @inheritDoc */ - public function allocate(int $page_size, array $state = null): InjectionAllocatorResult + public function allocate(int $page_size, ?array $state = null): InjectionAllocatorResult { $out = []; $mt_randmax = mt_getrandmax(); diff --git a/lib/Tumblr/StreamBuilder/InjectionAllocators/UniformInjectionAllocator.php b/lib/Tumblr/StreamBuilder/InjectionAllocators/UniformInjectionAllocator.php index e455c2c..a68e33d 100644 --- a/lib/Tumblr/StreamBuilder/InjectionAllocators/UniformInjectionAllocator.php +++ b/lib/Tumblr/StreamBuilder/InjectionAllocators/UniformInjectionAllocator.php @@ -71,7 +71,7 @@ public static function from_template(StreamContext $context): self /** * @inheritDoc */ - public function allocate(int $page_size, array $state = null): InjectionAllocatorResult + public function allocate(int $page_size, ?array $state = null): InjectionAllocatorResult { $out = []; // If there's no next_offset is set, we use remainder, most likely in the first page. diff --git a/lib/Tumblr/StreamBuilder/InjectionPlan.php b/lib/Tumblr/StreamBuilder/InjectionPlan.php index 9599ca6..48eb1f4 100644 --- a/lib/Tumblr/StreamBuilder/InjectionPlan.php +++ b/lib/Tumblr/StreamBuilder/InjectionPlan.php @@ -47,7 +47,7 @@ class InjectionPlan * @param array|null $injector_state An array representing the state of the injector, if any, after injection. * @throws TypeMismatchException If some value in the provided array is not a StreamInjection. */ - public function __construct(array $index_to_injection, array $injector_state = null) + public function __construct(array $index_to_injection, ?array $injector_state = null) { foreach ($index_to_injection as $j) { if (!($j instanceof StreamInjection)) { diff --git a/lib/Tumblr/StreamBuilder/SignalFetchers/CompositeSignalFetcher.php b/lib/Tumblr/StreamBuilder/SignalFetchers/CompositeSignalFetcher.php index c3aead4..a79e795 100644 --- a/lib/Tumblr/StreamBuilder/SignalFetchers/CompositeSignalFetcher.php +++ b/lib/Tumblr/StreamBuilder/SignalFetchers/CompositeSignalFetcher.php @@ -53,7 +53,7 @@ public function __construct(array $fetchers, string $identity) /** * @inheritDoc */ - protected function fetch_inner(array $stream_elements, StreamTracer $tracer = null): SignalBundle + protected function fetch_inner(array $stream_elements, ?StreamTracer $tracer = null): SignalBundle { $bundles = []; foreach ($this->fetchers as $fetcher) { diff --git a/lib/Tumblr/StreamBuilder/SignalFetchers/SignalFetcher.php b/lib/Tumblr/StreamBuilder/SignalFetchers/SignalFetcher.php index 2266fec..734c8b1 100644 --- a/lib/Tumblr/StreamBuilder/SignalFetchers/SignalFetcher.php +++ b/lib/Tumblr/StreamBuilder/SignalFetchers/SignalFetcher.php @@ -40,7 +40,7 @@ abstract class SignalFetcher extends Templatable * @throws TypeMismatchException If some element is not a StreamElement. * @throws \Exception If the signal fetcher fails for some other reason. */ - final public function fetch(array $stream_elements, StreamTracer $tracer = null): SignalBundle + final public function fetch(array $stream_elements, ?StreamTracer $tracer = null): SignalBundle { foreach ($stream_elements as $stream_element) { if (!($stream_element instanceof StreamElement)) { @@ -72,7 +72,7 @@ final public function fetch(array $stream_elements, StreamTracer $tracer = null) * @param StreamTracer|null $tracer Tracer to use for metrics and logging of signal fetching process. * @return SignalBundle */ - abstract protected function fetch_inner(array $stream_elements, StreamTracer $tracer = null): SignalBundle; + abstract protected function fetch_inner(array $stream_elements, ?StreamTracer $tracer = null): SignalBundle; /** * Get the string representation of the current signal fetcher. diff --git a/lib/Tumblr/StreamBuilder/SignalFetchers/TimestampFetcher.php b/lib/Tumblr/StreamBuilder/SignalFetchers/TimestampFetcher.php index 4b883af..0bd9ad5 100644 --- a/lib/Tumblr/StreamBuilder/SignalFetchers/TimestampFetcher.php +++ b/lib/Tumblr/StreamBuilder/SignalFetchers/TimestampFetcher.php @@ -35,7 +35,7 @@ final class TimestampFetcher extends SignalFetcher /** * @inheritDoc */ - protected function fetch_inner(array $stream_elements, StreamTracer $tracer = null): SignalBundle + protected function fetch_inner(array $stream_elements, ?StreamTracer $tracer = null): SignalBundle { $builder = new SignalBundleBuilder(); foreach ($stream_elements as $stream_element) { diff --git a/lib/Tumblr/StreamBuilder/StreamCursors/ConcatenatedStreamCursor.php b/lib/Tumblr/StreamBuilder/StreamCursors/ConcatenatedStreamCursor.php index e225c3a..9175f2a 100644 --- a/lib/Tumblr/StreamBuilder/StreamCursors/ConcatenatedStreamCursor.php +++ b/lib/Tumblr/StreamBuilder/StreamCursors/ConcatenatedStreamCursor.php @@ -39,7 +39,7 @@ class ConcatenatedStreamCursor extends StreamCursor * @param StreamCursor $source_cursor The original cursor of element * @throws \InvalidArgumentException If source index is not an int. */ - public function __construct(int $source_index, StreamCursor $source_cursor = null) + public function __construct(int $source_index, ?StreamCursor $source_cursor = null) { $this->source_index = $source_index; $this->source_cursor = $source_cursor; diff --git a/lib/Tumblr/StreamBuilder/StreamCursors/FilteredStreamCursor.php b/lib/Tumblr/StreamBuilder/StreamCursors/FilteredStreamCursor.php index e5dab8b..b66501c 100644 --- a/lib/Tumblr/StreamBuilder/StreamCursors/FilteredStreamCursor.php +++ b/lib/Tumblr/StreamBuilder/StreamCursors/FilteredStreamCursor.php @@ -42,7 +42,7 @@ final class FilteredStreamCursor extends StreamCursor * @param StreamCursor|null $cursor The inner cursor tracking pagination state of the inner stream to be filtered. * @param StreamFilterState|null $filter_state The filter state. */ - public function __construct(StreamCursor $cursor = null, StreamFilterState $filter_state = null) + public function __construct(?StreamCursor $cursor = null, ?StreamFilterState $filter_state = null) { $this->cursor = $cursor; $this->filter_state = $filter_state; @@ -83,7 +83,7 @@ public static function from_template(StreamContext $context): self * @param StreamFilterState|null $filter_state The filter state. * @return FilteredStreamCursor */ - public function with_filter_state(StreamFilterState $filter_state = null): FilteredStreamCursor + public function with_filter_state(?StreamFilterState $filter_state = null): FilteredStreamCursor { return new self($this->cursor, $filter_state); } diff --git a/lib/Tumblr/StreamBuilder/StreamCursors/InjectedStreamCursor.php b/lib/Tumblr/StreamBuilder/StreamCursors/InjectedStreamCursor.php index ba4149d..35d8626 100644 --- a/lib/Tumblr/StreamBuilder/StreamCursors/InjectedStreamCursor.php +++ b/lib/Tumblr/StreamBuilder/StreamCursors/InjectedStreamCursor.php @@ -43,7 +43,7 @@ final class InjectedStreamCursor extends StreamCursor * @param StreamCursor $inner_cursor The cursor for the inner stream. * @param array|null $injector_state The injector state. */ - public function __construct(StreamCursor $inner_cursor = null, array $injector_state = null) + public function __construct(?StreamCursor $inner_cursor = null, ?array $injector_state = null) { $this->inner_cursor = $inner_cursor; $this->injector_state = $injector_state; diff --git a/lib/Tumblr/StreamBuilder/StreamCursors/MultiCursor.php b/lib/Tumblr/StreamBuilder/StreamCursors/MultiCursor.php index a4aaa78..17f7a36 100644 --- a/lib/Tumblr/StreamBuilder/StreamCursors/MultiCursor.php +++ b/lib/Tumblr/StreamBuilder/StreamCursors/MultiCursor.php @@ -41,7 +41,7 @@ final class MultiCursor extends StreamCursor * @param array $stream_to_cursor Mapping from stream ids (strings) to StreamCursor objects * @param array|null $injector_state State of injector, if any. */ - public function __construct(array $stream_to_cursor, array $injector_state = null) + public function __construct(array $stream_to_cursor, ?array $injector_state = null) { $this->stream_to_cursor = $stream_to_cursor; $this->injector_state = $injector_state; @@ -115,7 +115,7 @@ public function get_injector_state() * @param array|null $injector_state State of injector, if any. * @return MultiCursor */ - public function with_injector_state(array $injector_state = null): self + public function with_injector_state(?array $injector_state = null): self { return new MultiCursor($this->stream_to_cursor, $injector_state); } diff --git a/lib/Tumblr/StreamBuilder/StreamCursors/StreamCursor.php b/lib/Tumblr/StreamBuilder/StreamCursors/StreamCursor.php index e102237..474f621 100644 --- a/lib/Tumblr/StreamBuilder/StreamCursors/StreamCursor.php +++ b/lib/Tumblr/StreamBuilder/StreamCursors/StreamCursor.php @@ -60,7 +60,7 @@ abstract class StreamCursor extends Templatable * @param StreamCursor|null $other The other cursor. * @return bool True, iff the cursors can combine. */ - final public function can_combine_with(StreamCursor $other = null): bool + final public function can_combine_with(?StreamCursor $other = null): bool { return is_null($other) || $this->_can_combine_with($other); } @@ -73,7 +73,7 @@ final public function can_combine_with(StreamCursor $other = null): bool * @throws UncombinableCursorException If the provided cursor cannot be combined * with this cursor. */ - final public function combine_with(StreamCursor $other = null): self + final public function combine_with(?StreamCursor $other = null): self { if (is_null($other)) { return $this; @@ -158,7 +158,7 @@ public static function encode( string $secret, string $encrypt_key, string $initial_vector_seed = '', - CacheProvider $cache_provider = null, + ?CacheProvider $cache_provider = null, int $cache_size_threshold = self::DEFAULT_CACHE_SIZE_THRESHOLD, ?string $context = null, ?string $current_user_id = null @@ -220,7 +220,7 @@ public static function decode( array $encrypt_keys, ?string $current_user_id = null, array $encrypt_seeds = [], - CacheProvider $cache_provider = null + ?CacheProvider $cache_provider = null ): ?self { if (empty(trim($cursor_string))) { return null; diff --git a/lib/Tumblr/StreamBuilder/StreamFilterState.php b/lib/Tumblr/StreamBuilder/StreamFilterState.php index f2c83ec..f66975e 100644 --- a/lib/Tumblr/StreamBuilder/StreamFilterState.php +++ b/lib/Tumblr/StreamBuilder/StreamFilterState.php @@ -34,7 +34,7 @@ abstract class StreamFilterState extends Templatable * @param StreamFilterState|null $other The other state. * @return bool True, iff the states can merge. */ - final public function can_merge_with(StreamFilterState $other = null): bool + final public function can_merge_with(?StreamFilterState $other = null): bool { return is_null($other) || $this->_can_merge_with($other); } @@ -52,7 +52,7 @@ abstract protected function _can_merge_with(StreamFilterState $other): bool; * @return StreamFilterState The combined state. * @throws UnmergeableFilterStateException If the provided state cannot be merged with this state. */ - final public function merge_with(StreamFilterState $other = null): StreamFilterState + final public function merge_with(?StreamFilterState $other = null): StreamFilterState { if (is_null($other)) { return $this; diff --git a/lib/Tumblr/StreamBuilder/StreamFilters/CachedStreamFilter.php b/lib/Tumblr/StreamBuilder/StreamFilters/CachedStreamFilter.php index 94ab8b7..40e40da 100644 --- a/lib/Tumblr/StreamBuilder/StreamFilters/CachedStreamFilter.php +++ b/lib/Tumblr/StreamBuilder/StreamFilters/CachedStreamFilter.php @@ -139,7 +139,7 @@ public static function from_template(StreamContext $context): self /** * @inheritDoc */ - final public function filter_inner(array $elements, StreamFilterState $state = null, StreamTracer $tracer = null): StreamFilterResult + final public function filter_inner(array $elements, ?StreamFilterState $state = null, ?StreamTracer $tracer = null): StreamFilterResult { $key_to_index = []; $index_to_key = []; diff --git a/lib/Tumblr/StreamBuilder/StreamFilters/ChronologicalRangeFilter.php b/lib/Tumblr/StreamBuilder/StreamFilters/ChronologicalRangeFilter.php index fb4267d..56ccac8 100644 --- a/lib/Tumblr/StreamBuilder/StreamFilters/ChronologicalRangeFilter.php +++ b/lib/Tumblr/StreamBuilder/StreamFilters/ChronologicalRangeFilter.php @@ -47,8 +47,8 @@ final class ChronologicalRangeFilter extends StreamElementFilter */ public function __construct( string $identity, - int $max_timestamp_ms_inclusive = null, - int $min_timestamp_ms_exclusive = null, + ?int $max_timestamp_ms_inclusive = null, + ?int $min_timestamp_ms_exclusive = null, bool $release_non_chrono = false ) { if (is_null($max_timestamp_ms_inclusive) && is_null($min_timestamp_ms_exclusive)) { diff --git a/lib/Tumblr/StreamBuilder/StreamFilters/CompositeStreamFilter.php b/lib/Tumblr/StreamBuilder/StreamFilters/CompositeStreamFilter.php index 24ccd24..4a71256 100644 --- a/lib/Tumblr/StreamBuilder/StreamFilters/CompositeStreamFilter.php +++ b/lib/Tumblr/StreamBuilder/StreamFilters/CompositeStreamFilter.php @@ -113,7 +113,7 @@ public static function from_template(StreamContext $context): self /** * @inheritDoc */ - final public function filter_inner(array $elements, StreamFilterState $state = null, StreamTracer $tracer = null): StreamFilterResult + final public function filter_inner(array $elements, ?StreamFilterState $state = null, ?StreamTracer $tracer = null): StreamFilterResult { /** @var CompositeStreamFilterState $state */ if (is_null($state)) { diff --git a/lib/Tumblr/StreamBuilder/StreamFilters/DeduplicatedStreamFilter.php b/lib/Tumblr/StreamBuilder/StreamFilters/DeduplicatedStreamFilter.php index f69a723..7b94718 100644 --- a/lib/Tumblr/StreamBuilder/StreamFilters/DeduplicatedStreamFilter.php +++ b/lib/Tumblr/StreamBuilder/StreamFilters/DeduplicatedStreamFilter.php @@ -67,7 +67,7 @@ public function get_state_id() /** * @inheritDoc */ - final public function filter_inner(array $elements, StreamFilterState $state = null, StreamTracer $tracer = null): StreamFilterResult + final public function filter_inner(array $elements, ?StreamFilterState $state = null, ?StreamTracer $tracer = null): StreamFilterResult { /** @var DeduplicatedStreamFilterState $state */ if (is_null($state)) { diff --git a/lib/Tumblr/StreamBuilder/StreamFilters/InverseFilter.php b/lib/Tumblr/StreamBuilder/StreamFilters/InverseFilter.php index a2f378b..97c7d16 100644 --- a/lib/Tumblr/StreamBuilder/StreamFilters/InverseFilter.php +++ b/lib/Tumblr/StreamBuilder/StreamFilters/InverseFilter.php @@ -93,7 +93,7 @@ public static function from_template(StreamContext $context): self /** * @inheritDoc */ - final public function filter_inner(array $elements, StreamFilterState $state = null, StreamTracer $tracer = null): StreamFilterResult + final public function filter_inner(array $elements, ?StreamFilterState $state = null, ?StreamTracer $tracer = null): StreamFilterResult { return $this->inner->filter($elements, $state, $tracer)->get_inverse(); } diff --git a/lib/Tumblr/StreamBuilder/StreamFilters/NoopStreamFilter.php b/lib/Tumblr/StreamBuilder/StreamFilters/NoopStreamFilter.php index c20453c..638bcc1 100644 --- a/lib/Tumblr/StreamBuilder/StreamFilters/NoopStreamFilter.php +++ b/lib/Tumblr/StreamBuilder/StreamFilters/NoopStreamFilter.php @@ -34,7 +34,7 @@ class NoopStreamFilter extends StreamFilter /** * @inheritDoc */ - final public function filter_inner(array $elements, StreamFilterState $state = null, StreamTracer $tracer = null): StreamFilterResult + final public function filter_inner(array $elements, ?StreamFilterState $state = null, ?StreamTracer $tracer = null): StreamFilterResult { $retained = $elements; $released = []; diff --git a/lib/Tumblr/StreamBuilder/StreamFilters/StreamElementFilter.php b/lib/Tumblr/StreamBuilder/StreamFilters/StreamElementFilter.php index a1cb77f..f15e468 100644 --- a/lib/Tumblr/StreamBuilder/StreamFilters/StreamElementFilter.php +++ b/lib/Tumblr/StreamBuilder/StreamFilters/StreamElementFilter.php @@ -34,7 +34,7 @@ abstract class StreamElementFilter extends StreamFilter /** * @inheritDoc */ - final public function filter_inner(array $elements, StreamFilterState $state = null, StreamTracer $tracer = null): StreamFilterResult + final public function filter_inner(array $elements, ?StreamFilterState $state = null, ?StreamTracer $tracer = null): StreamFilterResult { $retained = []; $released = []; diff --git a/lib/Tumblr/StreamBuilder/StreamInjectors/GeneralStreamInjector.php b/lib/Tumblr/StreamBuilder/StreamInjectors/GeneralStreamInjector.php index a7bcfbc..c6204eb 100644 --- a/lib/Tumblr/StreamBuilder/StreamInjectors/GeneralStreamInjector.php +++ b/lib/Tumblr/StreamBuilder/StreamInjectors/GeneralStreamInjector.php @@ -75,8 +75,8 @@ public function __construct( protected function _plan_injection( int $page_size, Stream $requesting_stream, - array $state = null, - StreamTracer $tracer = null + ?array $state = null, + ?StreamTracer $tracer = null ): InjectionPlan { $allocate_result = $this->allocator->allocate($page_size, $state); $cursor = $this->cursorFromInjectionState($state ?? []); diff --git a/lib/Tumblr/StreamBuilder/StreamInjectors/NoopInjector.php b/lib/Tumblr/StreamBuilder/StreamInjectors/NoopInjector.php index 40d2bac..f45edc9 100644 --- a/lib/Tumblr/StreamBuilder/StreamInjectors/NoopInjector.php +++ b/lib/Tumblr/StreamBuilder/StreamInjectors/NoopInjector.php @@ -33,7 +33,7 @@ final class NoopInjector extends StreamInjector /** * @inheritDoc */ - protected function _plan_injection(int $page_size, Stream $requesting_stream, array $state = null, StreamTracer $tracer = null): InjectionPlan + protected function _plan_injection(int $page_size, Stream $requesting_stream, ?array $state = null, ?StreamTracer $tracer = null): InjectionPlan { return new InjectionPlan([], null); } diff --git a/lib/Tumblr/StreamBuilder/StreamInjectors/PrioritizedCompositeInjector.php b/lib/Tumblr/StreamBuilder/StreamInjectors/PrioritizedCompositeInjector.php index 464f73b..84c77a6 100644 --- a/lib/Tumblr/StreamBuilder/StreamInjectors/PrioritizedCompositeInjector.php +++ b/lib/Tumblr/StreamBuilder/StreamInjectors/PrioritizedCompositeInjector.php @@ -40,8 +40,8 @@ final class PrioritizedCompositeInjector extends CompositeStreamInjector protected function _plan_injection( int $page_size, Stream $requesting_stream, - array $state = null, - StreamTracer $tracer = null + ?array $state = null, + ?StreamTracer $tracer = null ): InjectionPlan { if (is_null($state)) { $state = []; diff --git a/lib/Tumblr/StreamBuilder/StreamInjectors/SingleElementInjector.php b/lib/Tumblr/StreamBuilder/StreamInjectors/SingleElementInjector.php index de9f4ca..d7b7099 100644 --- a/lib/Tumblr/StreamBuilder/StreamInjectors/SingleElementInjector.php +++ b/lib/Tumblr/StreamBuilder/StreamInjectors/SingleElementInjector.php @@ -53,8 +53,8 @@ public function __construct(InjectionAllocator $allocator, string $identity) protected function _plan_injection( int $page_size, Stream $requesting_stream, - array $state = null, - StreamTracer $tracer = null + ?array $state = null, + ?StreamTracer $tracer = null ): InjectionPlan { $allocate_result = $this->allocator->allocate($page_size, $state); $slots = $allocate_result->get_allocate_output(); diff --git a/lib/Tumblr/StreamBuilder/StreamInjectors/StreamInjector.php b/lib/Tumblr/StreamBuilder/StreamInjectors/StreamInjector.php index acb1519..27c8c41 100644 --- a/lib/Tumblr/StreamBuilder/StreamInjectors/StreamInjector.php +++ b/lib/Tumblr/StreamBuilder/StreamInjectors/StreamInjector.php @@ -43,8 +43,8 @@ abstract class StreamInjector extends Templatable final public function plan_injection( int $page_size, Stream $requesting_stream, - array $state = null, - StreamTracer $tracer = null + ?array $state = null, + ?StreamTracer $tracer = null ): InjectionPlan { $t0 = microtime(true); if (!$this->can_inject()) { @@ -88,8 +88,8 @@ protected function can_inject(): bool abstract protected function _plan_injection( int $page_size, Stream $requesting_stream, - array $state = null, - StreamTracer $tracer = null + ?array $state = null, + ?StreamTracer $tracer = null ): InjectionPlan; /** diff --git a/lib/Tumblr/StreamBuilder/StreamRankers/CappedPostRanker.php b/lib/Tumblr/StreamBuilder/StreamRankers/CappedPostRanker.php index 31a0745..b7ad9da 100644 --- a/lib/Tumblr/StreamBuilder/StreamRankers/CappedPostRanker.php +++ b/lib/Tumblr/StreamBuilder/StreamRankers/CappedPostRanker.php @@ -70,7 +70,7 @@ class CappedPostRanker extends StreamRanker public function __construct( User $user, string $identity, - bool $debug = null, + ?bool $debug = null, bool $cap_desc, int $cap, string $ranking_context, @@ -88,7 +88,7 @@ public function __construct( /** * @inheritDoc */ - protected function rank_inner(array $stream_elements, StreamTracer $tracer = null): array + protected function rank_inner(array $stream_elements, ?StreamTracer $tracer = null): array { if ($this->can_rank()) { return $this->apply_capped_reranking($stream_elements, $this->debug, $this->cap_desc, $this->cap); diff --git a/lib/Tumblr/StreamBuilder/StreamRankers/DitheringRanker.php b/lib/Tumblr/StreamBuilder/StreamRankers/DitheringRanker.php index 28f4b0e..1b0db57 100644 --- a/lib/Tumblr/StreamBuilder/StreamRankers/DitheringRanker.php +++ b/lib/Tumblr/StreamBuilder/StreamRankers/DitheringRanker.php @@ -68,7 +68,7 @@ public function __construct( /** * @inheritDoc */ - protected function rank_inner(array $stream_elements, StreamTracer $tracer = null): array + protected function rank_inner(array $stream_elements, ?StreamTracer $tracer = null): array { if (empty($stream_elements)) { return []; diff --git a/lib/Tumblr/StreamBuilder/StreamRankers/RandomRanker.php b/lib/Tumblr/StreamBuilder/StreamRankers/RandomRanker.php index 95288b0..1b23974 100644 --- a/lib/Tumblr/StreamBuilder/StreamRankers/RandomRanker.php +++ b/lib/Tumblr/StreamBuilder/StreamRankers/RandomRanker.php @@ -32,7 +32,7 @@ final class RandomRanker extends StreamRanker /** * @inheritDoc */ - protected function rank_inner(array $stream_elements, StreamTracer $tracer = null): array + protected function rank_inner(array $stream_elements, ?StreamTracer $tracer = null): array { shuffle($stream_elements); return $stream_elements; diff --git a/lib/Tumblr/StreamBuilder/StreamRankers/SignalFetcherStreamRanker.php b/lib/Tumblr/StreamBuilder/StreamRankers/SignalFetcherStreamRanker.php index dbd4050..63709b1 100644 --- a/lib/Tumblr/StreamBuilder/StreamRankers/SignalFetcherStreamRanker.php +++ b/lib/Tumblr/StreamBuilder/StreamRankers/SignalFetcherStreamRanker.php @@ -49,7 +49,7 @@ public function __construct(SignalFetcher $signal_fetcher, string $identity) /** * @inheritDoc */ - final protected function rank_inner(array $stream_elements, StreamTracer $tracer = null): array + final protected function rank_inner(array $stream_elements, ?StreamTracer $tracer = null): array { /** @var StreamElement[] $stream_elements */ $signals = $this->signal_fetcher->fetch($stream_elements, $tracer); diff --git a/lib/Tumblr/StreamBuilder/StreamRankers/StreamRanker.php b/lib/Tumblr/StreamBuilder/StreamRankers/StreamRanker.php index 2f43d98..85e90de 100644 --- a/lib/Tumblr/StreamBuilder/StreamRankers/StreamRanker.php +++ b/lib/Tumblr/StreamBuilder/StreamRankers/StreamRanker.php @@ -41,7 +41,7 @@ abstract class StreamRanker extends Templatable * @throws IllegalRankerException If the rank method adds or removes elements. * Also, rethrows \Exception if some other error occurs, but PHPCBF does not want me to document this. */ - final public function rank(array $stream_elements, StreamTracer $tracer = null): array + final public function rank(array $stream_elements, ?StreamTracer $tracer = null): array { foreach ($stream_elements as $stream_element) { if (!($stream_element instanceof StreamElement)) { @@ -83,7 +83,7 @@ final public function rank(array $stream_elements, StreamTracer $tracer = null): * @param StreamTracer|null $tracer Tracer to use for metrics and logging of ranking process. * @return StreamElement[] Same elements as input, reranked. It is illegal to add or remove elements during this operation. */ - abstract protected function rank_inner(array $stream_elements, StreamTracer $tracer = null): array; + abstract protected function rank_inner(array $stream_elements, ?StreamTracer $tracer = null): array; /** * A batch pre-fetch to inflate a set of stream elements or cache data need to be used in your ranker. diff --git a/lib/Tumblr/StreamBuilder/StreamRankers/WeightedRandomStreamRanker.php b/lib/Tumblr/StreamBuilder/StreamRankers/WeightedRandomStreamRanker.php index 5fc2d17..d66aa42 100644 --- a/lib/Tumblr/StreamBuilder/StreamRankers/WeightedRandomStreamRanker.php +++ b/lib/Tumblr/StreamBuilder/StreamRankers/WeightedRandomStreamRanker.php @@ -34,7 +34,7 @@ class WeightedRandomStreamRanker extends StreamRanker * @inheritDoc * @psalm-suppress UndefinedDocblockClass */ - protected function rank_inner(array $stream_elements, StreamTracer $tracer = null): array + protected function rank_inner(array $stream_elements, ?StreamTracer $tracer = null): array { // if there are no stream elements to rank, return early if (empty($stream_elements)) { diff --git a/lib/Tumblr/StreamBuilder/Streams/BufferedRankedStream.php b/lib/Tumblr/StreamBuilder/Streams/BufferedRankedStream.php index 9754bff..3b3629f 100644 --- a/lib/Tumblr/StreamBuilder/Streams/BufferedRankedStream.php +++ b/lib/Tumblr/StreamBuilder/Streams/BufferedRankedStream.php @@ -68,8 +68,8 @@ public function __construct(Stream $inner, StreamRanker $ranker, int $overfetch_ */ public function _enumerate( int $count, - StreamCursor $cursor = null, - StreamTracer $tracer = null, + ?StreamCursor $cursor = null, + ?StreamTracer $tracer = null, ?EnumerationOptions $option = null ): StreamResult { if (is_null($cursor)) { diff --git a/lib/Tumblr/StreamBuilder/Streams/CachedStream.php b/lib/Tumblr/StreamBuilder/Streams/CachedStream.php index 686a4ec..69c1883 100644 --- a/lib/Tumblr/StreamBuilder/Streams/CachedStream.php +++ b/lib/Tumblr/StreamBuilder/Streams/CachedStream.php @@ -174,7 +174,7 @@ abstract protected function inner_cursor(?StreamCursor $cursor): ?StreamCursor; abstract protected function _slice_result_with_cursor( int $count, StreamResult $inner_result, - StreamCursor $cursor = null + ?StreamCursor $cursor = null ): StreamResult; /** diff --git a/lib/Tumblr/StreamBuilder/Streams/ChronologicalBackfillStream.php b/lib/Tumblr/StreamBuilder/Streams/ChronologicalBackfillStream.php index c7e9fa4..ccaea75 100644 --- a/lib/Tumblr/StreamBuilder/Streams/ChronologicalBackfillStream.php +++ b/lib/Tumblr/StreamBuilder/Streams/ChronologicalBackfillStream.php @@ -72,8 +72,8 @@ public function __construct( */ protected function _enumerate( int $count, - StreamCursor $cursor = null, - StreamTracer $tracer = null, + ?StreamCursor $cursor = null, + ?StreamTracer $tracer = null, ?EnumerationOptions $option = null ): StreamResult { /** @var MultiCursor $cursor */ diff --git a/lib/Tumblr/StreamBuilder/Streams/ChronologicalRangedStream.php b/lib/Tumblr/StreamBuilder/Streams/ChronologicalRangedStream.php index 8d8a9cb..c7ff50c 100644 --- a/lib/Tumblr/StreamBuilder/Streams/ChronologicalRangedStream.php +++ b/lib/Tumblr/StreamBuilder/Streams/ChronologicalRangedStream.php @@ -64,8 +64,8 @@ public function __construct(Stream $inner, string $identity, ?int $min_age = nul */ final protected function _enumerate( int $count, - StreamCursor $cursor = null, - StreamTracer $tracer = null, + ?StreamCursor $cursor = null, + ?StreamTracer $tracer = null, ?EnumerationOptions $option = null ): StreamResult { $now = time(); diff --git a/lib/Tumblr/StreamBuilder/Streams/ConcatenatedStream.php b/lib/Tumblr/StreamBuilder/Streams/ConcatenatedStream.php index 678b374..3405195 100644 --- a/lib/Tumblr/StreamBuilder/Streams/ConcatenatedStream.php +++ b/lib/Tumblr/StreamBuilder/Streams/ConcatenatedStream.php @@ -78,8 +78,8 @@ public function getStreams(): array */ protected function _enumerate( int $count, - StreamCursor $cursor = null, - StreamTracer $tracer = null, + ?StreamCursor $cursor = null, + ?StreamTracer $tracer = null, ?EnumerationOptions $option = null ): StreamResult { // if this stream does not contain any stream, should return empty result diff --git a/lib/Tumblr/StreamBuilder/Streams/CursorlessFilteredStream.php b/lib/Tumblr/StreamBuilder/Streams/CursorlessFilteredStream.php index 841c278..3f1999d 100644 --- a/lib/Tumblr/StreamBuilder/Streams/CursorlessFilteredStream.php +++ b/lib/Tumblr/StreamBuilder/Streams/CursorlessFilteredStream.php @@ -120,8 +120,8 @@ public static function from_template(StreamContext $context): self */ protected function _enumerate( int $count, - StreamCursor $cursor = null, - StreamTracer $tracer = null, + ?StreamCursor $cursor = null, + ?StreamTracer $tracer = null, ?EnumerationOptions $option = null ): StreamResult { return $this->_filter_rec($count, $cursor, $this->retry_count, $tracer, $option); @@ -140,7 +140,7 @@ private function _filter_rec( int $want_count, ?StreamCursor $inner_cursor, int $depth, - StreamTracer $tracer = null, + ?StreamTracer $tracer = null, ?EnumerationOptions $option = null ): StreamResult { $fetch_count = intval(ceil($want_count * (1.0 + max(0.0, $this->overfetch_ratio)))); diff --git a/lib/Tumblr/StreamBuilder/Streams/EquivalentStreamCombiner.php b/lib/Tumblr/StreamBuilder/Streams/EquivalentStreamCombiner.php index ca96d7a..ce6c2d8 100644 --- a/lib/Tumblr/StreamBuilder/Streams/EquivalentStreamCombiner.php +++ b/lib/Tumblr/StreamBuilder/Streams/EquivalentStreamCombiner.php @@ -38,8 +38,8 @@ abstract class EquivalentStreamCombiner extends Stream */ final protected function _enumerate( int $count, - StreamCursor $cursor = null, - StreamTracer $tracer = null, + ?StreamCursor $cursor = null, + ?StreamTracer $tracer = null, ?EnumerationOptions $option = null ): StreamResult { /** @var StreamResult $combined_result */ @@ -57,8 +57,8 @@ final protected function _enumerate( */ abstract protected function combine( int $count, - StreamCursor $cursor = null, - StreamTracer $tracer = null, + ?StreamCursor $cursor = null, + ?StreamTracer $tracer = null, ?EnumerationOptions $option = null ): StreamResult; } diff --git a/lib/Tumblr/StreamBuilder/Streams/FilteredStream.php b/lib/Tumblr/StreamBuilder/Streams/FilteredStream.php index f2f17df..0572b39 100644 --- a/lib/Tumblr/StreamBuilder/Streams/FilteredStream.php +++ b/lib/Tumblr/StreamBuilder/Streams/FilteredStream.php @@ -87,8 +87,8 @@ public function __construct( Stream $inner, StreamFilter $filter, string $identity, - int $retry_count = null, - float $overfetch_ratio = null, + ?int $retry_count = null, + ?float $overfetch_ratio = null, bool $skip_filters = false, bool $slice_result = true ) { @@ -148,8 +148,8 @@ public static function from_template(StreamContext $context): self */ protected function _enumerate( int $count, - StreamCursor $cursor = null, - StreamTracer $tracer = null, + ?StreamCursor $cursor = null, + ?StreamTracer $tracer = null, ?EnumerationOptions $option = null ): StreamResult { /** @var FilteredStreamCursor $cursor */ @@ -184,7 +184,7 @@ private function _filter_rec( ?StreamCursor $inner_cursor, ?StreamFilterState $filter_state, int $depth, - StreamTracer $tracer = null, + ?StreamTracer $tracer = null, ?EnumerationOptions $option = null ): StreamResult { $fetch_count = intval(ceil($want_count * (1.0 + max(0.0, $this->overfetch_ratio)))); diff --git a/lib/Tumblr/StreamBuilder/Streams/InjectedStream.php b/lib/Tumblr/StreamBuilder/Streams/InjectedStream.php index ade3ca7..c324b4f 100644 --- a/lib/Tumblr/StreamBuilder/Streams/InjectedStream.php +++ b/lib/Tumblr/StreamBuilder/Streams/InjectedStream.php @@ -60,8 +60,8 @@ public function __construct(Stream $inner, StreamInjector $injector, string $ide */ protected function _enumerate( int $count, - StreamCursor $cursor = null, - StreamTracer $tracer = null, + ?StreamCursor $cursor = null, + ?StreamTracer $tracer = null, ?EnumerationOptions $option = null ): StreamResult { if (is_null($cursor)) { diff --git a/lib/Tumblr/StreamBuilder/Streams/NullStream.php b/lib/Tumblr/StreamBuilder/Streams/NullStream.php index 4abbbb5..f323b03 100644 --- a/lib/Tumblr/StreamBuilder/Streams/NullStream.php +++ b/lib/Tumblr/StreamBuilder/Streams/NullStream.php @@ -36,8 +36,8 @@ final class NullStream extends Stream */ protected function _enumerate( int $count, - StreamCursor $cursor = null, - StreamTracer $tracer = null, + ?StreamCursor $cursor = null, + ?StreamTracer $tracer = null, ?EnumerationOptions $option = null ): StreamResult { return new StreamResult(true, []); diff --git a/lib/Tumblr/StreamBuilder/Streams/PrependedStream.php b/lib/Tumblr/StreamBuilder/Streams/PrependedStream.php index 09a3ace..f1c3721 100644 --- a/lib/Tumblr/StreamBuilder/Streams/PrependedStream.php +++ b/lib/Tumblr/StreamBuilder/Streams/PrependedStream.php @@ -95,8 +95,8 @@ public function __construct(Stream $before, ?int $limit, Stream $after, string $ */ protected function _enumerate( int $count, - StreamCursor $cursor = null, - StreamTracer $tracer = null, + ?StreamCursor $cursor = null, + ?StreamTracer $tracer = null, ?EnumerationOptions $option = null ): StreamResult { $results = $this->after->enumerate($count, $cursor, $tracer, $option); diff --git a/lib/Tumblr/StreamBuilder/Streams/ProportionalRoundRobinStream.php b/lib/Tumblr/StreamBuilder/Streams/ProportionalRoundRobinStream.php index c177478..1d9e91b 100644 --- a/lib/Tumblr/StreamBuilder/Streams/ProportionalRoundRobinStream.php +++ b/lib/Tumblr/StreamBuilder/Streams/ProportionalRoundRobinStream.php @@ -126,8 +126,8 @@ public function __construct(Stream $major_stream, array $minor_streams, array $m */ protected function _enumerate( int $count, - StreamCursor $cursor = null, - StreamTracer $tracer = null, + ?StreamCursor $cursor = null, + ?StreamTracer $tracer = null, ?EnumerationOptions $option = null ): StreamResult { /** @var ProportionalRoundRobinStreamCursor $cursor */ diff --git a/lib/Tumblr/StreamBuilder/Streams/ProportionalStreamCombiner.php b/lib/Tumblr/StreamBuilder/Streams/ProportionalStreamCombiner.php index b55944f..e2a9622 100644 --- a/lib/Tumblr/StreamBuilder/Streams/ProportionalStreamCombiner.php +++ b/lib/Tumblr/StreamBuilder/Streams/ProportionalStreamCombiner.php @@ -123,7 +123,7 @@ private function build_mixture(array $feeds): ?ProportionalMixture protected function combine( int $count, MultiCursor $cursor, - StreamTracer $tracer = null, + ?StreamTracer $tracer = null, ?EnumerationOptions $option = null ): StreamResult { // current map of feed ids we can draw from diff --git a/lib/Tumblr/StreamBuilder/Streams/RankedStream.php b/lib/Tumblr/StreamBuilder/Streams/RankedStream.php index 879ddfa..25bba32 100644 --- a/lib/Tumblr/StreamBuilder/Streams/RankedStream.php +++ b/lib/Tumblr/StreamBuilder/Streams/RankedStream.php @@ -53,8 +53,8 @@ public function __construct(Stream $inner, StreamRanker $ranker, string $identit */ final protected function _enumerate( int $count, - StreamCursor $cursor = null, - StreamTracer $tracer = null, + ?StreamCursor $cursor = null, + ?StreamTracer $tracer = null, ?EnumerationOptions $option = null ): StreamResult { $res = $this->getInner()->enumerate($count, $cursor, $tracer, $option); diff --git a/lib/Tumblr/StreamBuilder/Streams/SizeLimitedStream.php b/lib/Tumblr/StreamBuilder/Streams/SizeLimitedStream.php index 63b3631..05cd3b3 100644 --- a/lib/Tumblr/StreamBuilder/Streams/SizeLimitedStream.php +++ b/lib/Tumblr/StreamBuilder/Streams/SizeLimitedStream.php @@ -70,8 +70,8 @@ public function __construct(Stream $stream, int $limit, string $identity) */ protected function _enumerate( int $count, - StreamCursor $cursor = null, - StreamTracer $tracer = null, + ?StreamCursor $cursor = null, + ?StreamTracer $tracer = null, ?EnumerationOptions $option = null ): StreamResult { if (is_null($cursor)) { diff --git a/lib/Tumblr/StreamBuilder/Streams/Stream.php b/lib/Tumblr/StreamBuilder/Streams/Stream.php index 885ef3d..f11ed38 100644 --- a/lib/Tumblr/StreamBuilder/Streams/Stream.php +++ b/lib/Tumblr/StreamBuilder/Streams/Stream.php @@ -90,8 +90,8 @@ final public function enumerate( */ abstract protected function _enumerate( int $count, - StreamCursor $cursor = null, - StreamTracer $tracer = null, + ?StreamCursor $cursor = null, + ?StreamTracer $tracer = null, ?EnumerationOptions $option = null ): StreamResult; diff --git a/lib/Tumblr/StreamBuilder/Streams/StreamCombiner.php b/lib/Tumblr/StreamBuilder/Streams/StreamCombiner.php index 10ff769..048736d 100644 --- a/lib/Tumblr/StreamBuilder/Streams/StreamCombiner.php +++ b/lib/Tumblr/StreamBuilder/Streams/StreamCombiner.php @@ -39,8 +39,8 @@ abstract class StreamCombiner extends Stream */ final protected function _enumerate( int $count, - StreamCursor $cursor = null, - StreamTracer $tracer = null, + ?StreamCursor $cursor = null, + ?StreamTracer $tracer = null, ?EnumerationOptions $option = null ): StreamResult { if (is_null($cursor)) { @@ -82,7 +82,7 @@ final protected function _enumerate( abstract protected function combine( int $count, MultiCursor $cursor, - StreamTracer $tracer = null, + ?StreamTracer $tracer = null, ?EnumerationOptions $option = null ): StreamResult; } diff --git a/lib/Tumblr/StreamBuilder/Streams/StreamMixer.php b/lib/Tumblr/StreamBuilder/Streams/StreamMixer.php index 23313dd..a3c4849 100644 --- a/lib/Tumblr/StreamBuilder/Streams/StreamMixer.php +++ b/lib/Tumblr/StreamBuilder/Streams/StreamMixer.php @@ -61,8 +61,8 @@ public function __construct(StreamInjector $injector, string $identity) */ final protected function _enumerate( int $count, - StreamCursor $cursor = null, - StreamTracer $tracer = null, + ?StreamCursor $cursor = null, + ?StreamTracer $tracer = null, ?EnumerationOptions $option = null ): StreamResult { if (is_null($cursor)) { diff --git a/lib/Tumblr/StreamBuilder/Streams/TemplateReferenceStream.php b/lib/Tumblr/StreamBuilder/Streams/TemplateReferenceStream.php index 2542128..fe69569 100644 --- a/lib/Tumblr/StreamBuilder/Streams/TemplateReferenceStream.php +++ b/lib/Tumblr/StreamBuilder/Streams/TemplateReferenceStream.php @@ -63,8 +63,8 @@ public static function from_template(StreamContext $context) // phpcs:ignore PSR */ protected function _enumerate( int $count, - StreamCursor $cursor = null, - StreamTracer $tracer = null, + ?StreamCursor $cursor = null, + ?StreamTracer $tracer = null, ?EnumerationOptions $option = null ): StreamResult { return $this->getInner()->enumerate($count, $cursor, $tracer, $option); diff --git a/tests/mock/tumblr/StreamBuilder/FencepostRanking/TestingFencepostProvider.php b/tests/mock/tumblr/StreamBuilder/FencepostRanking/TestingFencepostProvider.php index 310825f..b29a706 100644 --- a/tests/mock/tumblr/StreamBuilder/FencepostRanking/TestingFencepostProvider.php +++ b/tests/mock/tumblr/StreamBuilder/FencepostRanking/TestingFencepostProvider.php @@ -44,7 +44,7 @@ final class TestingFencepostProvider extends FencepostProvider */ public function __construct( string $fence_id, - int $latest_timestamp_ms = null, + ?int $latest_timestamp_ms = null, array $fenceposts = [] ) { $this->fence_id = $fence_id; diff --git a/tests/mock/tumblr/StreamBuilder/StreamRankers/DummyStreamRanker.php b/tests/mock/tumblr/StreamBuilder/StreamRankers/DummyStreamRanker.php index 120d81b..71c7e19 100644 --- a/tests/mock/tumblr/StreamBuilder/StreamRankers/DummyStreamRanker.php +++ b/tests/mock/tumblr/StreamBuilder/StreamRankers/DummyStreamRanker.php @@ -33,7 +33,7 @@ final class DummyStreamRanker extends StreamRanker /** * @inheritDoc */ - protected function rank_inner(array $stream_elements, StreamTracer $tracer = null): array + protected function rank_inner(array $stream_elements, ?StreamTracer $tracer = null): array { return $stream_elements; } diff --git a/tests/mock/tumblr/StreamBuilder/StreamRankers/TestingRankableChronoStreamElementRanker.php b/tests/mock/tumblr/StreamBuilder/StreamRankers/TestingRankableChronoStreamElementRanker.php index c73254c..41f6388 100644 --- a/tests/mock/tumblr/StreamBuilder/StreamRankers/TestingRankableChronoStreamElementRanker.php +++ b/tests/mock/tumblr/StreamBuilder/StreamRankers/TestingRankableChronoStreamElementRanker.php @@ -34,7 +34,7 @@ final class TestingRankableChronoStreamElementRanker extends StreamRanker /** * @inheritDoc */ - protected function rank_inner(array $stream_elements, StreamTracer $tracer = null): array + protected function rank_inner(array $stream_elements, ?StreamTracer $tracer = null): array { usort($stream_elements, function (TestingRankableChronoStreamElement $a, TestingRankableChronoStreamElement $b) { return $b->get_rank_ordinal() <=> $a->get_rank_ordinal(); diff --git a/tests/mock/tumblr/StreamBuilder/Streams/TestingRankableChronoStream.php b/tests/mock/tumblr/StreamBuilder/Streams/TestingRankableChronoStream.php index b15087b..993bf17 100644 --- a/tests/mock/tumblr/StreamBuilder/Streams/TestingRankableChronoStream.php +++ b/tests/mock/tumblr/StreamBuilder/Streams/TestingRankableChronoStream.php @@ -57,8 +57,8 @@ public function __construct($identity, array $elements) */ protected function _enumerate( int $count, - StreamCursor $cursor = null, - StreamTracer $tracer = null, + ?StreamCursor $cursor = null, + ?StreamTracer $tracer = null, ?EnumerationOptions $option = null ): StreamResult { if (is_null($cursor)) { diff --git a/tests/unit/Tumblr/StreamBuilder/FencepostRanking/FencepostRankedStreamTest.php b/tests/unit/Tumblr/StreamBuilder/FencepostRanking/FencepostRankedStreamTest.php index dcbc9f6..8fc2dd5 100644 --- a/tests/unit/Tumblr/StreamBuilder/FencepostRanking/FencepostRankedStreamTest.php +++ b/tests/unit/Tumblr/StreamBuilder/FencepostRanking/FencepostRankedStreamTest.php @@ -92,7 +92,7 @@ private function create_fencepost_ranked_stream( array $inner_elements, int $head_count, bool $rank_seed, - int $latest_fencepost_timestamp_ms = null, + ?int $latest_fencepost_timestamp_ms = null, array $next_timestamps = [], array $fenceposts = [] ) { @@ -123,7 +123,7 @@ private function check_traversal( ?FencepostCursor $in_cursor, bool $should_exhaust, array $expected_elements, - FencepostCursor $expected_cursor = null + ?FencepostCursor $expected_cursor = null ) { $res = $stream->enumerate($count, $in_cursor); $this->assertEquals($should_exhaust, $res->is_exhaustive()); diff --git a/tests/unit/Tumblr/StreamBuilder/StreamCursors/BufferedCursorTest.php b/tests/unit/Tumblr/StreamBuilder/StreamCursors/BufferedCursorTest.php index b76b41d..dcc8d00 100644 --- a/tests/unit/Tumblr/StreamBuilder/StreamCursors/BufferedCursorTest.php +++ b/tests/unit/Tumblr/StreamBuilder/StreamCursors/BufferedCursorTest.php @@ -44,7 +44,7 @@ class BufferedCursorTest extends \PHPUnit\Framework\TestCase * @param StreamCursor|null $cursor The cursor in the element. * @return StreamElement */ - private function make_mock_element(string $provider_identity, StreamCursor $cursor = null): StreamElement + private function make_mock_element(string $provider_identity, ?StreamCursor $cursor = null): StreamElement { $m = $this->getMockBuilder(StreamElement::class) ->setConstructorArgs([ $provider_identity, $cursor ]) diff --git a/tests/unit/Tumblr/StreamBuilder/StreamCursors/FilteredStreamCursorTest.php b/tests/unit/Tumblr/StreamBuilder/StreamCursors/FilteredStreamCursorTest.php index fd2321e..d122575 100644 --- a/tests/unit/Tumblr/StreamBuilder/StreamCursors/FilteredStreamCursorTest.php +++ b/tests/unit/Tumblr/StreamBuilder/StreamCursors/FilteredStreamCursorTest.php @@ -190,7 +190,7 @@ public function provider_with_filter_state() * @param StreamFilterState $state StreamFilterState. * @param StreamFilterState $expected_state The expected state. */ - public function test_with_filter_state(StreamFilterState $state = null, StreamFilterState $expected_state = null) + public function test_with_filter_state(?StreamFilterState $state = null, ?StreamFilterState $expected_state = null) { $cursor = new FilteredStreamCursor(); $cursor = $cursor->with_filter_state($state); diff --git a/tests/unit/Tumblr/StreamBuilder/StreamInjectors/StreamInjectorTest.php b/tests/unit/Tumblr/StreamBuilder/StreamInjectors/StreamInjectorTest.php index 6cb3c8a..37042f6 100644 --- a/tests/unit/Tumblr/StreamBuilder/StreamInjectors/StreamInjectorTest.php +++ b/tests/unit/Tumblr/StreamBuilder/StreamInjectors/StreamInjectorTest.php @@ -79,8 +79,8 @@ public function plan_injection_provider() protected function _plan_injection( int $page_size, Stream $requesting_stream, - array $state = null, - StreamTracer $tracer = null + ?array $state = null, + ?StreamTracer $tracer = null ): InjectionPlan { return InjectionPlan::create_empty_plan(); } diff --git a/tests/unit/Tumblr/StreamBuilder/Streams/ConcatenatedStreamTest.php b/tests/unit/Tumblr/StreamBuilder/Streams/ConcatenatedStreamTest.php index ee045aa..9b9ef39 100644 --- a/tests/unit/Tumblr/StreamBuilder/Streams/ConcatenatedStreamTest.php +++ b/tests/unit/Tumblr/StreamBuilder/Streams/ConcatenatedStreamTest.php @@ -98,7 +98,7 @@ protected function setUp(): void $this->stream_cursor2->expects($this->any())->method('_can_combine_with')->willReturn(true); // callback for enumerate function, which will return StreamResult based on passed in paramaters. // Because enumerate function is called by ConcatenatedStream so we can't do static return mock here. - $enumerate_callback = function ($count, StreamCursor $cursor = null) { + $enumerate_callback = function ($count, ?StreamCursor $cursor = null) { $offset = $cursor == null ? 0 : ($cursor == $this->stream_cursor1 ? 1 : 2); return new StreamResult($offset + $count >= 2, array_slice([$this->stream_element1, $this->stream_element2], $offset, $count)); }; diff --git a/tests/unit/Tumblr/StreamBuilder/Streams/PrependedStreamTest.php b/tests/unit/Tumblr/StreamBuilder/Streams/PrependedStreamTest.php index dfa0c20..793fcae 100644 --- a/tests/unit/Tumblr/StreamBuilder/Streams/PrependedStreamTest.php +++ b/tests/unit/Tumblr/StreamBuilder/Streams/PrependedStreamTest.php @@ -91,7 +91,7 @@ protected function setUp(): void $this->stream_cursor2->expects($this->any())->method('_can_combine_with')->willReturn(true); // callback for enumerate function, which will return StreamResult based on passed in parameters. // Because enumerate function is called by ConcatenatedStream so we can't do static return mock here. - $enumerate_callback = function ($count, StreamCursor $cursor = null) { + $enumerate_callback = function ($count, ?StreamCursor $cursor = null) { $offset = $cursor == null ? 0 : ($cursor === $this->stream_cursor1 ? 1 : 2); return new StreamResult( $offset + $count >= 2, diff --git a/tests/unit/Tumblr/StreamBuilder/Streams/ProportionalRoundRobinStreamTest.php b/tests/unit/Tumblr/StreamBuilder/Streams/ProportionalRoundRobinStreamTest.php index dd6018b..80a4abd 100644 --- a/tests/unit/Tumblr/StreamBuilder/Streams/ProportionalRoundRobinStreamTest.php +++ b/tests/unit/Tumblr/StreamBuilder/Streams/ProportionalRoundRobinStreamTest.php @@ -496,8 +496,8 @@ public static function from_template(StreamContext $context): ?self */ protected function _enumerate( int $count, - StreamCursor $cursor = null, - StreamTracer $tracer = null, + ?StreamCursor $cursor = null, + ?StreamTracer $tracer = null, ?EnumerationOptions $option = null ): StreamResult { $slice = array_slice($this->elements, is_null($cursor) ? 0 : $cursor->index + 1, $count);