From 061a1d212c6d4aac2ac02d3c25b0375b067c1d2b Mon Sep 17 00:00:00 2001 From: Thiemo Kreuz Date: Thu, 19 Apr 2018 10:30:33 +0200 Subject: [PATCH] Fix and improve PHPDoc type hints in FileBackend and FileRepo Change-Id: I311b4a6777946b451d70c6fdb2133dbbd73f159f (cherry picked from commit 645d96b0e1560e58285c88abfe8f8e726acb2e64) --- includes/filebackend/FileBackendGroup.php | 2 +- .../filebackend/filejournal/DBFileJournal.php | 4 +- .../filerepo/FileBackendDBRepoWrapper.php | 8 ++-- includes/filerepo/FileRepo.php | 18 +++---- includes/filerepo/ForeignAPIRepo.php | 12 ++--- includes/filerepo/LocalRepo.php | 10 ++-- includes/filerepo/RepoGroup.php | 2 +- includes/filerepo/file/ArchivedFile.php | 4 +- includes/filerepo/file/File.php | 20 ++++---- includes/filerepo/file/ForeignAPIFile.php | 8 ++-- includes/filerepo/file/ForeignDBFile.php | 2 +- includes/filerepo/file/LocalFile.php | 48 +++++++++---------- includes/filerepo/file/OldLocalFile.php | 18 +++---- 13 files changed, 78 insertions(+), 78 deletions(-) diff --git a/includes/filebackend/FileBackendGroup.php b/includes/filebackend/FileBackendGroup.php index 9239c6cc34..454b6332fd 100644 --- a/includes/filebackend/FileBackendGroup.php +++ b/includes/filebackend/FileBackendGroup.php @@ -112,7 +112,7 @@ class FileBackendGroup { /** * Register an array of file backend configurations * - * @param array $configs + * @param array[] $configs * @param string|null $readOnlyReason * @throws InvalidArgumentException */ diff --git a/includes/filebackend/filejournal/DBFileJournal.php b/includes/filebackend/filejournal/DBFileJournal.php index 4269f91ef9..3dc9f18ec6 100644 --- a/includes/filebackend/filejournal/DBFileJournal.php +++ b/includes/filebackend/filejournal/DBFileJournal.php @@ -124,9 +124,9 @@ class DBFileJournal extends FileJournal { /** * @see FileJournal::doGetChangeEntries() - * @param int $start + * @param int|null $start * @param int $limit - * @return array + * @return array[] */ protected function doGetChangeEntries( $start, $limit ) { $dbw = $this->getMasterDB(); diff --git a/includes/filerepo/FileBackendDBRepoWrapper.php b/includes/filerepo/FileBackendDBRepoWrapper.php index 21b7ac2fae..dbb542172d 100644 --- a/includes/filerepo/FileBackendDBRepoWrapper.php +++ b/includes/filerepo/FileBackendDBRepoWrapper.php @@ -92,9 +92,9 @@ class FileBackendDBRepoWrapper extends FileBackend { * E.g. mwstore://local-backend/local-public/a/ab/.jpg * => mwstore://local-backend/local-original/x/y/z/.jpg * - * @param array $paths + * @param string[] $paths * @param bool $latest - * @return array Translated paths in same order + * @return string[] Translated paths in same order */ public function getBackendPaths( array $paths, $latest = true ) { $db = $this->getDB( $latest ? DB_MASTER : DB_REPLICA ); @@ -341,8 +341,8 @@ class FileBackendDBRepoWrapper extends FileBackend { * * This leaves destination paths alone since we don't want those to mutate * - * @param array $ops - * @return array + * @param array[] $ops + * @return array[] */ protected function mungeOpPaths( array $ops ) { // Ops that use 'src' and do not mutate core file data there diff --git a/includes/filerepo/FileRepo.php b/includes/filerepo/FileRepo.php index a67e3d6427..28021effcf 100644 --- a/includes/filerepo/FileRepo.php +++ b/includes/filerepo/FileRepo.php @@ -578,8 +578,8 @@ class FileRepo { * Get an array of arrays or iterators of file objects for files that * have the given SHA-1 content hashes. * - * @param array $hashes An array of hashes - * @return array An Array of arrays or iterators of file objects and the hash as key + * @param string[] $hashes An array of hashes + * @return array[] An Array of arrays or iterators of file objects and the hash as key */ public function findBySha1s( array $hashes ) { $result = []; @@ -599,7 +599,7 @@ class FileRepo { * STUB * @param string $prefix The prefix to search for * @param int $limit The maximum amount of files to return - * @return array + * @return LocalFile[] */ public function findFilesByPrefix( $prefix, $limit ) { return []; @@ -789,7 +789,7 @@ class FileRepo { * should use File::getDescriptionText(). * * @param string $name Name of image to fetch - * @param string $lang Language to fetch it in, if any. + * @param string|null $lang Language to fetch it in, if any. * @return string|false */ public function getDescriptionRenderUrl( $name, $lang = null ) { @@ -928,7 +928,7 @@ class FileRepo { * Each file can be a (zone, rel) pair, virtual url, storage path. * It will try to delete each file, but ignores any errors that may occur. * - * @param array $files List of files to delete + * @param string[] $files List of files to delete * @param int $flags Bitwise combination of the following flags: * self::SKIP_LOCKING Skip any file locking when doing the deletions * @return Status @@ -1378,7 +1378,7 @@ class FileRepo { /** * Checks existence of an array of files. * - * @param array $files Virtual URLs (or storage paths) of files to check + * @param string[] $files Virtual URLs (or storage paths) of files to check * @return array Map of files and existence flags, or false */ public function fileExistsBatch( array $files ) { @@ -1484,7 +1484,7 @@ class FileRepo { * Delete files in the deleted directory if they are not referenced in the filearchive table * * STUB - * @param array $storageKeys + * @param string[] $storageKeys */ public function cleanupDeletedBatch( array $storageKeys ) { $this->assertWritableRepo(); @@ -1700,7 +1700,7 @@ class FileRepo { /** * Get a callback function to use for cleaning error message parameters * - * @return array + * @return string[] */ function getErrorCleanupFunction() { switch ( $this->pathDisclosureProtection ) { @@ -1889,7 +1889,7 @@ class FileRepo { /** * Get an UploadStash associated with this repo. * - * @param User $user + * @param User|null $user * @return UploadStash */ public function getUploadStash( User $user = null ) { diff --git a/includes/filerepo/ForeignAPIRepo.php b/includes/filerepo/ForeignAPIRepo.php index 1a86648889..06b21a8fc6 100644 --- a/includes/filerepo/ForeignAPIRepo.php +++ b/includes/filerepo/ForeignAPIRepo.php @@ -120,7 +120,7 @@ class ForeignAPIRepo extends FileRepo { } /** - * @param array $files + * @param string[] $files * @return array */ function fileExistsBatch( array $files ) { @@ -176,7 +176,7 @@ class ForeignAPIRepo extends FileRepo { /** * @param string $virtualUrl - * @return bool + * @return false */ function getFileProps( $virtualUrl ) { return false; @@ -231,7 +231,7 @@ class ForeignAPIRepo extends FileRepo { /** * @param string $hash - * @return array + * @return ForeignAPIFile[] */ function findBySha1( $hash ) { $results = $this->fetchImageQuery( [ @@ -257,10 +257,10 @@ class ForeignAPIRepo extends FileRepo { * @param string $name * @param int $width * @param int $height - * @param array &$result + * @param array|null &$result Output-only parameter, guaranteed to become an array * @param string $otherParams * - * @return bool + * @return string|false */ function getThumbUrl( $name, $width = -1, $height = -1, &$result = null, $otherParams = '' ) { $data = $this->fetchImageQuery( [ @@ -287,7 +287,7 @@ class ForeignAPIRepo extends FileRepo { * @param int $width * @param int $height * @param string $otherParams - * @param string $lang Language code for language of error + * @param string|null $lang Language code for language of error * @return bool|MediaTransformError * @since 1.22 */ diff --git a/includes/filerepo/LocalRepo.php b/includes/filerepo/LocalRepo.php index 1bf534649f..76043d5544 100644 --- a/includes/filerepo/LocalRepo.php +++ b/includes/filerepo/LocalRepo.php @@ -91,7 +91,7 @@ class LocalRepo extends FileRepo { * interleave database locks with file operations, which is potentially a * remote operation. * - * @param array $storageKeys + * @param string[] $storageKeys * * @return Status */ @@ -371,7 +371,7 @@ class LocalRepo extends FileRepo { * SHA-1 content hash. * * @param string $hash A sha1 hash to look for - * @return File[] + * @return LocalFile[] */ function findBySha1( $hash ) { $dbr = $this->getReplicaDB(); @@ -400,8 +400,8 @@ class LocalRepo extends FileRepo { * * Overrides generic implementation in FileRepo for performance reason * - * @param array $hashes An array of hashes - * @return array An Array of arrays or iterators of file objects and the hash as key + * @param string[] $hashes An array of hashes + * @return array[] An Array of arrays or iterators of file objects and the hash as key */ function findBySha1s( array $hashes ) { if ( !count( $hashes ) ) { @@ -434,7 +434,7 @@ class LocalRepo extends FileRepo { * * @param string $prefix The prefix to search for * @param int $limit The maximum amount of files to return - * @return array + * @return LocalFile[] */ public function findFilesByPrefix( $prefix, $limit ) { $selectOptions = [ 'ORDER BY' => 'img_name', 'LIMIT' => intval( $limit ) ]; diff --git a/includes/filerepo/RepoGroup.php b/includes/filerepo/RepoGroup.php index 24d1ab2efe..b7977900a3 100644 --- a/includes/filerepo/RepoGroup.php +++ b/includes/filerepo/RepoGroup.php @@ -423,7 +423,7 @@ class RepoGroup { * Split a virtual URL into repo, zone and rel parts * @param string $url * @throws MWException - * @return array Containing repo, zone and rel + * @return string[] Containing repo, zone and rel */ function splitVirtualUrl( $url ) { if ( substr( $url, 0, 9 ) != 'mwrepo://' ) { diff --git a/includes/filerepo/file/ArchivedFile.php b/includes/filerepo/file/ArchivedFile.php index 982fea49cf..d9763c64b4 100644 --- a/includes/filerepo/file/ArchivedFile.php +++ b/includes/filerepo/file/ArchivedFile.php @@ -214,7 +214,7 @@ class ArchivedFile { /** * Fields in the filearchive table * @deprecated since 1.31, use self::getQueryInfo() instead. - * @return array + * @return string[] */ static function selectFields() { global $wgActorTableSchemaMigrationStage; @@ -258,7 +258,7 @@ class ArchivedFile { * Return the tables, fields, and join conditions to be selected to create * a new archivedfile object. * @since 1.31 - * @return array With three keys: + * @return array[] With three keys: * - tables: (string[]) to include in the `$table` to `IDatabase->select()` * - fields: (string[]) to include in the `$vars` to `IDatabase->select()` * - joins: (array) to include in the `$join_conds` to `IDatabase->select()` diff --git a/includes/filerepo/file/File.php b/includes/filerepo/file/File.php index d4605d3ca8..cfd1cf25cd 100644 --- a/includes/filerepo/file/File.php +++ b/includes/filerepo/file/File.php @@ -268,7 +268,7 @@ abstract class File implements IDBAccessObject { * a two-part name, set the minor type to 'unknown'. * * @param string $mime "text/html" etc - * @return array ("text", "html") etc + * @return string[] ("text", "html") etc */ public static function splitMime( $mime ) { if ( strpos( $mime, '/' ) !== false ) { @@ -569,7 +569,7 @@ abstract class File implements IDBAccessObject { * format does not support that sort of thing, returns * an empty array. * - * @return array + * @return string[] * @since 1.23 */ public function getAvailableLanguages() { @@ -1423,7 +1423,7 @@ abstract class File implements IDBAccessObject { * Get all thumbnail names previously generated for this file * STUB * Overridden by LocalFile - * @return array + * @return string[] */ function getThumbnails() { return []; @@ -1474,9 +1474,9 @@ abstract class File implements IDBAccessObject { * Return a fragment of the history of file. * * STUB - * @param int $limit Limit of rows to return - * @param string $start Only revisions older than $start will be returned - * @param string $end Only revisions newer than $end will be returned + * @param int|null $limit Limit of rows to return + * @param string|int|null $start Only revisions older than $start will be returned + * @param string|int|null $end Only revisions newer than $end will be returned * @param bool $inc Include the endpoints of the time range * * @return File[] @@ -2099,9 +2099,9 @@ abstract class File implements IDBAccessObject { * File::FOR_PUBLIC to be displayed to all users * File::FOR_THIS_USER to be displayed to the given user * File::RAW get the description regardless of permissions - * @param User $user User object to check for, only if FOR_THIS_USER is + * @param User|null $user User object to check for, only if FOR_THIS_USER is * passed to the $audience parameter - * @return string + * @return null|string */ function getDescription( $audience = self::FOR_PUBLIC, User $user = null ) { return null; @@ -2161,7 +2161,7 @@ abstract class File implements IDBAccessObject { * field of this file, if it's marked as deleted. * STUB * @param int $field - * @param User $user User object to check, or null to use $wgUser + * @param User|null $user User object to check, or null to use $wgUser * @return bool */ function userCan( $field, User $user = null ) { @@ -2177,7 +2177,7 @@ abstract class File implements IDBAccessObject { } /** - * @return array HTTP header name/value map to use for HEAD/GET request responses + * @return string[] HTTP header name/value map to use for HEAD/GET request responses * @since 1.30 */ function getContentHeaders() { diff --git a/includes/filerepo/file/ForeignAPIFile.php b/includes/filerepo/file/ForeignAPIFile.php index 2a40942527..be88b49a60 100644 --- a/includes/filerepo/file/ForeignAPIFile.php +++ b/includes/filerepo/file/ForeignAPIFile.php @@ -192,8 +192,8 @@ class ForeignAPIFile extends File { } /** - * @param array $metadata - * @return array + * @param mixed $metadata + * @return mixed */ public static function parseMetadata( $metadata ) { if ( !is_array( $metadata ) ) { @@ -254,7 +254,7 @@ class ForeignAPIFile extends File { /** * @param int $audience - * @param User $user + * @param User|null $user * @return null|string */ public function getDescription( $audience = self::FOR_PUBLIC, User $user = null ) { @@ -333,7 +333,7 @@ class ForeignAPIFile extends File { } /** - * @return array + * @return string[] */ function getThumbnails() { $dir = $this->getThumbPath( $this->getName() ); diff --git a/includes/filerepo/file/ForeignDBFile.php b/includes/filerepo/file/ForeignDBFile.php index cf211618fc..388e9503eb 100644 --- a/includes/filerepo/file/ForeignDBFile.php +++ b/includes/filerepo/file/ForeignDBFile.php @@ -74,7 +74,7 @@ class ForeignDBFile extends LocalFile { * @param string $source * @param bool $watch * @param bool|string $timestamp - * @param User $user User object or null to use $wgUser + * @param User|null $user User object or null to use $wgUser * @return bool * @throws MWException */ diff --git a/includes/filerepo/file/LocalFile.php b/includes/filerepo/file/LocalFile.php index 0464f071b5..cff1044870 100644 --- a/includes/filerepo/file/LocalFile.php +++ b/includes/filerepo/file/LocalFile.php @@ -141,7 +141,7 @@ class LocalFile extends File { * @param FileRepo $repo * @param null $unused * - * @return LocalFile + * @return self */ static function newFromTitle( $title, $repo, $unused = null ) { return new self( $title, $repo ); @@ -154,7 +154,7 @@ class LocalFile extends File { * @param stdClass $row * @param FileRepo $repo * - * @return LocalFile + * @return self */ static function newFromRow( $row, $repo ) { $title = Title::makeTitle( NS_FILE, $row->img_name ); @@ -195,7 +195,7 @@ class LocalFile extends File { /** * Fields in the image table * @deprecated since 1.31, use self::getQueryInfo() instead. - * @return array + * @return string[] */ static function selectFields() { global $wgActorTableSchemaMigrationStage; @@ -235,7 +235,7 @@ class LocalFile extends File { * @since 1.31 * @param string[] $options * - omit-lazy: Omit fields that are lazily cached. - * @return array With three keys: + * @return array[] With three keys: * - tables: (string[]) to include in the `$table` to `IDatabase->select()` * - fields: (string[]) to include in the `$vars` to `IDatabase->select()` * - joins: (array) to include in the `$join_conds` to `IDatabase->select()` @@ -405,7 +405,7 @@ class LocalFile extends File { /** * Returns the list of object properties that are included as-is in the cache. * @param string $prefix Must be the empty string - * @return array + * @return string[] * @since 1.31 No longer accepts a non-empty $prefix */ protected function getCacheFields( $prefix = 'img_' ) { @@ -427,7 +427,7 @@ class LocalFile extends File { * Returns the list of object properties that are included as-is in the * cache, only when they're not too big, and are lazily loaded by self::loadExtraFromDB(). * @param string $prefix Must be the empty string - * @return array + * @return string[] * @since 1.31 No longer accepts a non-empty $prefix */ protected function getLazyCacheFields( $prefix = 'img_' ) { @@ -500,7 +500,7 @@ class LocalFile extends File { /** * @param IDatabase $dbr * @param string $fname - * @return array|bool + * @return string[]|bool */ private function loadExtraFieldsWithTimestamp( $dbr, $fname ) { $fieldMap = false; @@ -1160,9 +1160,9 @@ class LocalFile extends File { /** purgeEverything inherited */ /** - * @param int $limit Optional: Limit to number of results - * @param int $start Optional: Timestamp, start from - * @param int $end Optional: Timestamp, end at + * @param int|null $limit Optional: Limit to number of results + * @param string|int|null $start Optional: Timestamp, start from + * @param string|int|null $end Optional: Timestamp, end at * @param bool $inc * @return OldLocalFile[] */ @@ -2105,8 +2105,8 @@ class LocalFile extends File { * This is not used by ImagePage for local files, since (among other things) * it skips the parser cache. * - * @param Language $lang What language to get description in (Optional) - * @return bool|mixed + * @param Language|null $lang What language to get description in (Optional) + * @return string|false */ function getDescriptionText( $lang = null ) { $revision = Revision::newFromTitle( $this->title, false, Revision::READ_NORMAL ); @@ -2124,7 +2124,7 @@ class LocalFile extends File { /** * @param int $audience - * @param User $user + * @param User|null $user * @return string */ function getDescription( $audience = self::FOR_PUBLIC, User $user = null ) { @@ -2369,7 +2369,7 @@ class LocalFileDeleteBatch { /** * Add the old versions of the image to the batch - * @return array List of archive names from old versions + * @return string[] List of archive names from old versions */ public function addOlds() { $archiveNames = []; @@ -2762,10 +2762,10 @@ class LocalFileRestoreBatch { /** @var LocalFile */ private $file; - /** @var array List of file IDs to restore */ + /** @var string[] List of file IDs to restore */ private $cleanupBatch; - /** @var array List of file IDs to restore */ + /** @var string[] List of file IDs to restore */ private $ids; /** @var bool Add all revisions of the file */ @@ -2780,7 +2780,7 @@ class LocalFileRestoreBatch { */ function __construct( File $file, $unsuppress = false ) { $this->file = $file; - $this->cleanupBatch = $this->ids = []; + $this->cleanupBatch = []; $this->ids = []; $this->unsuppress = $unsuppress; } @@ -3097,8 +3097,8 @@ class LocalFileRestoreBatch { /** * Removes non-existent files from a cleanup batch. - * @param array $batch - * @return array + * @param string[] $batch + * @return string[] */ protected function removeNonexistentFromCleanup( $batch ) { $files = $newBatch = []; @@ -3142,7 +3142,7 @@ class LocalFileRestoreBatch { * rollback by removing all items that were succesfully copied. * * @param Status $storeStatus - * @param array $storeBatch + * @param array[] $storeBatch */ protected function cleanupFailedBatch( $storeStatus, $storeBatch ) { $cleanupBatch = []; @@ -3208,7 +3208,7 @@ class LocalFileMoveBatch { /** * Add the old versions of the image to the batch - * @return array List of archive names from old versions + * @return string[] List of archive names from old versions */ public function addOlds() { $archiveBase = 'archive'; @@ -3409,7 +3409,7 @@ class LocalFileMoveBatch { /** * Generate triplets for FileRepo::storeBatch(). - * @return array + * @return array[] */ protected function getMoveTriplets() { $moves = array_merge( [ $this->cur ], $this->olds ); @@ -3461,7 +3461,7 @@ class LocalFileMoveBatch { /** * Cleanup a partially moved array of triplets by deleting the target * files. Called if something went wrong half way. - * @param array $triplets + * @param array[] $triplets */ protected function cleanupTarget( $triplets ) { // Create dest pairs from the triplets @@ -3477,7 +3477,7 @@ class LocalFileMoveBatch { /** * Cleanup a fully moved array of triplets by deleting the source files. * Called at the end of the move process if everything else went ok. - * @param array $triplets + * @param array[] $triplets */ protected function cleanupSource( $triplets ) { // Create source file names from the triplets diff --git a/includes/filerepo/file/OldLocalFile.php b/includes/filerepo/file/OldLocalFile.php index 65f0fb1b26..3a6b8795af 100644 --- a/includes/filerepo/file/OldLocalFile.php +++ b/includes/filerepo/file/OldLocalFile.php @@ -27,7 +27,7 @@ * @ingroup FileAbstraction */ class OldLocalFile extends LocalFile { - /** @var string Timestamp */ + /** @var string|int Timestamp */ protected $requestedTime; /** @var string Archive name */ @@ -39,8 +39,8 @@ class OldLocalFile extends LocalFile { /** * @param Title $title * @param FileRepo $repo - * @param null|int $time Timestamp or null - * @return OldLocalFile + * @param string|int $time + * @return self * @throws MWException */ static function newFromTitle( $title, $repo, $time = null ) { @@ -56,7 +56,7 @@ class OldLocalFile extends LocalFile { * @param Title $title * @param FileRepo $repo * @param string $archiveName - * @return OldLocalFile + * @return self */ static function newFromArchiveName( $title, $repo, $archiveName ) { return new self( $title, $repo, null, $archiveName ); @@ -65,7 +65,7 @@ class OldLocalFile extends LocalFile { /** * @param stdClass $row * @param FileRepo $repo - * @return OldLocalFile + * @return self */ static function newFromRow( $row, $repo ) { $title = Title::makeTitle( NS_FILE, $row->oi_name ); @@ -107,7 +107,7 @@ class OldLocalFile extends LocalFile { /** * Fields in the oldimage table * @deprecated since 1.31, use self::getQueryInfo() instead. - * @return array + * @return string[] */ static function selectFields() { global $wgActorTableSchemaMigrationStage; @@ -149,7 +149,7 @@ class OldLocalFile extends LocalFile { * @since 1.31 * @param string[] $options * - omit-lazy: Omit fields that are lazily cached. - * @return array With three keys: + * @return array[] With three keys: * - tables: (string[]) to include in the `$table` to `IDatabase->select()` * - fields: (string[]) to include in the `$vars` to `IDatabase->select()` * - joins: (array) to include in the `$join_conds` to `IDatabase->select()` @@ -191,8 +191,8 @@ class OldLocalFile extends LocalFile { /** * @param Title $title * @param FileRepo $repo - * @param string $time Timestamp or null to load by archive name - * @param string $archiveName Archive name or null to load by timestamp + * @param string|int|null $time Timestamp or null to load by archive name + * @param string|null $archiveName Archive name or null to load by timestamp * @throws MWException */ function __construct( $title, $repo, $time, $archiveName ) { -- 2.20.1