WikidataBuilder has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/385341 )

Change subject: New Wikidata Build - 2017-10-20T10:00:01+0000
......................................................................

New Wikidata Build - 2017-10-20T10:00:01+0000

Change-Id: I0c98b6dbdbabf5114f71f872cb03d190448fe079
---
M composer.lock
M extensions/ArticlePlaceholder/includes/ItemNotabilityFilter.php
M extensions/Constraints/api/CheckConstraints.php
M extensions/Constraints/i18n/uk.json
M extensions/Constraints/includes/ConstraintCheck/Context/ApiV2Context.php
M extensions/Constraints/includes/ConstraintCheck/Context/Context.php
M extensions/Constraints/includes/ConstraintCheck/Context/StatementContext.php
M 
extensions/Constraints/includes/ConstraintCheck/DelegatingConstraintChecker.php
A extensions/Constraints/includes/ConstraintCheck/Result/NullResult.php
M extensions/Constraints/tests/phpunit/Context/MainSnakContextTest.php
M extensions/Constraints/tests/phpunit/Context/QualifierContextTest.php
M extensions/Constraints/tests/phpunit/Context/ReferenceContextTest.php
M extensions/Constraints/tests/phpunit/Context/StatementContextTest.php
M extensions/Constraints/tests/phpunit/Fake/FakeSnakContext.php
M extensions/Wikibase/client/i18n/hu.json
M extensions/Wikibase/client/includes/Usage/Sql/EntityUsageTable.php
M 
extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseLibraryTestCase.php
M extensions/Wikibase/composer.json
M extensions/Wikibase/lib/i18n/ais.json
M extensions/Wikibase/lib/i18n/ur.json
M extensions/Wikibase/lib/includes/Store/DispatchingPropertyInfoLookup.php
M extensions/Wikibase/lib/includes/Units/BaseUnitStorage.php
M extensions/Wikibase/lib/includes/Units/CSVUnitStorage.php
M extensions/Wikibase/lib/includes/Units/JsonUnitStorage.php
M extensions/Wikibase/lib/includes/Units/UnitConverter.php
M extensions/Wikibase/lib/includes/Units/UnitStorage.php
M extensions/Wikibase/phpcs.xml
M extensions/Wikibase/repo/i18n/ais.json
M extensions/Wikibase/repo/i18n/ur.json
M extensions/Wikibase/repo/includes/Actions/EditEntityAction.php
M extensions/Wikibase/repo/includes/Api/SetAliases.php
M extensions/Wikibase/repo/includes/Diff/EntityContentDiffView.php
M extensions/Wikibase/repo/includes/Search/Elastic/WikibasePrefixSearcher.php
M extensions/Wikibase/repo/includes/Specials/HTMLForm/HTMLTrimmedTextField.php
M extensions/Wikibase/repo/maintenance/SPARQLClient.php
M extensions/Wikibase/repo/maintenance/addUnitConversions.php
M extensions/Wikibase/repo/maintenance/searchEntities.php
M extensions/Wikibase/repo/maintenance/updateUnits.php
M 
extensions/Wikibase/repo/tests/phpunit/includes/Diff/EntityDiffVisualizerFactoryTest.php
M extensions/Wikibase/repo/tests/phpunit/includes/NewItem.php
M extensions/Wikibase/repo/tests/phpunit/includes/NewStatement.php
M extensions/Wikibase/repo/tests/phpunit/maintenance/AddUnitsTest.php
M extensions/Wikibase/repo/tests/phpunit/maintenance/UpdateUnitsTest.php
M extensions/Wikibase/tests/phan/config.php
M vendor/composer/autoload_classmap.php
M vendor/composer/autoload_static.php
M vendor/composer/installed.json
47 files changed, 645 insertions(+), 129 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikidata 
refs/changes/41/385341/1

diff --git a/composer.lock b/composer.lock
index 6797854..bc1df58 100644
--- a/composer.lock
+++ b/composer.lock
@@ -767,12 +767,12 @@
             "source": {
                 "type": "git",
                 "url": 
"https://github.com/wikimedia/mediawiki-extensions-ArticlePlaceholder.git";,
-                "reference": "b356d178444f899069e2f5f647c7f483d7b556b3"
+                "reference": "bab4ba945646b81b510fc904f43b0d3d23469683"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-ArticlePlaceholder/zipball/b356d178444f899069e2f5f647c7f483d7b556b3";,
-                "reference": "b356d178444f899069e2f5f647c7f483d7b556b3",
+                "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-ArticlePlaceholder/zipball/bab4ba945646b81b510fc904f43b0d3d23469683";,
+                "reference": "bab4ba945646b81b510fc904f43b0d3d23469683",
                 "shasum": ""
             },
             "require": {
@@ -801,7 +801,7 @@
             ],
             "description": "Provides a special page with Wikibase information 
about a certain topic, with invitation to create an article for the topic",
             "homepage": 
