jenkins-bot has submitted this change and it was merged.

Change subject: Use one fallback chain and usage accumulator in lua code
......................................................................


Use one fallback chain and usage accumulator in lua code

and cleaned up constructor of EntityAccessor

Change-Id: I1c05f6ad54690cb16304804a6cf495345f6f3a50
---
M client/includes/scribunto/EntityAccessor.php
M client/includes/scribunto/Scribunto_LuaWikibaseLibrary.php
M client/tests/phpunit/includes/scribunto/EntityAccessorTest.php
3 files changed, 74 insertions(+), 40 deletions(-)

Approvals:
  Hoo man: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/client/includes/scribunto/EntityAccessor.php 
b/client/includes/scribunto/EntityAccessor.php
index 976c373..f57d8d6 100644
--- a/client/includes/scribunto/EntityAccessor.php
+++ b/client/includes/scribunto/EntityAccessor.php
@@ -7,6 +7,7 @@
 use Wikibase\DataModel\Entity\EntityDocument;
 use Wikibase\DataModel\Entity\EntityIdParser;
 use Wikibase\DataModel\Entity\PropertyDataTypeLookup;
+use Wikibase\LanguageFallbackChain;
 use Wikibase\LanguageFallbackChainFactory;
 use Wikibase\Lib\Serializers\SerializationOptions;
 use Wikibase\Lib\Serializers\Serializer;
