threadItems[] = $item; if ( $item instanceof CommentItem ) { $this->commentItems[] = $item; } if ( $item instanceof HeadingItem ) { $this->threads[] = $item; } } /** * @inheritDoc */ public function isEmpty(): bool { return !$this->threadItems; } /** * @inheritDoc * @param ThreadItem $item */ public function updateIdAndNameMaps( ThreadItem $item ) { Assert::precondition( $item instanceof ContentThreadItem, 'Must be ContentThreadItem' ); $this->threadItemsByName[ $item->getName() ][] = $item; $this->threadItemsById[ $item->getId() ] = $item; } /** * @inheritDoc * @return ContentThreadItem[] Thread items */ public function getThreadItems(): array { return $this->threadItems; } /** * @inheritDoc * @return ContentCommentItem[] Comment items */ public function getCommentItems(): array { return $this->commentItems; } /** * @inheritDoc * @return ContentThreadItem[] Thread items, empty array if not found */ public function findCommentsByName( string $name ): array { return $this->threadItemsByName[$name] ?? []; } /** * @inheritDoc * @return ContentThreadItem|null Thread item, null if not found */ public function findCommentById( string $id ): ?ThreadItem { return $this->threadItemsById[$id] ?? null; } /** * @inheritDoc * @return ContentHeadingItem[] Tree structure of comments, top-level items are the headings. */ public function getThreads(): array { return $this->threads; } /** * @inheritDoc * @return ContentHeadingItem[] Tree structure of comments, top-level items are the headings. */ public function getThreadsStructured(): array { return array_values( array_filter( $this->getThreads(), static function ( ContentThreadItem $item ) { return $item->getParent() === null; } ) ); } }