"https://www.mediawiki.org/wiki/Extension:ArticlePlaceholder";,
-            "time": "2017-10-15 17:38:18"
+            "time": "2017-10-20 07:57:50"
         },
         {
             "name": "propertysuggester/property-suggester",
@@ -971,7 +971,7 @@
             "source": {
                 "type": "git",
                 "url": 
"https://gerrit.wikimedia.org/r/mediawiki/extensions/WikibaseQualityConstraints";,
-                "reference": "ae7f775d6522c67efe47c54b480c4baeb494f367"
+                "reference": "0b42b96d328b7a2d7abcd168702b1d4e51b9794e"
             },
             "require": {
                 "php": ">=5.5.9",
@@ -1031,7 +1031,7 @@
             "support": {
                 "issues": 
"https://phabricator.wikimedia.org/project/profile/1202/";
             },
-            "time": "2017-10-19 09:21:36"
+            "time": "2017-10-19 21:29:54"
         },
         {
             "name": "wikibase/data-model",
@@ -1542,12 +1542,12 @@
             "source": {
                 "type": "git",
                 "url": 
"https://github.com/wikimedia/mediawiki-extensions-Wikibase.git";,
-                "reference": "3d3ff504b2e9f68a212739b0904e90c5f6e9e48c"
+                "reference": "e2397f95e4a71965f1bc60aa4a1e6d1e584819e4"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/3d3ff504b2e9f68a212739b0904e90c5f6e9e48c";,
-                "reference": "3d3ff504b2e9f68a212739b0904e90c5f6e9e48c",
+                "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/e2397f95e4a71965f1bc60aa4a1e6d1e584819e4";,
+                "reference": "e2397f95e4a71965f1bc60aa4a1e6d1e584819e4",
                 "shasum": ""
             },
             "require": {
@@ -1580,7 +1580,7 @@
                 "jakub-onderka/php-console-highlighter": "0.3.2",
                 "jakub-onderka/php-parallel-lint": ">=0.3 <0.10",
                 "mediawiki/minus-x": "0.1.0",
-                "wikibase/wikibase-codesniffer": "^0.1.0"
+                "wikibase/wikibase-codesniffer": "^0.2.0"
             },
             "type": "mediawiki-extension",
             "autoload": {
@@ -1592,6 +1592,7 @@
                     "lib/maintenance/",
                     "repo/includes/",
                     "repo/maintenance/",
+                    "repo/tests/phpunit/maintenance/MockAddUnits.php",
                     "repo/Wikibase.hooks.php"
                 ],
                 "psr-4": {
@@ -1625,7 +1626,7 @@
                 "wikibaserepo",
                 "wikidata"
             ],
-            "time": "2017-10-18 20:54:57"
+            "time": "2017-10-20 09:32:04"
         },
         {
             "name": "wikibase/wikimedia-badges",
diff --git a/extensions/ArticlePlaceholder/includes/ItemNotabilityFilter.php 
b/extensions/ArticlePlaceholder/includes/ItemNotabilityFilter.php
index b71bbb5..2fb0e14 100644
--- a/extensions/ArticlePlaceholder/includes/ItemNotabilityFilter.php
+++ b/extensions/ArticlePlaceholder/includes/ItemNotabilityFilter.php
@@ -79,13 +79,17 @@
 
                $numericItemIds = [];
 
-               $statementClaimsCount = $this->getStatementClaimsCount( 
$itemIds );
+               $pagePropsByItem = $this->getPagePropsByItem( $itemIds );
 
                foreach ( $itemIds as $itemId ) {
                        $itemIdSerialization = $itemId->getSerialization();
+                       $pageProps = $pagePropsByItem[$itemIdSerialization];
 
-                       if ( 
$statementClaimsCount[$itemIdSerialization]['wb-claims'] >= self::MIN_STATEMENTS
-                               && 
$statementClaimsCount[$itemIdSerialization]['wb-sitelinks'] >= 
self::MIN_SITELINKS
+                       if (
+                               isset( $pageProps['wb-claims'] ) &&
+                               isset( $pageProps['wb-sitelinks'] ) &&
+                               $pageProps['wb-claims'] >= self::MIN_STATEMENTS 
&&
+                               $pageProps['wb-sitelinks'] >= 
self::MIN_SITELINKS
                        ) {
                                $numericItemIds[] = $itemId->getNumericId();
                        }
@@ -99,9 +103,9 @@
         *
         * @param ItemId[] $itemIds
         *
-        * @return array() int[page_title][propname] => value
+        * @return int[][] Map of page_title => propname => numeric value
         */
-       private function getStatementClaimsCount( array $itemIds ) {
+       private function getPagePropsByItem( array $itemIds ) {
                $statementsClaimsCount = [];
 
                $dbr = $this->connectionManager->getReadConnection();
@@ -111,7 +115,7 @@
                $this->connectionManager->releaseConnection( $dbr );
 
                foreach ( $res as $row ) {
-                       
$statementsClaimsCount[$row->page_title][$row->pp_propname] = $row->pp_value ?: 
0;
+                       
$statementsClaimsCount[$row->page_title][$row->pp_propname] = intval( 
$row->pp_value ?: 0 );
                }
 
                return $statementsClaimsCount;
diff --git a/extensions/Constraints/api/CheckConstraints.php 
b/extensions/Constraints/api/CheckConstraints.php
index 613a218..bed10bd 100644
--- a/extensions/Constraints/api/CheckConstraints.php
+++ b/extensions/Constraints/api/CheckConstraints.php
@@ -27,6 +27,7 @@
 use 
WikibaseQuality\ConstraintReport\ConstraintCheck\DelegatingConstraintChecker;
 use 
WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\ConstraintParameterParser;
 use WikibaseQuality\ConstraintReport\ConstraintCheck\Result\CheckResult;
+use WikibaseQuality\ConstraintReport\ConstraintCheck\Result\NullResult;
 use WikibaseQuality\ConstraintReport\ConstraintParameterRenderer;
 use WikibaseQuality\ConstraintReport\ConstraintReportFactory;
 
@@ -217,12 +218,21 @@
                $this->resultBuilder->markSuccess( 1 );
        }
 
+       public function defaultResults( Context $context ) {
+               return $context->getType() === Context::TYPE_STATEMENT ?
+                       [ new NullResult( $context ) ] :
+                       [];
+       }
+
        private function checkItems( array $entityIds, $constraintIds ) {
                $checkResults = [];
 
                foreach ( $entityIds as $entityId ) {
                        $currentCheckResults = 
$this->delegatingConstraintChecker->checkAgainstConstraintsOnEntityId(
-                               $entityId, $constraintIds );
+                               $entityId,
+                               $constraintIds,
+                               [ $this, "defaultResults" ]
+                       );
                        if ( $currentCheckResults ) {
                                $checkResults = array_merge( $checkResults, 
$currentCheckResults );
                        }
@@ -236,7 +246,10 @@
 
                foreach ( $claimIds as $claimId ) {
                        $currentCheckResults = 
$this->delegatingConstraintChecker->checkAgainstConstraintsOnClaimId(
-                               $claimId, $constraintIds );
+                               $claimId,
+                               $constraintIds,
+                               [ $this, "defaultResults" ]
+                       );
                        if ( $currentCheckResults ) {
                                $checkResults = array_merge( $checkResults, 
$currentCheckResults );
                        }
@@ -328,33 +341,37 @@
                }
 
                foreach ( $checkResults as $checkResult ) {
-                       $entityId = 
$checkResult->getEntityId()->getSerialization();
-                       $constraintId = 
$checkResult->getConstraint()->getConstraintId();
-                       $typeItemId = 
$checkResult->getConstraint()->getConstraintTypeItemId();
+                       if ( $checkResult instanceof NullResult ) {
+                               $result = null;
+                       } else {
+                               $entityId = 
$checkResult->getEntityId()->getSerialization();
+                               $constraintId = 
$checkResult->getConstraint()->getConstraintId();
+                               $typeItemId = 
$checkResult->getConstraint()->getConstraintTypeItemId();
 
-                       $title = $this->entityTitleLookup->getTitleForId( 
$checkResult->getContext()->getSnak()->getPropertyId() );
-                       $statementGuid = $this->statementGuidParser->parse( 
$constraintId );
-                       $typeLabel = 
$this->entityIdLabelFormatter->formatEntityId( new ItemId( $typeItemId ) );
-                       // TODO link to the statement when possible (T169224)
-                       $link = $title->getFullUrl() . '#' . 
$this->config->get( 'WBQualityConstraintsPropertyConstraintId' );
+                               $title = 
$this->entityTitleLookup->getTitleForId( 
$checkResult->getContext()->getSnak()->getPropertyId() );
+                               $statementGuid = 
$this->statementGuidParser->parse( $constraintId );
+                               $typeLabel = 
$this->entityIdLabelFormatter->formatEntityId( new ItemId( $typeItemId ) );
+                               // TODO link to the statement when possible 
(T169224)
+                               $link = $title->getFullUrl() . '#' . 
$this->config->get( 'WBQualityConstraintsPropertyConstraintId' );
 
-                       $result = [
-                               'status' => $checkResult->getStatus(),
-                               'property' => 
$checkResult->getContext()->getSnak()->getPropertyId()->getSerialization(),
-                               'constraint' => [
-                                       'id' => $checkResult->getConstraintId(),
-                                       'type' => $typeItemId,
-                                       'typeLabel' => $typeLabel,
-                                       'link' => $link,
-                                       'detail' => 
$checkResult->getParameters(),
-                                       'detailHTML' => 
$this->constraintParameterRenderer->formatParameters( 
$checkResult->getParameters() )
-                               ]
-                       ];
-                       if ( $checkResult->getMessage() ) {
-                               $result['message-html'] = 
$checkResult->getMessage();
-                       }
-                       if ( $checkResult->getContext()->getType() === 
Context::TYPE_STATEMENT ) {
-                               $result['claim'] = 
$checkResult->getContext()->getSnakStatement()->getGuid();
+                               $result = [
+                                       'status' => $checkResult->getStatus(),
+                                       'property' => 
$checkResult->getContext()->getSnak()->getPropertyId()->getSerialization(),
+                                       'constraint' => [
+                                               'id' => 
$checkResult->getConstraintId(),
+                                               'type' => $typeItemId,
+                                               'typeLabel' => $typeLabel,
+                                               'link' => $link,
+                                               'detail' => 
$checkResult->getParameters(),
+                                               'detailHTML' => 
$this->constraintParameterRenderer->formatParameters( 
$checkResult->getParameters() )
+                                       ]
+                               ];
+                               if ( $checkResult->getMessage() ) {
+                                       $result['message-html'] = 
$checkResult->getMessage();
+                               }
+                               if ( $checkResult->getContext()->getType() === 
Context::TYPE_STATEMENT ) {
+                                       $result['claim'] = 
$checkResult->getContext()->getSnakStatement()->getGuid();
+                               }
                        }
 
                        $checkResult->getContext()->storeCheckResultInArray( 
$result, $constraintReport );
diff --git a/extensions/Constraints/i18n/uk.json 
b/extensions/Constraints/i18n/uk.json
index 403a9a3..e3cbbd9 100644
--- a/extensions/Constraints/i18n/uk.json
+++ b/extensions/Constraints/i18n/uk.json
@@ -48,6 +48,14 @@
        "apihelp-wbcheckconstraints-param-claimid": "Список GUID, який визначає 
запис, щодо якого слід виконати перевірку й отримати звіт щодо обмежень. 
Відокремлюйте значення за допомогою '|'.",
        "apihelp-wbcheckconstraints-param-constraintid": "Необов'язковий фільтр 
для виведення лише тих обмежень. які мають вказаний ідентифікатор обмеження.",
        "apihelp-wbcheckconstraintparameters-summary": "Перевіряє параметри 
тверджень обмежень.",
+       "apihelp-wbcheckconstraintparameters-extended-description": "Можна 
вказати обидва або один з параметрів <var>property</var> та 
<var>constraintid</var>; перевірені будуть усі обмеження, вибрані іншим 
параметром.",
+       "apihelp-wbcheckconstraintparameters-param-propertyid": "Список 
ідентифікаторів властивостей, які слід перевірити. Всі твердження обмежень цих 
властивостей буде перевірено.\n\nЯкщо цей параметр вказано, він не повинен бути 
порожнім.",
+       "apihelp-wbcheckconstraintparameters-param-constraintid": "Список 
ідентифікаторів обмежень (GUID тверджень обмежень), які слід 
перевірити.\n\nЯкщо цей параметр вказано, він не повинен бути порожнім.",
+       "apihelp-wbcheckconstraints-example-1": "Перевірити всі обмеження в 
елементах Q5 та Q42.",
+       "apihelp-wbcheckconstraints-example-2": "Перевірити всі обмеження в 
одному твердженні.",
+       "apihelp-wbcheckconstraints-example-3": "Перевірити одне конкретне 
обмеження в елементі Q2.",
+       "apihelp-wbcheckconstraintparameters-example-propertyid-1": "Перевірити 
параметри усіх обмежень у властивості.",
+       "apihelp-wbcheckconstraintparameters-example-constraintid-2": 
"Перевірити параметри двох конкретних обмежень.",
        "wbq-subextension-name-wbqc": "Обмеження",
        "wbqc-violation-header-parameters": "Параметри:",
        "wbqc-violations-group": "Обмеження",
@@ -55,9 +63,25 @@
        "wbqc-violation-message-not-yet-implemented": "З технічних причин 
перевірку щодо обмеження «$1» ще не було впроваджено.",
        "wbqc-violation-message-security-reason": "З міркувань безпеки, 
перевірку обмеження «$1» на цей момент провести не можна. Ми працюємо над 
рішенням.",
        "wbqc-violation-message-value-needed-of-type": "Властивості «$1» 
повинні мати значення типу «$2».",
+       "wbqc-violation-message-value-needed-of-types-2": "Властивості з 
обмеженням «$1» повинні мати значення типу «$2» або «$3».",
        "wbqc-violation-message-parameter-needed": "Властивості з обмеженням 
«$1» потребують параметра «$2».",
+       "wbqc-violation-message-parameters-needed-3": "Властивостям з 
обмеженням «$1» необхідні параметри «$2», «$3» та «$4».",
        "wbqc-violation-message-target-entity-must-exist": "Цільова сутність 
повинна існувати.",
        "wbqc-violation-message-value-entity-must-exist": "Сутність для цього 
значення повинна існувати.",
+       "wbqc-violation-message-parameter-value": "Параметр «$1» повинен мати 
нестандартне значення, не «без значення» чи «невідоме значення».",
+       "wbqc-violation-message-parameter-value-or-novalue": "Параметр «$1» 
повинен мати нестандартне значення або «без значення», але в жодному разі не 
«невідоме значення».",
+       "wbqc-violation-message-parameter-entity": "Значення для параметра «$1» 
має бути сутністю, не «$2».",
+       "wbqc-violation-message-parameter-item": "Значення для параметра «$1» 
має бути елементом, не «$2».",
+       "wbqc-violation-message-parameter-property": "Значення для параметра 
«$1» має бути властивістю, не «$2».",
+       "wbqc-violation-message-parameter-string": "Значення для параметра «$1» 
має бути рядком, не «$2».",
+       "wbqc-violation-message-parameter-monolingualtext": "Значення для 
параметра «$1» має бути мономовним текстом, не «$2».",
+       "wbqc-violation-message-parameter-single": "Параметр «$1» повинен мати 
лише одне значення.",
+       "wbqc-violation-message-parameter-single-per-language": "Параметр «$1» 
повинен мати лише одне значення на мову, натомість він має кілька значень для 
$2 ($3).",
+       "wbqc-violation-message-parameter-oneof": "Параметр «$1» повинен бути 
{{PLURAL:$2|1=$4.|2=або $4, або $5.|одним з такого: $3}}",
+       "wbqc-violation-message-parameter-regex": "$1 не є валідним регулярним 
виразом.",
+       "wbqc-violation-message-sparql-error": "Запит SPARQL видав помилку.",
+       "wbqc-violation-message-parameters-error-unknown": "Параметри цього 
обмеження не вдалося імпортувати.",
+       "wbqc-violation-message-parameters-error-toolong": "Параметри цього 
обмеження не вдалося імпортувати, оскільки вони були надто довгими.",
        "wbqc-violation-message-commons-link-no-existent": "Посилання на 
Вікісховище повинно існувати.",
        "wbqc-violation-message-commons-link-not-well-formed": "Посилання на 
Вікісховище повинно бути правильно вказане.",
        
"wbqc-violation-message-commons-link-check-for-namespace-not-yet-implemented": 
"Перевірка за простором назв «$1» ще не впроваджена.",
diff --git 
a/extensions/Constraints/includes/ConstraintCheck/Context/ApiV2Context.php 
b/extensions/Constraints/includes/ConstraintCheck/Context/ApiV2Context.php
index 32e7326..5ac66e9 100644
--- a/extensions/Constraints/includes/ConstraintCheck/Context/ApiV2Context.php
+++ b/extensions/Constraints/includes/ConstraintCheck/Context/ApiV2Context.php
@@ -74,8 +74,15 @@
         */
        abstract protected function &getMainArray( array &$container );
 
-       public function storeCheckResultInArray( array $result, array 
&$container ) {
-               $this->getMainArray( $container )['results'][] = $result;
+       public function storeCheckResultInArray( $result, array &$container ) {
+               $mainArray = &$this->getMainArray( $container );
+               if ( !array_key_exists( 'results', $mainArray ) ) {
+                       $mainArray['results'] = [];
+               }
+
+               if ( $result !== null ) {
+                       $mainArray['results'][] = $result;
+               }
        }
 
 }
diff --git 
a/extensions/Constraints/includes/ConstraintCheck/Context/Context.php 
b/extensions/Constraints/includes/ConstraintCheck/Context/Context.php
index 4bf07c4..844bc8b 100644
--- a/extensions/Constraints/includes/ConstraintCheck/Context/Context.php
+++ b/extensions/Constraints/includes/ConstraintCheck/Context/Context.php
@@ -80,9 +80,12 @@
         *
         * Mainly used in the API, where $container is part of the API response.
         *
-        * @param array $result
+        * If $result is null, don’t actually store it,
+        * but still populate the appropriate location for this context in 
$container.
+        *
+        * @param array|null $result
         * @param array &$container
         */
-       public function storeCheckResultInArray( array $result, array 
&$container );
+       public function storeCheckResultInArray( $result, array &$container );
 
 }
diff --git 
a/extensions/Constraints/includes/ConstraintCheck/Context/StatementContext.php 
b/extensions/Constraints/includes/ConstraintCheck/Context/StatementContext.php
index ed20b9d..2968a0d 100644
--- 
a/extensions/Constraints/includes/ConstraintCheck/Context/StatementContext.php
+++ 
b/extensions/Constraints/includes/ConstraintCheck/Context/StatementContext.php
@@ -49,15 +49,28 @@
         * then by claim ID, and then contains the $result in a list:
         * { "Q1": { "P1": { "Q1$1a2b...": [ { "status": "compliance", ... } ] 
} } }
         *
-        * @param array $result
+        * @param array|null $result
         * @param array &$container
         */
-       public function storeCheckResultInArray( array $result, array 
&$container ) {
+       public function storeCheckResultInArray( $result, array &$container ) {
                $entityId = $this->entity->getId()->getSerialization();
-               $propertyId = 
$this->statement->getPropertyId()->getSerialization();
-               $statementId = $this->statement->getGuid();
+               if ( !array_key_exists( $entityId, $container ) ) {
+                       $container[$entityId] = [];
+               }
 
-               $container[$entityId][$propertyId][$statementId][] = $result;
+               $propertyId = 
$this->statement->getPropertyId()->getSerialization();
+               if ( !array_key_exists( $propertyId, $container[$entityId] ) ) {
+                       $container[$entityId][$propertyId] = [];
+               }
+
+               $statementId = $this->statement->getGuid();
+               if ( !array_key_exists( $statementId, 
$container[$entityId][$propertyId] ) ) {
+                       $container[$entityId][$propertyId][$statementId] = [];
+               }
+
+               if ( $result !== null ) {
+                       $container[$entityId][$propertyId][$statementId][] = 
$result;
+               }
        }
 
 }
diff --git 
a/extensions/Constraints/includes/ConstraintCheck/DelegatingConstraintChecker.php
 
b/extensions/Constraints/includes/ConstraintCheck/DelegatingConstraintChecker.php
index 1561840..eb45648 100644
--- 
a/extensions/Constraints/includes/ConstraintCheck/DelegatingConstraintChecker.php
+++ 
b/extensions/Constraints/includes/ConstraintCheck/DelegatingConstraintChecker.php
@@ -119,15 +119,27 @@
         *
         * @param EntityId $entityId
         * @param array $constraintIds
+        * @param callable|null $defaultResults Optional function to 
pre-populate the check results.
+        * For each {@link Context} where constraints will be checked,
+        * this function (if not null) is first called with that context as 
argument,
+        * and may return an array of check results to which the regular 
results are appended.
         *
         * @return CheckResult[]
         *
         */
-       public function checkAgainstConstraintsOnEntityId( EntityId $entityId, 
$constraintIds = null ) {
+       public function checkAgainstConstraintsOnEntityId(
+               EntityId $entityId,
+               $constraintIds = null,
+               callable $defaultResults = null
+       ) {
 
                $entity = $this->entityLookup->getEntity( $entityId );
                if ( $entity instanceof StatementListProvider ) {
-                       $result = $this->checkEveryStatement( 
$this->entityLookup->getEntity( $entityId ), $constraintIds );
+                       $result = $this->checkEveryStatement(
+                               $this->entityLookup->getEntity( $entityId ),
+                               $constraintIds,
+                               $defaultResults
+                       );
                        $output = $this->sortResult( $result );
                        return $output;
                }
@@ -141,9 +153,18 @@
         *
         * @param string $guid
         * @param array $constraintIds
+        * @param callable|null $defaultResults Optional function to 
pre-populate the check results.
+        * For each {@link Context} where constraints will be checked,
+        * this function (if not null) is first called with that context as 
argument,
+        * and may return an array of check results to which the regular 
results are appended.
+        *
         * @return CheckResult[]
         */
-       public function checkAgainstConstraintsOnClaimId( $guid, $constraintIds 
= null ) {
+       public function checkAgainstConstraintsOnClaimId(
+               $guid,
+               $constraintIds = null,
+               callable $defaultResults = null
+       ) {
 
                $parsedGuid = $this->statementGuidParser->parse( $guid );
                $entityId = $parsedGuid->getEntityId();
@@ -151,7 +172,12 @@
                if ( $entity instanceof StatementListProvider ) {
                        $statement = 
$entity->getStatements()->getFirstStatementWithGuid( $guid );
                        if ( $statement ) {
-                               $result = $this->checkStatement( $entity, 
$statement, $constraintIds );
+                               $result = $this->checkStatement(
+                                       $entity,
+                                       $statement,
+                                       $constraintIds,
+                                       $defaultResults
+                               );
                                $output = $this->sortResult( $result );
                                return $output;
                        }
@@ -246,15 +272,26 @@
        /**
         * @param EntityDocument|StatementListProvider $entity
         * @param string[]|null $constraintIds list of constraints to check (if 
null: all constraints)
+        * @param callable|null $defaultResults optional function to 
pre-populate the check results
         *
         * @return CheckResult[]
         */
-       private function checkEveryStatement( EntityDocument $entity, 
$constraintIds = null ) {
+       private function checkEveryStatement(
+               EntityDocument $entity,
+               $constraintIds = null,
+               callable $defaultResults = null
+       ) {
                $result = [];
 
                /** @var Statement $statement */
                foreach ( $entity->getStatements() as $statement ) {
-                       $result = array_merge( $result, $this->checkStatement( 
$entity, $statement, $constraintIds ) );
+                       $result = array_merge( $result,
+                               $this->checkStatement(
+                                       $entity,
+                                       $statement,
+                                       $constraintIds,
+                                       $defaultResults
+                               ) );
                }
 
                return $result;
@@ -264,23 +301,44 @@
         * @param EntityDocument|StatementListProvider $entity
         * @param Statement $statement
         * @param string[]|null $constraintIds list of constraints to check (if 
null: all constraints)
+        * @param callable|null $defaultResults optional function to 
pre-populate the check results
         *
         * @return CheckResult[]
         */
-       private function checkStatement( EntityDocument $entity, Statement 
$statement, $constraintIds = null ) {
+       private function checkStatement(
+               EntityDocument $entity,
+               Statement $statement,
+               $constraintIds = null,
+               callable $defaultResults = null
+       ) {
                $result = [];
 
                $result = array_merge( $result,
-                       $this->checkConstraintsForMainSnak( $entity, 
$statement, $constraintIds ) );
+                       $this->checkConstraintsForMainSnak(
+                               $entity,
+                               $statement,
+                               $constraintIds,
+                               $defaultResults
+                       ) );
 
                if ( $this->checkQualifiers ) {
                        $result = array_merge( $result,
-                               $this->checkConstraintsForQualifiers( $entity, 
$statement, $constraintIds ) );
+                               $this->checkConstraintsForQualifiers(
+                                       $entity,
+                                       $statement,
+                                       $constraintIds,
+                                       $defaultResults
+                               ) );
                }
 
                if ( $this->checkReferences ) {
                        $result = array_merge( $result,
-                               $this->checkConstraintsForReferences( $entity, 
$statement, $constraintIds ) );
+                               $this->checkConstraintsForReferences(
+                                       $entity,
+                                       $statement,
+                                       $constraintIds,
+                                       $defaultResults
+                               ) );
                }
 
                return $result;
@@ -314,14 +372,16 @@
         * @param EntityDocument $entity
         * @param Statement $statement
         * @param string[]|null $constraintIds list of constraints to check (if 
null: all constraints)
+        * @param callable|null $defaultResults optional function to 
pre-populate the check results
+        *
         * @return CheckResult[]
         */
        private function checkConstraintsForMainSnak(
                EntityDocument $entity,
                Statement $statement,
-               array $constraintIds = null
+               array $constraintIds = null,
+               callable $defaultResults = null
        ) {
-               $result = [];
                $context = $this->apiV2 ?
                        new MainSnakContext( $entity, $statement ) :
                        new StatementContext( $entity, $statement );
@@ -329,6 +389,7 @@
                        $statement->getPropertyId(),
                        $constraintIds
                );
+               $result = $defaultResults !== null ? $defaultResults( $context 
) : [];
 
                foreach ( $constraints as $constraint ) {
                        $parameters = $constraint->getConstraintParameters();
@@ -355,17 +416,23 @@
         * @param EntityDocument $entity
         * @param Statement $statement
         * @param string[]|null $constraintIds list of constraints to check (if 
null: all constraints)
+        * @param callable|null $defaultResults optional function to 
pre-populate the check results
+        *
         * @return CheckResult[]
         */
        private function checkConstraintsForQualifiers(
                EntityDocument $entity,
                Statement $statement,
-               array $constraintIds = null
+               array $constraintIds = null,
+               callable $defaultResults = null
        ) {
                $result = [];
 
                foreach ( $statement->getQualifiers() as $qualifier ) {
                        $qualifierContext = new QualifierContext( $entity, 
$statement, $qualifier );
+                       if ( $defaultResults !== null ) {
+                               $result = array_merge( $result, 
$defaultResults( $qualifierContext ) );
+                       }
                        $qualifierConstraints = $this->getConstraintsToUse(
                                $qualifierContext->getSnak()->getPropertyId(),
                                $constraintIds
@@ -382,12 +449,15 @@
         * @param EntityDocument $entity
         * @param Statement $statement
         * @param string[]|null $constraintIds list of constraints to check (if 
null: all constraints)
+        * @param callable|null $defaultResults optional function to 
pre-populate the check results
+        *
         * @return CheckResult[]
         */
        private function checkConstraintsForReferences(
                EntityDocument $entity,
                Statement $statement,
-               array $constraintIds = null
+               array $constraintIds = null,
+               callable $defaultResults = null
        ) {
                $result = [];
 
@@ -396,6 +466,9 @@
                                $referenceContext = new ReferenceContext(
                                        $entity, $statement, $reference, $snak
                                );
+                               if ( $defaultResults !== null ) {
+                                       $result = array_merge( $result, 
$defaultResults( $referenceContext ) );
+                               }
                                $referenceConstraints = 
$this->getConstraintsToUse(
                                        
$referenceContext->getSnak()->getPropertyId(),
                                        $constraintIds
diff --git 
a/extensions/Constraints/includes/ConstraintCheck/Result/NullResult.php 
b/extensions/Constraints/includes/ConstraintCheck/Result/NullResult.php
new file mode 100644
index 0000000..d0e0804
--- /dev/null
+++ b/extensions/Constraints/includes/ConstraintCheck/Result/NullResult.php
@@ -0,0 +1,46 @@
+<?php
+
+namespace WikibaseQuality\ConstraintReport\ConstraintCheck\Result;
+
+use DomainException;
+use Wikibase\DataModel\Entity\PropertyId;
+use WikibaseQuality\ConstraintReport\Constraint;
+use WikibaseQuality\ConstraintReport\ConstraintCheck\Context\Context;
+
+/**
+ * A blank CheckResult that only holds a context, but no actual result.
+ * Used for contexts that should appear in the API output
+ * even if no constraints are defined for them.
+ *
+ * @package WikibaseQuality\ConstraintReport\ConstraintCheck\Result
+ * @author Lucas Werkmeister
+ * @license GNU GPL v2+
+ */
+class NullResult extends CheckResult {
+
+       /**
+        * The property ID that is used for the fake constraint passed to the 
superclass.
+        * Since the PropertyId constructor prevents invalid property IDs like 
“P0”,
+        * we use the maximum permitted property ID and assume that it’s 
unlikely to actually exist.
+        */
+       const NULL_PROPERTY_ID = 'P2147483647';
+
+       public function __construct( Context $context ) {
+               $constraint = new Constraint(
+                       'null',
+                       new PropertyId( self::NULL_PROPERTY_ID ),
+                       'none',
+                       []
+               );
+               parent::__construct( $context, $constraint );
+       }
+
+       public function getConstraint() {
+               throw new DomainException( 'NullResult holds no constraint' );
+       }
+
+       public function getConstraintId() {
+               throw new DomainException( 'NullResult holds no constraint' );
+       }
+
+}
diff --git 
a/extensions/Constraints/tests/phpunit/Context/MainSnakContextTest.php 
b/extensions/Constraints/tests/phpunit/Context/MainSnakContextTest.php
index d039adb..c0b6bb9 100644
--- a/extensions/Constraints/tests/phpunit/Context/MainSnakContextTest.php
+++ b/extensions/Constraints/tests/phpunit/Context/MainSnakContextTest.php
@@ -132,4 +132,58 @@
                $this->assertSame( $expected, $actual );
        }
 
+       public function testStoreCheckResultInArray_NullResult() {
+               $entity = NewItem::withId( 'Q1' )->build();
+               $statement1 = NewStatement::noValueFor( 'P1' )
+                       ->withGuid( 'P1$13ea0742-0190-4d88-b7b0-baee67573818' )
+                       ->build();
+               $statement2 = NewStatement::noValueFor( 'P1' )
+                       ->withGuid( 'P1$9fbfae7f-6f21-4967-8e2c-ec04ca16873d' )
+                       ->build();
+               $statement3 = NewStatement::noValueFor( 'P2' )
+                       ->withGuid( 'P2$4638ca58-5128-4a1f-88a9-b379fe9f8ad9' )
+                       ->build();
+               $context1 = new MainSnakContext( $entity, $statement1 );
+               $context2 = new MainSnakContext( $entity, $statement2 );
+               $context3 = new MainSnakContext( $entity, $statement3 );
+
+               $actual = [];
+               $context1->storeCheckResultInArray( null, $actual );
+               $context2->storeCheckResultInArray( null, $actual );
+               $context3->storeCheckResultInArray( null, $actual );
+
+               $expected = [
+                       'Q1' => [
+                               'claims' => [
+                                       'P1' => [
+                                               [
+                                                       'id' => 
'P1$13ea0742-0190-4d88-b7b0-baee67573818',
+                                                       'mainsnak' => [
+                                                               'hash' => 
$statement1->getMainSnak()->getHash(),
+                                                               'results' => [],
+                                                       ],
+                                               ],
+                                               [
+                                                       'id' => 
'P1$9fbfae7f-6f21-4967-8e2c-ec04ca16873d',
+                                                       'mainsnak' => [
+                                                               'hash' => 
$statement2->getMainSnak()->getHash(),
+                                                               'results' => [],
+                                                       ],
+                                               ],
+                                       ],
+                                       'P2' => [
+                                               [
+                                                       'id' => 
'P2$4638ca58-5128-4a1f-88a9-b379fe9f8ad9',
+                                                       'mainsnak' => [
+                                                               'hash' => 
$statement3->getMainSnak()->getHash(),
+                                                               'results' => [],
+                                                       ],
+                                               ],
+                                       ],
+                               ],
+                       ],
+               ];
+               $this->assertSame( $expected, $actual );
+       }
+
 }
diff --git 
a/extensions/Constraints/tests/phpunit/Context/QualifierContextTest.php 
b/extensions/Constraints/tests/phpunit/Context/QualifierContextTest.php
index 0b49baa..cc5f0f7 100644
--- a/extensions/Constraints/tests/phpunit/Context/QualifierContextTest.php
+++ b/extensions/Constraints/tests/phpunit/Context/QualifierContextTest.php
@@ -171,4 +171,87 @@
                $this->assertSame( $expected, $actual );
        }
 
+       public function testStoreCheckResultInArray_NullResult() {
+               $entity = NewItem::withId( 'Q1' )->build();
+               $statement1 = NewStatement::noValueFor( 'P1' )
+                       ->withGuid( 'P1$13ea0742-0190-4d88-b7b0-baee67573818' )
+                       ->build();
+               $statement2 = NewStatement::noValueFor( 'P1' )
+                       ->withGuid( 'P1$9fbfae7f-6f21-4967-8e2c-ec04ca16873d' )
+                       ->build();
+               $statement3 = NewStatement::noValueFor( 'P2' )
+                       ->withGuid( 'P2$4638ca58-5128-4a1f-88a9-b379fe9f8ad9' )
+                       ->build();
+               $snak1 = NewStatement::noValueFor( 'P11' 
)->build()->getMainSnak();
+               $snak2 = NewStatement::someValueFor( 'P11' 
)->build()->getMainSnak();
+               $snak3 = NewStatement::noValueFor( 'P12' 
)->build()->getMainSnak();
+               $context1 = new QualifierContext( $entity, $statement1, $snak1 
);
+               $context2 = new QualifierContext( $entity, $statement1, $snak2 
);
+               $context3 = new QualifierContext( $entity, $statement1, $snak3 
);
+               $context4 = new QualifierContext( $entity, $statement2, $snak3 
);
+               $context5 = new QualifierContext( $entity, $statement3, $snak3 
);
+
+               $actual = [];
+               $context1->storeCheckResultInArray( null, $actual );
+               $context2->storeCheckResultInArray( null, $actual );
+               $context3->storeCheckResultInArray( null, $actual );
+               $context4->storeCheckResultInArray( null, $actual );
+               $context5->storeCheckResultInArray( null, $actual );
+
+               $expected = [
+                       'Q1' => [
+                               'claims' => [
+                                       'P1' => [
+                                               [
+                                                       'id' => 
'P1$13ea0742-0190-4d88-b7b0-baee67573818',
+                                                       'qualifiers' => [
+                                                               'P11' => [
+                                                                       [
+                                                                               
'hash' => $snak1->getHash(),
+                                                                               
'results' => []
+                                                                       ],
+                                                                       [
+                                                                               
'hash' => $snak2->getHash(),
+                                                                               
'results' => []
+                                                                       ]
+                                                               ],
+                                                               'P12' => [
+                                                                       [
+                                                                               
'hash' => $snak3->getHash(),
+                                                                               
'results' => []
+                                                                       ]
+                                                               ]
+                                                       ],
+                                               ],
+                                               [
+                                                       'id' => 
'P1$9fbfae7f-6f21-4967-8e2c-ec04ca16873d',
+                                                       'qualifiers' => [
+                                                               'P12' => [
+                                                                       [
+                                                                               
'hash' => $snak3->getHash(),
+                                                                               
'results' => []
+                                                                       ]
+                                                               ]
+                                                       ],
+                                               ],
+                                       ],
+                                       'P2' => [
+                                               [
+                                                       'id' => 
'P2$4638ca58-5128-4a1f-88a9-b379fe9f8ad9',
+                                                       'qualifiers' => [
+                                                               'P12' => [
+                                                                       [
+                                                                               
'hash' => $snak3->getHash(),
+                                                                               
'results' => []
+                                                                       ]
+                                                               ]
+                                                       ],
+                                               ],
+                                       ],
+                               ],
+                       ],
+               ];
+               $this->assertSame( $expected, $actual );
+       }
+
 }
diff --git 
a/extensions/Constraints/tests/phpunit/Context/ReferenceContextTest.php 
b/extensions/Constraints/tests/phpunit/Context/ReferenceContextTest.php
index 1ba883c..22bbdf9 100644
--- a/extensions/Constraints/tests/phpunit/Context/ReferenceContextTest.php
+++ b/extensions/Constraints/tests/phpunit/Context/ReferenceContextTest.php
@@ -227,4 +227,127 @@
                $this->assertSame( $expected, $actual['Q1']['claims'] );
        }
 
+       public function testStoreCheckResultInArray_NullResult() {
+               $entity = NewItem::withId( 'Q1' )->build();
+               $statement1 = NewStatement::noValueFor( 'P1' )
+                       ->withGuid( 'P1$13ea0742-0190-4d88-b7b0-baee67573818' )
+                       ->build();
+               $statement2 = NewStatement::noValueFor( 'P1' )
+                       ->withGuid( 'P1$9fbfae7f-6f21-4967-8e2c-ec04ca16873d' )
+                       ->build();
+               $statement3 = NewStatement::noValueFor( 'P2' )
+                       ->withGuid( 'P2$4638ca58-5128-4a1f-88a9-b379fe9f8ad9' )
+                       ->build();
+               $snak1 = NewStatement::noValueFor( 'P11' 
)->build()->getMainSnak();
+               $snak2 = NewStatement::someValueFor( 'P11' 
)->build()->getMainSnak();
+               $snak3 = NewStatement::noValueFor( 'P12' 
)->build()->getMainSnak();
+               $reference1 = new Reference( [ $snak1, $snak2, $snak3 ] );
+               $statement1->getReferences()->addReference( $reference1 );
+               $reference2 = new Reference( [ $snak2, $snak3 ] );
+               $statement1->getReferences()->addReference( $reference2 );
+               $statement2->getReferences()->addReference( $reference1 );
+               $statement3->getReferences()->addReference( $reference2 );
+               $context1 = new ReferenceContext( $entity, $statement1, 
$reference1, $snak1 );
+               $context2 = new ReferenceContext( $entity, $statement1, 
$reference1, $snak2 );
+               $context3 = new ReferenceContext( $entity, $statement1, 
$reference1, $snak3 );
+               $context4 = new ReferenceContext( $entity, $statement1, 
$reference2, $snak2 );
+               $context5 = new ReferenceContext( $entity, $statement1, 
$reference2, $snak3 );
+               $context6 = new ReferenceContext( $entity, $statement2, 
$reference1, $snak1 );
+               $context7 = new ReferenceContext( $entity, $statement3, 
$reference2, $snak3 );
+
+               $actual = [];
+               $context1->storeCheckResultInArray( null, $actual );
+               $context2->storeCheckResultInArray( null, $actual );
+               $context3->storeCheckResultInArray( null, $actual );
+               $context4->storeCheckResultInArray( null, $actual );
+               $context5->storeCheckResultInArray( null, $actual );
+               $context6->storeCheckResultInArray( null, $actual );
+               $context7->storeCheckResultInArray( null, $actual );
+
+               $expected = [
+                       'P1' => [
+                               [
+                                       'id' => 
'P1$13ea0742-0190-4d88-b7b0-baee67573818',
+                                       'references' => [
+                                               [
+                                                       'hash' => 
$reference1->getHash(),
+                                                       'snaks' => [
+                                                               'P11' => [
+                                                                       [
+                                                                               
'hash' => $snak1->getHash(),
+                                                                               
'results' => []
+                                                                       ],
+                                                                       [
+                                                                               
'hash' => $snak2->getHash(),
+                                                                               
'results' => []
+                                                                       ]
+                                                               ],
+                                                               'P12' => [
+                                                                       [
+                                                                               
'hash' => $snak3->getHash(),
+                                                                               
'results' => []
+                                                                       ]
+                                                               ]
+                                                       ]
+                                               ],
+                                               [
+                                                       'hash' => 
$reference2->getHash(),
+                                                       'snaks' => [
+                                                               'P11' => [
+                                                                       [
+                                                                               
'hash' => $snak2->getHash(),
+                                                                               
'results' => []
+                                                                       ]
+                                                               ],
+                                                               'P12' => [
+                                                                       [
+                                                                               
'hash' => $snak3->getHash(),
+                                                                               
'results' => []
+                                                                       ]
+                                                               ]
+                                                       ]
+                                               ],
+                                       ],
+                               ],
+                               [
+                                       'id' => 
'P1$9fbfae7f-6f21-4967-8e2c-ec04ca16873d',
+                                       'references' => [
+                                               [
+                                                       'hash' => 
$reference1->getHash(),
+                                                       'snaks' => [
+                                                               'P11' => [
+                                                                       [
+                                                                               
'hash' => $snak1->getHash(),
+                                                                               
'results' => []
+                                                                       ],
+                                                               ],
+                                                       ]
+                                               ],
+                                       ],
+                               ],
+                       ],
+                       'P2' => [
+                               [
+                                       'id' => 
'P2$4638ca58-5128-4a1f-88a9-b379fe9f8ad9',
+                                       'references' => [
+                                               [
+                                                       'hash' => 
$reference2->getHash(),
+                                                       'snaks' => [
+                                                               'P12' => [
+                                                                       [
+                                                                               
'hash' => $snak3->getHash(),
+                                                                               
'results' => []
+                                                                       ],
+                                                               ],
+                                                       ]
+                                               ],
+                                       ],
+                               ],
+                       ],
+               ];
+               $this->assertSame( [ 'Q1' ], array_keys( $actual ) );
+               $this->assertSame( [ 'claims' ], array_keys( $actual['Q1'] ) );
+               $this->assertSame( $expected, $actual['Q1']['claims'] );
+       }
+
 }
diff --git 
a/extensions/Constraints/tests/phpunit/Context/StatementContextTest.php 
b/extensions/Constraints/tests/phpunit/Context/StatementContextTest.php
index a55eb1d..0eb6097 100644
--- a/extensions/Constraints/tests/phpunit/Context/StatementContextTest.php
+++ b/extensions/Constraints/tests/phpunit/Context/StatementContextTest.php
@@ -111,4 +111,38 @@
                $this->assertSame( $expected, $actual );
        }
 
+       public function testStoreCheckResultInArray_NullResult() {
+               $entity = NewItem::withId( 'Q1' )->build();
+               $statement1 = NewStatement::noValueFor( 'P1' )
+                       ->withGuid( 'P1$13ea0742-0190-4d88-b7b0-baee67573818' )
+                       ->build();
+               $statement2 = NewStatement::noValueFor( 'P1' )
+                       ->withGuid( 'P1$9fbfae7f-6f21-4967-8e2c-ec04ca16873d' )
+                       ->build();
+               $statement3 = NewStatement::noValueFor( 'P2' )
+                       ->withGuid( 'P2$4638ca58-5128-4a1f-88a9-b379fe9f8ad9' )
+                       ->build();
+               $context1 = new StatementContext( $entity, $statement1 );
+               $context2 = new StatementContext( $entity, $statement2 );
+               $context3 = new StatementContext( $entity, $statement3 );
+
+               $actual = [];
+               $context1->storeCheckResultInArray( null, $actual );
+               $context2->storeCheckResultInArray( null, $actual );
+               $context3->storeCheckResultInArray( null, $actual );
+
+               $expected = [
+                       'Q1' => [
+                               'P1' => [
+                                       
'P1$13ea0742-0190-4d88-b7b0-baee67573818' => [],
+                                       
'P1$9fbfae7f-6f21-4967-8e2c-ec04ca16873d' => [],
+                               ],
+                               'P2' => [
+                                       
'P2$4638ca58-5128-4a1f-88a9-b379fe9f8ad9' => [],
+                               ],
+                       ],
+               ];
+               $this->assertSame( $expected, $actual );
+       }
+
 }
diff --git a/extensions/Constraints/tests/phpunit/Fake/FakeSnakContext.php 
b/extensions/Constraints/tests/phpunit/Fake/FakeSnakContext.php
index 76eed30..c51f11e 100644
--- a/extensions/Constraints/tests/phpunit/Fake/FakeSnakContext.php
+++ b/extensions/Constraints/tests/phpunit/Fake/FakeSnakContext.php
@@ -32,8 +32,10 @@
                return 'statement';
        }
 
-       public function storeCheckResultInArray( array $result, array 
&$container ) {
-               $container[] = $result;
+       public function storeCheckResultInArray( $result, array &$container ) {
+               if ( $result !== null ) {
+                       $container[] = $result;
+               }
        }
 
 }
diff --git a/extensions/Wikibase/client/i18n/hu.json 
b/extensions/Wikibase/client/i18n/hu.json
index 48c8cee..bce56d6 100644
--- a/extensions/Wikibase/client/i18n/hu.json
+++ b/extensions/Wikibase/client/i18n/hu.json
@@ -68,7 +68,7 @@
        "wikibase-unconnectedpages-format-row": "($1 nyelvközi hivatkozás a 
lapon)",
        "wikibase-unconnectedpages-submit": "Lapok megjelenítése",
        "pageswithbadges": "Lapok plecsnikkel",
-       "pageswithbadges-summary": "A plecsnikkel (például jó vagy kiemelt 
szócikk) rendelkező lapok listája. A lista lapazonosítók alapján van rendezve, 
tehát az újabb lapok vannak előbb.",
+       "pageswithbadges-summary": "A plecsnikkel (például jó vagy kiemelt 
szócikk minősítéssel) rendelkező lapok listája. A lista a lapazonosítók alapján 
van rendezve, tehát az újabb lapok vannak előbb.",
        "wikibase-pageswithbadges-invalid-id": "$1 nem egy érvényes 
elemazonosító",
        "wikibase-pageswithbadges-submit": "Lapok megjelenítése",
        "entityusage": "Állítások használata",
diff --git a/extensions/Wikibase/client/includes/Usage/Sql/EntityUsageTable.php 
b/extensions/Wikibase/client/includes/Usage/Sql/EntityUsageTable.php
index 40d9be4..c555d8e 100644
--- a/extensions/Wikibase/client/includes/Usage/Sql/EntityUsageTable.php
+++ b/extensions/Wikibase/client/includes/Usage/Sql/EntityUsageTable.php
@@ -81,7 +81,7 @@
 
                //TODO: Inject
                $this->readConnection = 
MediaWikiServices::getInstance()->getDBLoadBalancer()
-                                       ->getConnection( DB_REPLICA );
+                       ->getConnection( DB_REPLICA );
        }
 
        /**
diff --git 
a/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseLibraryTestCase.php
 
b/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseLibraryTestCase.php
index fd0065c..c8a13a8 100644
--- 
a/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseLibraryTestCase.php
+++ 
b/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/Scribunto/Scribunto_LuaWikibaseLibraryTestCase.php
@@ -15,6 +15,8 @@
 
 if ( !class_exists( Scribunto_LuaEngineTestBase::class ) ) {
        /**
+        * Fake base class in case Scribunto is not available.
+        *
         * @license GPL-2.0+
         * @author Marius Hoch < [email protected] >
         */
diff --git a/extensions/Wikibase/composer.json 
b/extensions/Wikibase/composer.json
index d8e8b7b..4d1335f 100644
--- a/extensions/Wikibase/composer.json
+++ b/extensions/Wikibase/composer.json
@@ -45,7 +45,7 @@
        },
        "require-dev": {
                "jakub-onderka/php-parallel-lint": ">=0.3 <0.10",
-               "wikibase/wikibase-codesniffer": "^0.1.0",
+               "wikibase/wikibase-codesniffer": "^0.2.0",
                "jakub-onderka/php-console-highlighter": "0.3.2",
                "mediawiki/minus-x": "0.1.0"
        },
@@ -61,6 +61,7 @@
                        "lib/maintenance/",
                        "repo/includes/",
                        "repo/maintenance/",
+                       "repo/tests/phpunit/maintenance/MockAddUnits.php",
                        "repo/Wikibase.hooks.php"
                ],
                "psr-4": {
@@ -81,9 +82,6 @@
                "test": [
                        "composer validate --no-interaction",
                        "parallel-lint . --exclude vendor",
-                       "@cs"
-               ],
-               "cs": [
                        "phpcs -p -s"
                ]
        }
diff --git a/extensions/Wikibase/lib/i18n/ais.json 
b/extensions/Wikibase/lib/i18n/ais.json
index 239c414..3a8ed9e 100644
--- a/extensions/Wikibase/lib/i18n/ais.json
+++ b/extensions/Wikibase/lib/i18n/ais.json
@@ -56,6 +56,7 @@
        "wikibase-validator-not-allowed": "caay kalikecay a sulyang: $1",
        "wikibase-validator-no-validators": "satezep",
        "datatypes-type-wikibase-item": "kasacacay",
+       "datatypes-type-commonsMedia": "kasasimel katahkalan nu kalisiw myiti 
tangan",
        "datatypes-type-geo-shape": "hekal nu lala’-liwliw",
        "datatypes-type-external-id": "ihekalay mapulitaay a kodo",
        "version-wikibase": "Wikibase",
@@ -67,6 +68,7 @@
        "wikibase-time-precision-BCE-annum": "ayaw nu Yis mihca {{PLURAL:$1|$1 
a mihca}}",
        "wikibase-time-precision-BCE-millennium": "ayaw nu Yis mihca $1 malebut 
a mihca",
        "wikibase-time-precision-BCE-century": "ayaw nu Yis mihca $1 lasubu a 
mihca",
+       "wikibase-time-precision-BCE-10annum": "ayaw nu Yis mihca $1 a mihca",
        "wikibase-snakformatter-valuetype-mismatch": "sulyang kakuniza \"$1\" 
atu susin kakuniza \"$2\" caay kataneng.",
        "wikibase-snakformatter-property-not-found": "caay katepa susin $1, 
la’cu taazihan apisaungay a kalunasulitan kakuniza.",
        "wikibase-entity-summary-wbsetitem": "patizeng tuway baluhay kasacacay",
diff --git a/extensions/Wikibase/lib/i18n/ur.json 
b/extensions/Wikibase/lib/i18n/ur.json
index 340c9f6..9242c3f 100644
--- a/extensions/Wikibase/lib/i18n/ur.json
+++ b/extensions/Wikibase/lib/i18n/ur.json
@@ -3,11 +3,13 @@
                "authors": [
                        "පසිඳු කාවින්ද",
                        "عثمان خان شاہ",
-                       "Noor2020"
+                       "Noor2020",
+                       "Muhammad Shuaib"
                ]
        },
        "wikibase-sitelinks-wikipedia": "ویکیپیڈیا",
        "wikibase-tooltip-error-details": "تفصیلات",
