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