@@ -24,6 +25,7 @@
  * @author Jens Ohlig < [email protected] >
  */
 class EntityAccessor {
+
        /**
         * @var EntityIdParser
         */
@@ -45,14 +47,14 @@
        private $serializationOptions = null;
 
        /**
-        * @var LanguageFallbackChainFactory
+        * @var PropertyDataTypeLookup
         */
-       private $fallbackChainFactory;
+       private $dataTypeLookup;
 
        /**
-        * @var string[]
+        * @var LanguageFallbackChain
         */
-       private $languageCodes;
+       private $fallbackChain;
 
        /**
         * @var Language
@@ -60,35 +62,35 @@
        private $language;
 
        /**
-        * @var PropertyDataTypeLookup
+        * @var string[]
         */
-       private $dataTypeLookup;
+       private $languageCodes;
 
        /**
         * @param EntityIdParser $entityIdParser
         * @param EntityLookup $entityLookup
         * @param UsageAccumulator $usageAccumulator
-        * @param LanguageFallbackChainFactory $fallbackChainFactory
-        * @param string[] $languageCodes
-        * @param Language $language
         * @param PropertyDataTypeLookup $dataTypeLookup
+        * @param LanguageFallbackChain $fallbackChain
+        * @param Language $language
+        * @param string[] $languageCodes
         */
        public function __construct(
                EntityIdParser $entityIdParser,
                EntityLookup $entityLookup,
                UsageAccumulator $usageAccumulator,
-               LanguageFallbackChainFactory $fallbackChainFactory,
-               array $languageCodes,
+               PropertyDataTypeLookup $dataTypeLookup,
+               LanguageFallbackChain $fallbackChain,
                Language $language,
-               PropertyDataTypeLookup $dataTypeLookup
+               array $languageCodes
        ) {
                $this->entityIdParser = $entityIdParser;
                $this->entityLookup = $entityLookup;
                $this->usageAccumulator = $usageAccumulator;
-               $this->fallbackChainFactory = $fallbackChainFactory;
-               $this->languageCodes = $languageCodes;
-               $this->language = $language;
                $this->dataTypeLookup = $dataTypeLookup;
+               $this->fallbackChain = $fallbackChain;
+               $this->language = $language;
+               $this->languageCodes = $languageCodes;
        }
 
        /**
@@ -194,12 +196,7 @@
                // See mw.wikibase.lua. This is the only way to inject values 
into mw.wikibase.label( ),
                // so any customized Lua modules can access labels of another 
entity written in another variant,
                // unless we give them the ability to getEntity() any entity by 
specifying its ID, not just self.
-               $chain = $this->fallbackChainFactory->newFromLanguage(
-                       $this->language,
-                       LanguageFallbackChainFactory::FALLBACK_SELF | 
LanguageFallbackChainFactory::FALLBACK_VARIANTS
-               );
-
-               $languages = $this->languageCodes + array( 
$this->language->getCode() => $chain );
+               $languages = $this->languageCodes + array( 
$this->language->getCode() => $this->fallbackChain );
 
                // SerializationOptions accepts mixed types of keys happily.
                $options->setLanguages( $languages );
@@ -207,4 +204,4 @@
                return $options;
        }
 
-}
\ No newline at end of file
+}
diff --git a/client/includes/scribunto/Scribunto_LuaWikibaseLibrary.php 
b/client/includes/scribunto/Scribunto_LuaWikibaseLibrary.php
index 3727cd8..bd94e71 100644
--- a/client/includes/scribunto/Scribunto_LuaWikibaseLibrary.php
+++ b/client/includes/scribunto/Scribunto_LuaWikibaseLibrary.php
@@ -5,6 +5,7 @@
 use Wikibase\Client\Usage\ParserOutputUsageAccumulator;
 use Wikibase\Client\WikibaseClient;
 use Wikibase\DataModel\Entity\EntityIdParsingException;
+use Wikibase\LanguageFallbackChain;
 use Wikibase\LanguageFallbackChainFactory;
 use Wikibase\Lib\Store\EntityRetrievingTermLookup;
 use Wikibase\Lib\Store\LanguageFallbackLabelLookup;
@@ -30,6 +31,16 @@
         * @var EntityAccessor
         */
        private $entityAccessor;
+
+       /**
+        * @var ParserOutputUsageAccumulator|null
+        */
+       private $usageAccumulator = null;
+
+       /**
+        * @var LanguageFallbackChain|null
+        */
+       private $fallbackChain = null;
 
        private function getLuaBindings() {
                if ( !$this->luaBindings ) {
@@ -57,32 +68,24 @@
        private function newEntityAccessor() {
                $wikibaseClient = WikibaseClient::getDefaultInstance();
 
-               $entityLookup = $wikibaseClient->getStore()->getEntityLookup();
-
                return new EntityAccessor(
                        $wikibaseClient->getEntityIdParser(),
-                       $entityLookup,
-                       new ParserOutputUsageAccumulator( 
$this->getParser()->getOutput() ),
-                       $wikibaseClient->getLanguageFallbackChainFactory(),
-                       Utils::getLanguageCodes(),
+                       $wikibaseClient->getStore()->getEntityLookup(),
+                       $this->getUsageAccumulator(),
+                       $wikibaseClient->getPropertyDataTypeLookup(),
+                       $this->getLanguageFallbackChain(),
                        $this->getLanguage(),
-                       $wikibaseClient->getPropertyDataTypeLookup()
+                       Utils::getLanguageCodes()
                );
        }
 
        private function newLuaBindings() {
                $wikibaseClient = WikibaseClient::getDefaultInstance();
-
                $entityLookup = $wikibaseClient->getStore()->getEntityLookup();
-
-               $fallbackChain = 
$wikibaseClient->getLanguageFallbackChainFactory()->newFromLanguage(
-                       $this->getLanguage(),
-                       LanguageFallbackChainFactory::FALLBACK_SELF | 
LanguageFallbackChainFactory::FALLBACK_VARIANTS
-               );
 
                $labelLookup = new LanguageFallbackLabelLookup(
                        new EntityRetrievingTermLookup( $entityLookup ),
-                       $fallbackChain
+                       $this->getLanguageFallbackChain()
                );
 
                return new WikibaseLuaBindings(
@@ -91,12 +94,40 @@
                        $wikibaseClient->getStore()->getSiteLinkLookup(),
                        $wikibaseClient->getSettings(),
                        $labelLookup,
-                       new ParserOutputUsageAccumulator( 
$this->getParser()->getOutput() ),
+                       $this->getUsageAccumulator(),
                        $wikibaseClient->getSettings()->getSetting( 
'siteGlobalID' )
                );
        }
 
        /**
+        * @return LanguageFallbackChain
+        */
+       private function getLanguageFallbackChain() {
+               if ( $this->fallbackChain === null ) {
+                       $fallbackChainFactory = 
WikibaseClient::getDefaultInstance()->getLanguageFallbackChainFactory();
+
+                       $this->fallbackChain = 
$fallbackChainFactory->newFromLanguage(
+                               $this->getLanguage(),
+                               LanguageFallbackChainFactory::FALLBACK_SELF | 
LanguageFallbackChainFactory::FALLBACK_VARIANTS
+                       );
+               }
+
+               return $this->fallbackChain;
+       }
+
+       /**
+        * @return ParserOutputUsageAccumulator
+        */
+       private function getUsageAccumulator() {
+               if ( $this->usageAccumulator === null ) {
+                       $parserOutput = $this->getParser()->getOutput();
+                       $this->usageAccumulator = new 
ParserOutputUsageAccumulator( $parserOutput );
+               }
+
+               return $this->usageAccumulator;
+       }
+
+       /**
         * Register mw.wikibase.lua library
         *
         * @since 0.4
diff --git a/client/tests/phpunit/includes/scribunto/EntityAccessorTest.php 
b/client/tests/phpunit/includes/scribunto/EntityAccessorTest.php
index f8f9e23..fa057fa 100644
--- a/client/tests/phpunit/includes/scribunto/EntityAccessorTest.php
+++ b/client/tests/phpunit/includes/scribunto/EntityAccessorTest.php
@@ -11,6 +11,7 @@
 use Wikibase\DataModel\Entity\EntityId;
 use Wikibase\DataModel\Entity\Item;
 use Wikibase\DataModel\Entity\ItemId;
+use Wikibase\LanguageFallbackChain;
 use Wikibase\LanguageFallbackChainFactory;
 use Wikibase\Lib\Store\EntityLookup;
 use Wikibase\Test\MockRepository;
@@ -47,14 +48,19 @@
                        ->method( 'getDataTypeIdForProperty' )
                        ->will( $this->returnValue( 'structured-cat' ) );
 
+               $fallbackChainFactory = new LanguageFallbackChainFactory();
+               $fallbackChain = $fallbackChainFactory->newFromLanguage( 
$language,
+                       LanguageFallbackChainFactory::FALLBACK_SELF | 
LanguageFallbackChainFactory::FALLBACK_VARIANTS
+               );
+
                return new EntityAccessor(
                        new BasicEntityIdParser(),
                        $entityLookup ?: new MockRepository(),
                        $usageAccumulator ? $usageAccumulator : new 
HashUsageAccumulator(),
-                       new LanguageFallbackChainFactory(),
-                       array( 'de', 'en', 'es', 'ja' ),
+                       $propertyDataTypeLookup,
+                       $fallbackChain,
                        $language,
-                       $propertyDataTypeLookup
+                       array( 'de', 'en', 'es', 'ja' )
                );
        }
 

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I1c05f6ad54690cb16304804a6cf495345f6f3a50
Gerrit-PatchSet: 2
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Aude <[email protected]>
Gerrit-Reviewer: Hoo man <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

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

Reply via email to