+       "wikibase-entity-summary-wbsetitem": "نیا آئٹم بنائیں",
        "wikibase-entity-summary-wbsetclaim-update": "تبدیل کر دیا گیا  
{{PLURAL:$3| دعوی|دعوے}}",
        "wikibase-entity-summary-wbsetclaim-create": "تخلیق کر دیا گیا  
{{PLURAL:$3| دعوی|دعوے}}",
        "wikibase-entity-summary-wbsetclaim-update-qualifiers": "تبدیل کر دیا 
گیا  {{PLURAL:$4|تصفیہ کار کا| $4  تصفیہ کاران کے}}  {{PLURAL:$3| دعوی|دعوے}}",
diff --git 
a/extensions/Wikibase/lib/includes/Store/DispatchingPropertyInfoLookup.php 
b/extensions/Wikibase/lib/includes/Store/DispatchingPropertyInfoLookup.php
index 802d3d3..4f21294 100644
--- a/extensions/Wikibase/lib/includes/Store/DispatchingPropertyInfoLookup.php
+++ b/extensions/Wikibase/lib/includes/Store/DispatchingPropertyInfoLookup.php
@@ -8,17 +8,21 @@
 use Wikimedia\Rdbms\DBError;
 
 /**
+ * A dispatching PropertyInfoLookup implementation that is able to understand 
property ID strings
+ * prefixed with repository names, and forwards to the service responsible for 
the repository.
+ *
  * @license GPL-2.0+
  */
 class DispatchingPropertyInfoLookup implements PropertyInfoLookup {
 
        /**
-        * @var PropertyInfoLookup[]
+        * @var PropertyInfoLookup[] indexed by repository name
         */
        private $lookups;
 
        /**
-        * @param PropertyInfoLookup[] $lookups
+        * @param PropertyInfoLookup[] $lookups Map of repository name strings 
to PropertyInfoLookup
+        *  objects.
         */
        public function __construct( array $lookups ) {
                Assert::parameter( !empty( $lookups ), '$lookups', 'must not be 
empty' );
diff --git a/extensions/Wikibase/lib/includes/Units/BaseUnitStorage.php 
b/extensions/Wikibase/lib/includes/Units/BaseUnitStorage.php
index e4b2c27..9c4c9b1 100644
--- a/extensions/Wikibase/lib/includes/Units/BaseUnitStorage.php
+++ b/extensions/Wikibase/lib/includes/Units/BaseUnitStorage.php
@@ -5,6 +5,9 @@
 /**
  * Basic unit storage functionality.
  * Concrete classes need to fill in data loading.
+ *
+ * @license GPL-2.0+
+ * @author Stas Malyshev
  */
 abstract class BaseUnitStorage implements UnitStorage {
 
diff --git a/extensions/Wikibase/lib/includes/Units/CSVUnitStorage.php 
b/extensions/Wikibase/lib/includes/Units/CSVUnitStorage.php
index e25eb0c..7df3bf3 100644
--- a/extensions/Wikibase/lib/includes/Units/CSVUnitStorage.php
+++ b/extensions/Wikibase/lib/includes/Units/CSVUnitStorage.php
@@ -7,6 +7,9 @@
  * The units are stored as:
  *       Qsource,factor,QstandardUnit
  * E.g.: Q130964,4.19,Q25269
+ *
+ * @license GPL-2.0+
+ * @author Stas Malyshev
  */
 class CSVUnitStorage extends BaseUnitStorage {
 
diff --git a/extensions/Wikibase/lib/includes/Units/JsonUnitStorage.php 
b/extensions/Wikibase/lib/includes/Units/JsonUnitStorage.php
index 97688f9..e4dfa89 100644
--- a/extensions/Wikibase/lib/includes/Units/JsonUnitStorage.php
+++ b/extensions/Wikibase/lib/includes/Units/JsonUnitStorage.php
@@ -16,6 +16,9 @@
  * Primary units must have factor of 1.
  * Another acceptable format is:
  * "Q103510": { "factor": "100000", "unit": "Q44395" },
+ *
+ * @license GPL-2.0+
+ * @author Stas Malyshev
  */
 class JsonUnitStorage extends BaseUnitStorage {
 
diff --git a/extensions/Wikibase/lib/includes/Units/UnitConverter.php 
b/extensions/Wikibase/lib/includes/Units/UnitConverter.php
index 6b20c35..c2aae8c 100644
--- a/extensions/Wikibase/lib/includes/Units/UnitConverter.php
+++ b/extensions/Wikibase/lib/includes/Units/UnitConverter.php
@@ -8,6 +8,9 @@
 
 /**
  * Convert quantities to other units.
+ *
+ * @license GPL-2.0+
+ * @author Stas Malyshev
  */
 class UnitConverter {
 
diff --git a/extensions/Wikibase/lib/includes/Units/UnitStorage.php 
b/extensions/Wikibase/lib/includes/Units/UnitStorage.php
index 4a1a752..9ec1168 100644
--- a/extensions/Wikibase/lib/includes/Units/UnitStorage.php
+++ b/extensions/Wikibase/lib/includes/Units/UnitStorage.php
@@ -4,6 +4,9 @@
 
 /**
  * Storage interface for Unit conversion information.
+ *
+ * @license GPL-2.0+
+ * @author Stas Malyshev
  */
 interface UnitStorage {
 
diff --git a/extensions/Wikibase/phpcs.xml b/extensions/Wikibase/phpcs.xml
index 9b40f57..aa154d3 100644
--- a/extensions/Wikibase/phpcs.xml
+++ b/extensions/Wikibase/phpcs.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <ruleset name="Wikibase">
-       <rule ref="vendor/wikibase/wikibase-codesniffer/Wikibase"/>
+       <rule ref="./vendor/wikibase/wikibase-codesniffer/Wikibase"/>
 
        <!-- Exceptions -->
 
@@ -37,9 +37,6 @@
                
<exclude-pattern>(RdfWriterFactory|UrlSchemeValidators)</exclude-pattern>
        </rule>
        <rule ref="Generic.Metrics.NestingLevel" />
-
-       <!-- TODO: Move to the Wikibase CodeSniffer library. -->
-       <rule ref="Squiz.WhiteSpace.CastSpacing" />
 
        <file>.</file>
        <exclude-pattern type="relative">^extensions/</exclude-pattern>
diff --git a/extensions/Wikibase/repo/i18n/ais.json 
b/extensions/Wikibase/repo/i18n/ais.json
index 4b8d36b..2ad717b 100644
--- a/extensions/Wikibase/repo/i18n/ais.json
+++ b/extensions/Wikibase/repo/i18n/ais.json
@@ -15,6 +15,7 @@
        "wikibase-cancel": "palawpes",
        "wikibase-add": "cunusen",
        "wikibase-addqualifier": "micunus nikayadah a sulit",
+       "wikibase-addreference": "micunus miazih tu tatenga’ay nasulitan",
        "wikibase-remove-inprogress": "misipu henay ayza",
        "wikibase-entitytermsview-entitytermsforlanguagelistview-toggler": 
"yadah zuma a kamu",
        
"wikibase-entitytermsview-entitytermsforlanguagelistview-configure-link-label": 
"setin",
@@ -75,6 +76,7 @@
        "wikibase-statementview-rank-normal": "habutud kasaselel",
        "wikibase-statementview-rank-deprecated": "caay matatungus kasaselel",
        "wikibase-snakview-unsupportedsnaktype": "kakimad-kamu nikalahizaan 
\"$1\". caay henay midama milisimet tina kakimad-kamu nikalahizaan.",
+       "wikibase-snakview-choosesnaktype": "kapipili’ sulyang kakuniza.",
        "wikibase-snakview-variation-datavaluetypemismatch": "kya sulyang caay 
matatungus susin pasaheci.",
        "wikibase-snakview-variation-datavaluetypemismatch-details": 
"talibahalay susin kakuniza \"$2\" atu sulyang kakuniza \"$1\" sasula’cus.",
        "wikibase-snakview-variation-nonewvaluefordeletedproperty": "amana 
misaheci baluhay sulyang tu masipuay tu susin.",
@@ -142,6 +144,7 @@
        "wikibase-setlabeldescriptionaliases-label-label": "aazihen paya:",
        "wikibase-setlabeldescriptionaliases-description-label": "sapuelac:",
        "wikibase-setlabeldescriptionaliases-aliases-label": "pacimilay a 
ngangan:",
+       "wikibase-setlabeldescriptionaliases-submit": "setin aazihen a paya, 
sapuelac atu pacimilay ngangan",
        "special-setsitelink": "misetin calay-kakacawan(wangcan) masasiket",
        "wikibase-setsitelink-introfull": "misetin kisu [[$1]] a 
calay-kakacawan(wangcan) masasiket $2.",
        "wikibase-setsitelink-intro-badges": "u zuma sa,kapah kisu tu tina 
calay-kakacawan(wangcan) masasiket setin isasa’ay kalu kunpay.",
@@ -171,6 +174,7 @@
        "wikibase-tokencheck-mustposttoken": "pisaungay dada’ POST milunguc 
miteka mikawaway-kalumyiti.",
        "special-dispatchstats": "misumad patiyak sausi",
        "wikibase-dispatchstats-no-stats": "ayzasa inayi’ ngaayay a sausi 
kalunasulitan.",
+       "wikibase-dispatchstats-changes": "misumad nasulitan nazipa’an sausi 
cesyun",
        "wikibase-dispatchstats-stats": "patiyak sausi a cesyun",
        "wikibase-dispatchstats-change-id": "ID",
        "wikibase-dispatchstats-change-timestamp": "nisulitan nu takukian",
diff --git a/extensions/Wikibase/repo/i18n/ur.json 
b/extensions/Wikibase/repo/i18n/ur.json
index 13e89d6..314f83e 100644
--- a/extensions/Wikibase/repo/i18n/ur.json
+++ b/extensions/Wikibase/repo/i18n/ur.json
@@ -86,6 +86,10 @@
        "wikibase-itemdisambiguation-lookup-language": "زبان کا کوڈ:",
        "wikibase-itemdisambiguation-lookup-label": "لیبل:",
        "wikibase-itemdisambiguation-submit": "تلاش",
+       "special-newproperty": "نئی خاصیت بنائیں",
+       "wikibase-newproperty-fieldset": "نئی خاصیت بنائیں",
+       "special-newitem": "نیا آئٹم بنائیں",
+       "wikibase-newitem-fieldset": "نیا آئٹم بنائیں",
        "wikibase-newentity-language": "زبان:",
        "wikibase-newentity-label": "لیبل:",
        "wikibase-newentity-description": "وضاحت:",
diff --git a/extensions/Wikibase/repo/includes/Actions/EditEntityAction.php 
b/extensions/Wikibase/repo/includes/Actions/EditEntityAction.php
index 9950f33..ca89333 100644
--- a/extensions/Wikibase/repo/includes/Actions/EditEntityAction.php
+++ b/extensions/Wikibase/repo/includes/Actions/EditEntityAction.php
@@ -2,8 +2,6 @@
 
 namespace Wikibase;
 
-use Diff\Comparer\ComparableComparer;
-use Diff\Differ\OrderedListDiffer;
 use Html;
 use IContextSource;
 use Linker;
@@ -16,16 +14,8 @@
 use Page;
 use Revision;
 use Status;
-use ValueFormatters\FormatterOptions;
-use ValueFormatters\ValueFormatter;
 use WebRequest;
-use Wikibase\DataModel\Services\Lookup\EntityRetrievingTermLookup;
-use Wikibase\Lib\SnakFormatter;
-use Wikibase\Lib\Store\LanguageFallbackLabelDescriptionLookupFactory;
 use Wikibase\Repo\Content\EntityContentDiff;
-use Wikibase\Repo\Diff\ClaimDiffer;
-use Wikibase\Repo\Diff\ClaimDifferenceVisualizer;
-use Wikibase\Repo\Diff\DifferencesSnakVisualizer;
 use Wikibase\Repo\Diff\BasicEntityDiffVisualizer;
 use Wikibase\Repo\Diff\DispatchingEntityDiffVisualizer;
 use Wikibase\Repo\WikibaseRepo;
diff --git a/extensions/Wikibase/repo/includes/Api/SetAliases.php 
b/extensions/Wikibase/repo/includes/Api/SetAliases.php
index 249d1d8..58d2869 100644
--- a/extensions/Wikibase/repo/includes/Api/SetAliases.php
+++ b/extensions/Wikibase/repo/includes/Api/SetAliases.php
@@ -4,12 +4,9 @@
 
 use ApiMain;
 use ApiUsageException;
-use InvalidArgumentException;
 use MediaWiki\MediaWikiServices;
-use Wikibase\Repo\Store\EntityPermissionChecker;
 use Wikibase\Summary;
 use Wikibase\Repo\ChangeOp\ChangeOp;
-use Wikibase\Repo\ChangeOp\ChangeOpAliases;
 use Wikibase\Repo\ChangeOp\ChangeOps;
 use Wikibase\Repo\ChangeOp\FingerprintChangeOpFactory;
 use Wikibase\DataModel\Entity\EntityDocument;
diff --git a/extensions/Wikibase/repo/includes/Diff/EntityContentDiffView.php 
b/extensions/Wikibase/repo/includes/Diff/EntityContentDiffView.php
index f32c04d..a8bd1ba 100644
--- a/extensions/Wikibase/repo/includes/Diff/EntityContentDiffView.php
+++ b/extensions/Wikibase/repo/includes/Diff/EntityContentDiffView.php
@@ -3,8 +3,6 @@
 namespace Wikibase\Repo\Diff;
 
 use Content;
-use Diff\Comparer\ComparableComparer;
-use Diff\Differ\OrderedListDiffer;
 use DifferenceEngine;
 use Html;
 use IContextSource;
@@ -13,13 +11,7 @@
 use MWException;
 use ParserOutput;
 use Revision;
-use ValueFormatters\FormatterOptions;
-use ValueFormatters\ValueFormatter;
-use Wikibase\DataModel\Services\EntityId\EntityIdFormatter;
-use Wikibase\DataModel\Services\Lookup\EntityRetrievingTermLookup;
 use Wikibase\EntityContent;
-use Wikibase\Lib\SnakFormatter;
-use Wikibase\Lib\Store\LanguageFallbackLabelDescriptionLookupFactory;
 use Wikibase\Repo\WikibaseRepo;
 use WikiPage;
 
diff --git 
a/extensions/Wikibase/repo/includes/Search/Elastic/WikibasePrefixSearcher.php 
b/extensions/Wikibase/repo/includes/Search/Elastic/WikibasePrefixSearcher.php
index 879a0af..fdfde3c 100644
--- 
a/extensions/Wikibase/repo/includes/Search/Elastic/WikibasePrefixSearcher.php
+++ 
b/extensions/Wikibase/repo/includes/Search/Elastic/WikibasePrefixSearcher.php
@@ -46,11 +46,11 @@
                ];
                $searchQuery = new Query();
                $searchQuery->setQuery( $this->query );
+               $resultType = $this->getSearchContext()->getResultsType();
+               $searchQuery->setSource( $resultType->getSourceFiltering() );
+               $searchQuery->setStoredFields( $resultType->getStoredFields() );
 
-               $searchQuery->setSource( 
$this->resultsType->getSourceFiltering() );
-               $searchQuery->setStoredFields( 
$this->resultsType->getStoredFields() );
-
-               $highlight = $this->searchContext->getHighlight( 
$this->resultsType );
+               $highlight = $this->searchContext->getHighlight( $resultType );
                if ( $highlight ) {
                        $searchQuery->setHighlight( $highlight );
                }
diff --git 
a/extensions/Wikibase/repo/includes/Specials/HTMLForm/HTMLTrimmedTextField.php 
b/extensions/Wikibase/repo/includes/Specials/HTMLForm/HTMLTrimmedTextField.php
index 6e56935..ca82093 100644
--- 
a/extensions/Wikibase/repo/includes/Specials/HTMLForm/HTMLTrimmedTextField.php
+++ 
b/extensions/Wikibase/repo/includes/Specials/HTMLForm/HTMLTrimmedTextField.php
@@ -6,6 +6,8 @@
 use Wikibase\StringNormalizer;
 
 /**
+ * A variant of an HTMLTextField that forcefully applies trimming.
+ *
  * @license GPL-2.0+
  */
 class HTMLTrimmedTextField extends HTMLTextField {
diff --git a/extensions/Wikibase/repo/maintenance/SPARQLClient.php 
b/extensions/Wikibase/repo/maintenance/SPARQLClient.php
index dcb8a60..44c3118 100644
--- a/extensions/Wikibase/repo/maintenance/SPARQLClient.php
+++ b/extensions/Wikibase/repo/maintenance/SPARQLClient.php
@@ -6,6 +6,9 @@
 
 /**
  * Simple SPARQL client
+ *
+ * @license GPL-2.0+
+ * @author Stas Malyshev
  */
 class SPARQLClient {
 
diff --git a/extensions/Wikibase/repo/maintenance/addUnitConversions.php 
b/extensions/Wikibase/repo/maintenance/addUnitConversions.php
index f44f834..87bd695 100644
--- a/extensions/Wikibase/repo/maintenance/addUnitConversions.php
+++ b/extensions/Wikibase/repo/maintenance/addUnitConversions.php
@@ -23,7 +23,9 @@
 
 /**
  * Generate dump-like RDF for newly added units without running full dump.
- * @package Wikibase
+ *
+ * @license GPL-2.0+
+ * @author Stas Malyshev
  */
 class AddUnitConversions extends Maintenance {
 
diff --git a/extensions/Wikibase/repo/maintenance/searchEntities.php 
b/extensions/Wikibase/repo/maintenance/searchEntities.php
index 8d1f29c..86def17 100644
--- a/extensions/Wikibase/repo/maintenance/searchEntities.php
+++ b/extensions/Wikibase/repo/maintenance/searchEntities.php
@@ -21,8 +21,12 @@
  *
  * The script accepts search requests from stdin, line by line,
  * and outputs results, preserving order.
+ *
+ * @license GPL-2.0+
+ * @author Stas Malyshev
  */
 class SearchEntities extends Maintenance {
+
        /**
         * @var WikibaseRepo
         */
@@ -44,10 +48,10 @@
                $this->addOption( 'display-language', "Language for the 
display.", false, true );
                $this->addOption( 'strict', "Should we use strict language 
match?", false, true );
                $this->addOption( 'engine', "Which engine to use - e.g. sql, 
elastic.", false, true );
-               $this->addOption( 'fork', 'Fork multiple processes to run 
queries from.' .
-                                         'defaults to false.', false, true );
-               $this->addOption( 'options', 'A JSON object mapping from global 
variable to ' .
-                                            'its test value', false, true );
+               $this->addOption( 'fork', 'Fork multiple processes to run 
queries from. Defaults to false.',
+                       false, true );
+               $this->addOption( 'options', 'A JSON object mapping from global 
variable to its test value',
+                       false, true );
        }
 
        /**
@@ -173,7 +177,6 @@
                        default:
                                throw new \MWException( "Unknown engine: 
$engine, valid values: sql, elastic." );
                }
-
        }
 
 }
diff --git a/extensions/Wikibase/repo/maintenance/updateUnits.php 
b/extensions/Wikibase/repo/maintenance/updateUnits.php
index ae9e117..e15d2c9 100644
--- a/extensions/Wikibase/repo/maintenance/updateUnits.php
+++ b/extensions/Wikibase/repo/maintenance/updateUnits.php
@@ -23,7 +23,9 @@
  * mwscript 
extensions/WikidataBuildResources/extensions/Wikibase/repo/maintenance/updateUnits.php
  *   --wiki wikidatawiki  --base-unit-types Q223662,Q208469 --base-uri 
http://www.wikidata.org/entity/
  *   --unit-class Q1978718 > unitConversion.json
- * @package Wikibase
+ *
+ * @license GPL-2.0+
+ * @author Stas Malyshev
  */
 class UpdateUnits extends Maintenance {
 
diff --git 
a/extensions/Wikibase/repo/tests/phpunit/includes/Diff/EntityDiffVisualizerFactoryTest.php
 
b/extensions/Wikibase/repo/tests/phpunit/includes/Diff/EntityDiffVisualizerFactoryTest.php
index da9e044..d27afc0 100644
--- 
a/extensions/Wikibase/repo/tests/phpunit/includes/Diff/EntityDiffVisualizerFactoryTest.php
+++ 
b/extensions/Wikibase/repo/tests/phpunit/includes/Diff/EntityDiffVisualizerFactoryTest.php
@@ -51,7 +51,6 @@
                ] );
 
                $this->assertSame( $dummyVisualizer, 
$factory->newEntityDiffVisualizer( 'item' ) );
-
        }
 
        public function 
testGivenInstantiatorDoesReturnDiffVisualizer_factoryThrowsException() {
diff --git a/extensions/Wikibase/repo/tests/phpunit/includes/NewItem.php 
b/extensions/Wikibase/repo/tests/phpunit/includes/NewItem.php
index 5cfbcf8..b2895d6 100644
--- a/extensions/Wikibase/repo/tests/phpunit/includes/NewItem.php
+++ b/extensions/Wikibase/repo/tests/phpunit/includes/NewItem.php
@@ -10,6 +10,8 @@
 
 /**
  * Immutable Wikibase entity builder.
+ *
+ * @license GPL-2.0+
  */
 class NewItem {
 
diff --git a/extensions/Wikibase/repo/tests/phpunit/includes/NewStatement.php 
b/extensions/Wikibase/repo/tests/phpunit/includes/NewStatement.php
index 32b35f7..1d5ab56 100644
--- a/extensions/Wikibase/repo/tests/phpunit/includes/NewStatement.php
+++ b/extensions/Wikibase/repo/tests/phpunit/includes/NewStatement.php
@@ -15,6 +15,8 @@
 use Wikibase\DataModel\Statement\Statement;
 
 /**
+ * Immutable Wikibase statement builder.
+ *
  * @license GPL-2.0+
  */
 class NewStatement {
diff --git 
a/extensions/Wikibase/repo/tests/phpunit/maintenance/AddUnitsTest.php 
b/extensions/Wikibase/repo/tests/phpunit/maintenance/AddUnitsTest.php
index 1eb8bca..6f1d217 100644
--- a/extensions/Wikibase/repo/tests/phpunit/maintenance/AddUnitsTest.php
+++ b/extensions/Wikibase/repo/tests/phpunit/maintenance/AddUnitsTest.php
@@ -10,11 +10,13 @@
 use Wikibase\Repo\Tests\Rdf\NTriplesRdfTestHelper;
 use Wikibase\Repo\Tests\Rdf\RdfBuilderTestData;
 
-require_once __DIR__ . '/MockAddUnits.php';
-
 /**
  * @covers Wikibase\AddUnitConversions
+ *
  * @group Wikibase
+ *
+ * @license GPL-2.0+
+ * @author Stas Malyshev
  */
 class AddUnitsTest extends MediaWikiLangTestCase {
 
diff --git 
a/extensions/Wikibase/repo/tests/phpunit/maintenance/UpdateUnitsTest.php 
b/extensions/Wikibase/repo/tests/phpunit/maintenance/UpdateUnitsTest.php
index 1da25e5..13f0496 100644
--- a/extensions/Wikibase/repo/tests/phpunit/maintenance/UpdateUnitsTest.php
+++ b/extensions/Wikibase/repo/tests/phpunit/maintenance/UpdateUnitsTest.php
@@ -7,7 +7,11 @@
 
 /**
  * @covers Wikibase\UpdateUnits
+ *
  * @group Wikibase
+ *
+ * @license GPL-2.0+
+ * @author Stas Malyshev
  */
 class UpdateUnitsTest extends MediaWikiLangTestCase {
 
diff --git a/extensions/Wikibase/tests/phan/config.php 
b/extensions/Wikibase/tests/phan/config.php
index f559871..18828d6 100644
--- a/extensions/Wikibase/tests/phan/config.php
+++ b/extensions/Wikibase/tests/phan/config.php
@@ -1,6 +1,5 @@
 <?php
 
-use \Phan\Config;
 
 // If xdebug is enabled, we need to increase the nesting level for phan
 ini_set( 'xdebug.max_nesting_level', 1000 );
diff --git a/vendor/composer/autoload_classmap.php 
b/vendor/composer/autoload_classmap.php
index a6008b9..15b608d 100644
--- a/vendor/composer/autoload_classmap.php
+++ b/vendor/composer/autoload_classmap.php
@@ -293,6 +293,7 @@
     
'WikibaseQuality\\ConstraintReport\\ConstraintCheck\\Helper\\ValueCountCheckerHelper'
 => $baseDir . 
'/extensions/Constraints/includes/ConstraintCheck/Helper/ValueCountCheckerHelper.php',
     'WikibaseQuality\\ConstraintReport\\ConstraintCheck\\ItemIdSnakValue' => 
$baseDir . 
'/extensions/Constraints/includes/ConstraintCheck/ItemIdSnakValue.php',
     'WikibaseQuality\\ConstraintReport\\ConstraintCheck\\Result\\CheckResult' 
=> $baseDir . 
'/extensions/Constraints/includes/ConstraintCheck/Result/CheckResult.php',
+    'WikibaseQuality\\ConstraintReport\\ConstraintCheck\\Result\\NullResult' 
=> $baseDir . 
'/extensions/Constraints/includes/ConstraintCheck/Result/NullResult.php',
     'WikibaseQuality\\ConstraintReport\\ConstraintLookup' => $baseDir . 
'/extensions/Constraints/includes/ConstraintLookup.php',
     'WikibaseQuality\\ConstraintReport\\ConstraintParameterRenderer' => 
$baseDir . '/extensions/Constraints/includes/ConstraintParameterRenderer.php',
     'WikibaseQuality\\ConstraintReport\\ConstraintReportFactory' => $baseDir . 
'/extensions/Constraints/includes/ConstraintReportFactory.php',
@@ -1763,6 +1764,7 @@
     'Wikibase\\TermIndex' => $baseDir . 
'/extensions/Wikibase/lib/includes/Store/TermIndex.php',
     'Wikibase\\TermIndexEntry' => $baseDir . 
'/extensions/Wikibase/lib/includes/TermIndexEntry.php',
     'Wikibase\\TermSearchKeyBuilder' => $baseDir . 
'/extensions/Wikibase/repo/includes/Store/Sql/TermSearchKeyBuilder.php',
+    'Wikibase\\Test\\MockAddUnits' => $baseDir . 
'/extensions/Wikibase/repo/tests/phpunit/maintenance/MockAddUnits.php',
     'Wikibase\\Test\\MockClientStore' => $baseDir . 
'/extensions/Wikibase/client/tests/phpunit/MockClientStore.php',
     'Wikibase\\UpdateUnits' => $baseDir . 
'/extensions/Wikibase/repo/maintenance/updateUnits.php',
     'Wikibase\\ViewEntityAction' => $baseDir . 
'/extensions/Wikibase/repo/includes/Actions/ViewEntityAction.php',
diff --git a/vendor/composer/autoload_static.php 
b/vendor/composer/autoload_static.php
index af45f86..1f75640 100644
--- a/vendor/composer/autoload_static.php
+++ b/vendor/composer/autoload_static.php
@@ -597,6 +597,7 @@
         
'WikibaseQuality\\ConstraintReport\\ConstraintCheck\\Helper\\ValueCountCheckerHelper'
 => __DIR__ . '/../..' . 
'/extensions/Constraints/includes/ConstraintCheck/Helper/ValueCountCheckerHelper.php',
         'WikibaseQuality\\ConstraintReport\\ConstraintCheck\\ItemIdSnakValue' 
=> __DIR__ . '/../..' . 
'/extensions/Constraints/includes/ConstraintCheck/ItemIdSnakValue.php',
         
'WikibaseQuality\\ConstraintReport\\ConstraintCheck\\Result\\CheckResult' => 
__DIR__ . '/../..' . 
'/extensions/Constraints/includes/ConstraintCheck/Result/CheckResult.php',
+        
'WikibaseQuality\\ConstraintReport\\ConstraintCheck\\Result\\NullResult' => 
__DIR__ . '/../..' . 
'/extensions/Constraints/includes/ConstraintCheck/Result/NullResult.php',
         'WikibaseQuality\\ConstraintReport\\ConstraintLookup' => __DIR__ . 
'/../..' . '/extensions/Constraints/includes/ConstraintLookup.php',
         'WikibaseQuality\\ConstraintReport\\ConstraintParameterRenderer' => 
__DIR__ . '/../..' . 
'/extensions/Constraints/includes/ConstraintParameterRenderer.php',
         'WikibaseQuality\\ConstraintReport\\ConstraintReportFactory' => 
__DIR__ . '/../..' . 
'/extensions/Constraints/includes/ConstraintReportFactory.php',
@@ -2067,6 +2068,7 @@
         'Wikibase\\TermIndex' => __DIR__ . '/../..' . 
'/extensions/Wikibase/lib/includes/Store/TermIndex.php',
         'Wikibase\\TermIndexEntry' => __DIR__ . '/../..' . 
'/extensions/Wikibase/lib/includes/TermIndexEntry.php',
         'Wikibase\\TermSearchKeyBuilder' => __DIR__ . '/../..' . 
'/extensions/Wikibase/repo/includes/Store/Sql/TermSearchKeyBuilder.php',
+        'Wikibase\\Test\\MockAddUnits' => __DIR__ . '/../..' . 
'/extensions/Wikibase/repo/tests/phpunit/maintenance/MockAddUnits.php',
         'Wikibase\\Test\\MockClientStore' => __DIR__ . '/../..' . 
'/extensions/Wikibase/client/tests/phpunit/MockClientStore.php',
         'Wikibase\\UpdateUnits' => __DIR__ . '/../..' . 
'/extensions/Wikibase/repo/maintenance/updateUnits.php',
         'Wikibase\\ViewEntityAction' => __DIR__ . '/../..' . 
'/extensions/Wikibase/repo/includes/Actions/ViewEntityAction.php',
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index 0901dc7..249c6d3 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -125,12 +125,12 @@
         "source": {
             "type": "git",
             "url": 
"https://github.com/wikimedia/mediawiki-extensions-ArticlePlaceholder.git";,
-            "reference": "b356d178444f899069e2f5f647c7f483d7b556b3"
+            "reference": "bab4ba945646b81b510fc904f43b0d3d23469683"
         },
         "dist": {
             "type": "zip",
-            "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-ArticlePlaceholder/zipball/b356d178444f899069e2f5f647c7f483d7b556b3";,
-            "reference": "b356d178444f899069e2f5f647c7f483d7b556b3",
+            "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-ArticlePlaceholder/zipball/bab4ba945646b81b510fc904f43b0d3d23469683";,
+            "reference": "bab4ba945646b81b510fc904f43b0d3d23469683",
             "shasum": ""
         },
         "require": {
@@ -141,7 +141,7 @@
             "jakub-onderka/php-parallel-lint": "0.9.2",
             "wikibase/wikibase-codesniffer": "^0.2.0"
         },
-        "time": "2017-10-15 17:38:18",
+        "time": "2017-10-20 07:57:50",
         "type": "mediawiki-extension",
         "installation-source": "dist",
         "autoload": {
@@ -1389,12 +1389,12 @@
         "source": {
             "type": "git",
             "url": 
"https://github.com/wikimedia/mediawiki-extensions-Wikibase.git";,
-            "reference": "3d3ff504b2e9f68a212739b0904e90c5f6e9e48c"
+            "reference": "e2397f95e4a71965f1bc60aa4a1e6d1e584819e4"
         },
         "dist": {
             "type": "zip",
-            "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/3d3ff504b2e9f68a212739b0904e90c5f6e9e48c";,
-            "reference": "3d3ff504b2e9f68a212739b0904e90c5f6e9e48c",
+            "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/e2397f95e4a71965f1bc60aa4a1e6d1e584819e4";,
+            "reference": "e2397f95e4a71965f1bc60aa4a1e6d1e584819e4",
             "shasum": ""
         },
         "require": {
@@ -1427,9 +1427,9 @@
             "jakub-onderka/php-console-highlighter": "0.3.2",
             "jakub-onderka/php-parallel-lint": ">=0.3 <0.10",
             "mediawiki/minus-x": "0.1.0",
-            "wikibase/wikibase-codesniffer": "^0.1.0"
+            "wikibase/wikibase-codesniffer": "^0.2.0"
         },
-        "time": "2017-10-18 20:54:57",
+        "time": "2017-10-20 09:32:04",
         "type": "mediawiki-extension",
         "installation-source": "dist",
         "autoload": {
@@ -1441,6 +1441,7 @@
                 "lib/maintenance/",
                 "repo/includes/",
                 "repo/maintenance/",
+                "repo/tests/phpunit/maintenance/MockAddUnits.php",
                 "repo/Wikibase.hooks.php"
             ],
             "psr-4": {
@@ -1774,7 +1775,7 @@
         "source": {
             "type": "git",
             "url": 
"https://gerrit.wikimedia.org/r/mediawiki/extensions/WikibaseQualityConstraints";,
-            "reference": "ae7f775d6522c67efe47c54b480c4baeb494f367"
+            "reference": "0b42b96d328b7a2d7abcd168702b1d4e51b9794e"
         },
         "require": {
             "php": ">=5.5.9",
@@ -1790,7 +1791,7 @@
             "satooshi/php-coveralls": "master-dev",
             "wikibase/wikibase-codesniffer": "^0.2.0"
         },
-        "time": "2017-10-19 09:01:07",
+        "time": "2017-10-19 21:29:54",
         "type": "mediawiki-extension",
         "installation-source": "source",
         "autoload": {

-- 
To view, visit https://gerrit.wikimedia.org/r/385341
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I0c98b6dbdbabf5114f71f872cb03d190448fe079
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikidata
Gerrit-Branch: master
Gerrit-Owner: WikidataBuilder <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to