Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
2237 / 2237
100.00% covered (success)
100.00%
544 / 544
CRAP
100.00% covered (success)
100.00%
1 / 1
HookRunner
100.00% covered (success)
100.00%
2237 / 2237
100.00% covered (success)
100.00%
544 / 544
544
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 onAbortAutoblock
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAbortDiffCache
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onActionBeforeFormDisplay
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onActionModifyFormFields
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAfterBuildFeedLinks
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAfterFinalPageOutput
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onAfterImportPage
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAfterParserFetchFileAndTitle
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAlternateEdit
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAlternateEditPreview
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAlternateUserMailer
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAncientPagesQuery
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onApiBeforeMain
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticleConfirmDelete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticleContentOnDiff
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticleDelete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticleDeleteAfterSuccess
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticleDeleteComplete
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onArticleEditUpdateNewTalk
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticleFromTitle
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticleMergeComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticlePageDataAfter
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticlePageDataBefore
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticleParserOptions
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticlePrepareTextForEdit
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticleProtect
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticleProtectComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticlePurge
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticleRevisionViewCustom
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticleRevisionVisibilitySet
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticleShowPatrolFooter
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticleUndelete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticleUpdateBeforeRedirect
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticleViewFooter
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticleViewHeader
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticleViewRedirect
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticle__MissingArticleConditions
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAuthChangeFormFields
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAuthManagerFilterProviders
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onAuthManagerLoginAuthenticateAudit
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAuthManagerVerifyAuthentication
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAuthPreserveQueryParams
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
 onAuthenticationAttemptThrottled
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
 onAutopromoteCondition
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onBacklinkCacheGetConditions
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onBacklinkCacheGetPrefix
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onBadImage
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onBeforeDisplayNoArticleText
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onBeforeInitialize
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onBeforePageDisplay
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onBeforePageRedirect
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onBeforeParserFetchFileAndTitle
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onBeforeParserFetchTemplateRevisionRecord
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onBeforeRevertedTagUpdate
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
1
 onBeforeWelcomeCreation
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onBitmapHandlerCheckImageArea
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onBitmapHandlerTransform
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onBlockIp
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onBlockIpComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onBookInformation
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onCanonicalNamespaces
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onCategoryAfterPageAdded
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onCategoryAfterPageRemoved
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onCategoryPageView
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onCategoryViewer__doCategoryQuery
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onCategoryViewer__generateLink
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onChangeAuthenticationDataAudit
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onChangesListInitRows
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onChangesListInsertArticleLink
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onChangesListInsertLogEntry
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onChangesListSpecialPageQuery
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onChangesListSpecialPageStructuredFilters
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onChangeTagAfterDelete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onChangeTagCanCreate
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onChangeTagCanDelete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onChangeTagsAfterUpdateTags
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onChangeTagsAllowedAdd
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onChangeTagsListActive
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onChangeUserGroups
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onCollation__factory
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onConfirmEmailComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onContentAlterParserOutput
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onContentGetParserOutput
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onContentHandlerDefaultModelFor
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onContentHandlerForModelID
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onContentModelCanBeUsedOn
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onContentSecurityPolicyDefaultSource
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onContentSecurityPolicyDirectives
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onContentSecurityPolicyScriptSource
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onContribsPager__getQueryInfo
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onContribsPager__reallyDoQuery
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onContributeCards
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onContributionsLineEnding
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onContributionsToolLinks
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onConvertContent
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onCustomEditor
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onDeletedContribsPager__reallyDoQuery
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onDeletedContributionsLineEnding
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onDeleteUnknownPreferences
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onDifferenceEngineAfterLoadNewText
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onTextSlotDiffRendererTablePrefix
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onDifferenceEngineLoadTextAfterNewContentIsLoaded
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onDifferenceEngineMarkPatrolledLink
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onDifferenceEngineMarkPatrolledRCID
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onDifferenceEngineNewHeader
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onDifferenceEngineOldHeader
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onDifferenceEngineOldHeaderNoOldRev
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onDifferenceEngineRenderRevisionAddParserOutput
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onDifferenceEngineRenderRevisionShowFinalPatrolLink
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onDifferenceEngineShowDiff
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onDifferenceEngineShowDiffPage
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onDifferenceEngineShowDiffPageMaybeShowMissingRevision
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onDifferenceEngineShowEmptyOldContent
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onDifferenceEngineViewHeader
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onDiffTools
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onDisplayOldSubtitle
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditFilterMergedContent
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditFormInitialText
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditFormPreloadText
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditPageBeforeConflictDiff
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditPageBeforeEditButtons
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditPageBeforeEditToolbar
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditPageCopyrightWarning
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditPageGetCheckboxesDefinition
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditPageGetDiffContent
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditPageGetPreviewContent
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditPageNoSuchSection
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditPageTosSummary
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditPage__attemptSave
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditPage__attemptSave_after
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditPage__importFormData
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditPage__showEditForm_fields
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditPage__showEditForm_initial
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditPage__showReadOnlyForm_initial
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditPage__showStandardInputs_options
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEmailConfirmed
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEmailUser
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEmailUserCC
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEmailUserComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEmailUserForm
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEmailUserPermissionsErrors
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEmailUserAuthorizeSend
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEmailUserSendEmail
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEnhancedChangesListModifyBlockLineData
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEnhancedChangesListModifyLineData
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEnhancedChangesList__getLogText
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onExemptFromAccountCreationThrottle
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onExtensionTypes
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onFetchChangesList
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onFileDeleteComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onFileTransformed
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onFileUndeleteComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onFileUpload
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onFormatAutocomments
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGalleryGetModes
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetAllBlockActions
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onGetAutoPromoteGroups
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetActionName
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onGetCacheVaryCookies
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetCanonicalURL
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetContentModels
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetDefaultSortkey
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetDifferenceEngine
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onGetDoubleUnderscoreIDs
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetExtendedMetadata
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetFullURL
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetHumanTimestamp
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetInternalURL
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetIP
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetLangPreferredVariant
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetLinkColours
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetLocalURL
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetLocalURL__Article
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetLocalURL__Internal
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetLogTypesOnUser
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetMagicVariableIDs
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetMetadataVersion
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetNewMessagesAlert
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetPreferences
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetRelativeTimestamp
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetSlotDiffRenderer
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetUserBlock
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPermissionStatusAudit
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onGetSecurityLogContext
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onGetSessionJwtData
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onGetUserPermissionsErrors
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetUserPermissionsErrorsExpensive
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGitViewers
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onHistoryPageToolLinks
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onHistoryTools
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onHtmlCacheUpdaterAppendUrls
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onHtmlCacheUpdaterVaryUrls
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onHTMLFileCache__useFileCache
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onHtmlPageLinkRendererBegin
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onHtmlPageLinkRendererEnd
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onImageBeforeProduceHTML
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onImageOpenShowImageInlineBefore
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onImagePageAfterImageLinks
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onImagePageFileHistoryLine
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onImagePageFindFile
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onImagePageShowTOC
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onImgAuthBeforeStream
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onImgAuthModifyHeaders
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onImportHandleLogItemXMLTag
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onImportHandlePageXMLTag
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onImportHandleRevisionXMLTag
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onImportHandleContentXMLTag
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
 onImportHandleToplevelXMLTag
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onImportHandleUnknownUser
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onImportHandleUploadXMLTag
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onImportLogInterwikiLink
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onImportSources
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onInfoAction
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onInitializeArticleMaybeRedirect
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onInternalParseBeforeLinks
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onInterwikiLoadPrefix
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onInvalidateEmailComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onIRCLineURL
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onIsFileCacheable
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onIsTrustedProxy
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onIsUploadAllowedFromUrl
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onIsValidEmailAddr
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onIsValidPassword
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onJsonValidateSave
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLanguageGetNamespaces
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLanguageGetTranslatedLanguageNames
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLanguageLinks
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLanguageSelector
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLanguage__getMessagesFileName
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLinkerGenerateRollbackLink
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLinkerMakeExternalImage
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLinkerMakeExternalLink
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLinkerMakeExternalLinkWithContext
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLinkerMakeMediaLinkFile
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLinksUpdate
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLinksUpdateComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onListDefinedTags
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onListRestrictedTags
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onLoadExtensionSchemaUpdates
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onLocalFilePurgeThumbnails
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLocalFile__getHistory
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLocalisationCacheRecache
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLocalisationCacheRecacheFallback
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLocalUserCreated
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLogEventsListGetExtraInputs
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLogEventsListLineEnding
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLogEventsListShowLogExtract
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLogException
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLoginFormValidErrorMessages
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onCreateAccountShouldShowUsernamePolicyPopover
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLogLine
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onLonelyPagesQuery
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onMaintenanceRefreshLinksInit
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onMaintenanceShellStart
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onMaintenanceUpdateAddParams
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onMakeGlobalVariablesScript
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onManualLogEntryBeforePublish
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onMarkPatrolled
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onMarkPatrolledComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onMarkPatrolledAudit
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onMediaWikiPerformAction
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onMediaWikiServices
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onMessageCacheFetchOverrides
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onMessageCacheReplace
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onMessageCache__get
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onMessagePostProcessHtml
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onMessagePostProcessText
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onMessagesPreLoad
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onMimeMagicGuessFromContent
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onMimeMagicImproveFromExtension
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onMimeMagicInit
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetBlockErrorMessageKey
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onModifyExportQuery
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onMovePageCheckPermissions
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onMovePageIsValidMove
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onMultiContentSave
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onNamespaceIsMovable
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onNewDifferenceEngine
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onNewPagesLineEnding
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onOldChangesListRecentChangesLine
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onOpenSearchUrls
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onOpportunisticLinksUpdate
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onOtherAutoblockLogLink
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onOtherBlockLogLink
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onOutputPageAfterGetHeadLinksArray
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onOutputPageBeforeHTML
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onOutputPageBodyAttributes
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onOutputPageCheckLastModified
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onOutputPageParserOutput
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onOutputPageRenderCategoryLink
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onOutputTransformFirstStage
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onOutputTransformLastStage
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onPageContentLanguage
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPageDelete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPageDeleteComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPageDeletionDataUpdates
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPageUndelete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPageUndeleteComplete
100.00% covered (success)
100.00%
14 / 14
100.00% covered (success)
100.00%
1 / 1
1
 onPageHistoryBeforeList
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPageHistoryLineEnding
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPageHistoryPager__doBatchLookups
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPageHistoryPager__getQueryInfo
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPageMoveComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPageMoveCompleting
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPageRenderingHash
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPageSaveComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPageViewUpdates
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserAfterParse
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserAfterTidy
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserBeforeInternalParse
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserBeforePreprocess
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserCacheSaveComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserClearState
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserCloned
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserFetchTemplateData
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserFirstCallInit
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserGetVariableValueSwitch
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserGetVariableValueTs
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserLimitReportFormat
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserLimitReportPrepare
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserLogLinterData
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserMakeImageParams
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserModifyImageHTML
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onParserOptionsDefaults
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserOptionsRegister
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserOutputPostCacheTransform
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onParserOutputStashForEdit
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserPreSaveTransformComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserTestGlobals
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPasswordPoliciesForUser
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPerformRetroactiveAutoblock
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPingLimiter
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPlaceNewSection
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPostLoginRedirect
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPreferencesFormPreSave
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPreferencesGetIcon
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPreferencesGetLayout
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPreferencesGetLegend
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPrefixSearchExtractNamespace
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPrefsEmailAudit
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onProtectionForm__buildForm
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onProtectionFormAddFormFields
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onProtectionForm__save
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onProtectionForm__showLogExtract
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onRandomPageQuery
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onRawPageViewBeforeOutput
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onReadPrivateUserRequirementsCondition
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onRecentChangesPurgeRows
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onRecentChangesPurgeQuery
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onRecentChange_save
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onRedirectSpecialArticleRedirectParams
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onRejectParserCacheValue
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onRenameUserAbort
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onRenameUserComplete
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onRenameUserPreRename
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onRenameUserSQL
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onRenameUserWarning
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onRequestContextCreateSkin
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onResetPasswordExpiration
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onRevisionDataUpdates
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onRevisionFromEditComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onRevisionRecordInserted
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onRevisionUndeleted
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onRollbackComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSearchableNamespaces
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSearchAfterNoDirectMatch
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSearchDataForIndex
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSearchDataForIndex2
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSearchGetNearMatch
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSearchGetNearMatchBefore
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSearchGetNearMatchComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSearchIndexFields
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSearchResultInitFromTitle
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSearchResultProvideDescription
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSearchResultProvideThumbnail
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSearchResultsAugment
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSecuritySensitiveOperationStatus
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSelfLinkBegin
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSessionCheckInfo
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSessionMetadata
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSetupAfterCache
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onShortPagesQuery
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onShowMissingArticle
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onShowSearchHit
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onShowSearchHitTitle
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onSidebarBeforeOutput
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onSiteNoticeAfter
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSiteNoticeBefore
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSkinPageReadyConfig
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onSkinAddFooterLinks
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSkinAfterBottomScripts
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSkinAfterContent
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSkinAfterPortlet
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSkinBuildSidebar
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSkinCopyrightFooterMessage
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSkinEditSectionLinks
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSkinPreloadExistence
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSkinSubPageSubtitle
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSkinTemplateGetLanguageLink
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSkinTemplateNavigation__Universal
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onSoftwareInfo
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialBlockModifyFormFields
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialContributionsBeforeMainOutput
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialContributions__formatRow__flags
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialContributions__getForm__filters
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialCreateAccountBenefits
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialExportGetExtraPages
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialListusersDefaultQuery
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialListusersFormatRow
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialListusersHeader
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialListusersHeaderForm
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialListusersQueryInfo
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialLogAddLogSearchRelations
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialLogResolveLogType
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialLogGetSubpagesForPrefixSearch
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialMovepageAfterMove
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialMuteModifyFormFields
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialNewpagesConditions
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialNewPagesFilters
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialPageAfterExecute
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialPageBeforeExecute
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialPageBeforeFormDisplay
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialPage_initList
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialPasswordResetOnSubmit
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialPrefixIndexGetFormFilters
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialPrefixIndexQuery
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialRandomGetRandomTitle
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialRecentChangesPanel
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialResetTokensTokens
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialSearchCreateLink
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialSearchGoResult
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialSearchNogomatch
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialSearchPowerBox
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialSearchProfileForm
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialSearchProfiles
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialSearchResults
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialSearchResultsAppend
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialSearchResultsPrepend
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialSearchSetupEngine
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialStatsAddExtra
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialTrackingCategories__generateCatLink
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialTrackingCategories__preprocess
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialUploadComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialVersionVersionUrl
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpreadAnyEditBlock
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialWhatLinksHereQuery
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onTempUserCreatedRedirect
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onTestCanonicalRedirect
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onThumbnailBeforeProduceHTML
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onTitleExists
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onTitleGetEditNotices
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onTitleGetRestrictionTypes
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onTitleIsAlwaysKnown
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onTitleIsMovable
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onTitleMove
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onTitleMoveStarting
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onTitleQuickPermissions
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onTitleReadWhitelist
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onTitleSquidURLs
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUnblockUser
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUnblockUserComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUndeleteForm__showHistory
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUndeleteForm__showRevision
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUndeletePageToolLinks
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUnitTestsAfterDatabaseSetup
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUnitTestsBeforeDatabaseTeardown
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUnitTestsList
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUnwatchArticle
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUnwatchArticleComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUploadComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUploadCreateFromRequest
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUploadFormInitDescriptor
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUploadFormSourceDescriptors
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUploadForm_BeforeProcessing
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUploadForm_getInitialPageText
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUploadForm_initial
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUploadStashFile
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUploadVerifyFile
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUploadVerifyUpload
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserAddGroup
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserArrayFromResult
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserCan
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserCanChangeEmail
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserCanSendEmail
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserClearNewTalkNotification
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserEditCountUpdate
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onUserEffectiveGroups
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserGetAllRights
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserGetDefaultOptions
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserGetEmail
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserGetEmailAuthenticationTimestamp
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserGetLanguageObject
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserPrivilegedGroups
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserGetReservedNames
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserGetRights
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserGetRightsRemove
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserGroupsChanged
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onUserIsBlockedFrom
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserIsBot
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserIsEveryoneAllowed
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserIsLocked
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserLinkRendererUserLinkPostRender
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserLoadAfterLoadFromSession
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserLoadDefaults
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLoadUserOptions
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onUserLoggedIn
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserLoginComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserLogout
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserModifyCreateAccountEmail
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onUserLogoutComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserMailerChangeReturnPath
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserMailerSplitTo
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserMailerTransformContent
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserMailerTransformMessage
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserRemoveGroup
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserRequirementsCondition
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onUserRequirementsConditionDisplay
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onSaveUserOptions
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLocalUserOptionsStoreSave
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onUserSaveSettings
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserSendConfirmationMail
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserSetEmail
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserSetEmailAuthenticationTimestamp
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUsersPagerDoBatchLookups
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserToolLinksEdit
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUser__mailPasswordInternal
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onValidateExtendedMetadataCache
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onWantedPages__getQueryInfo
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onWatchArticle
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onWatchArticleComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onWatchedItemQueryServiceExtensions
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onWatchlistEditorBeforeFormRender
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onWatchlistEditorBuildRemoveLine
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onWebRequestPathInfoRouter
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onWebResponseSetCookie
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onWfShellWikiCmd
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onWgQueryPages
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onWhatLinksHereProps
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onWikiExporter__dumpStableQuery
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onWikiPageDeletionUpdates
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onWikiPageFactory
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onXmlDumpWriterOpenPage
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onXmlDumpWriterWriteRevision
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace MediaWiki\HookContainer;
4
5use MediaWiki\Auth\AuthenticationResponse;
6use MediaWiki\Auth\AuthManager;
7use MediaWiki\Content\ContentHandler;
8use MediaWiki\Content\JsonContent;
9use MediaWiki\Context\IContextSource;
10use MediaWiki\Diff\TextSlotDiffRenderer;
11use MediaWiki\FileRepo\File\File;
12use MediaWiki\Linker\LinkRenderer;
13use MediaWiki\Linker\LinkTarget;
14use MediaWiki\Logging\ManualLogEntry;
15use MediaWiki\Mail\MailAddress;
16use MediaWiki\Mail\UserEmailContact;
17use MediaWiki\Message\Message;
18use MediaWiki\Output\OutputPage;
19use MediaWiki\Page\Article;
20use MediaWiki\Page\PageIdentity;
21use MediaWiki\Page\ProperPageIdentity;
22use MediaWiki\Page\WikiPage;
23use MediaWiki\Parser\Parser;
24use MediaWiki\Parser\ParserOptions;
25use MediaWiki\Parser\ParserOutput;
26use MediaWiki\Permissions\Authority;
27use MediaWiki\Permissions\PermissionStatus;
28use MediaWiki\RenameUser\RenameuserSQL;
29use MediaWiki\ResourceLoader as RL;
30use MediaWiki\Revision\RevisionRecord;
31use MediaWiki\Search\SearchEngine;
32use MediaWiki\Session\Session;
33use MediaWiki\Skin\Skin;
34use MediaWiki\SpecialPage\SpecialPage;
35use MediaWiki\Title\Title;
36use MediaWiki\User\User;
37use MediaWiki\User\UserIdentity;
38use StatusValue;
39use Wikimedia\Message\MessageSpecifier;
40use Wikimedia\Parsoid\Core\LinkTarget as ParsoidLinkTarget;
41use Wikimedia\Rdbms\SelectQueryBuilder;
42
43/**
44 * This class provides an implementation of the core hook interfaces,
45 * forwarding hook calls to HookContainer for dispatch to extensions.
46 * It is intended for use within MediaWiki core only. Extensions that
47 * need a hook runner should create one for the hooks they need to run.
48 *
49 * To use it, create a new HookRunner object from a HookContainer obtained
50 * by dependency injection, or as a last resort, from the global service
51 * container. Then call the relevant method on the object:
52 *   ( new HookRunner( $hookContainer ) )->onSomeHook( $param );
53 *
54 * @internal
55 */
56class HookRunner implements
57    \MediaWiki\Actions\Hook\ActionBeforeFormDisplayHook,
58    \MediaWiki\Actions\Hook\ActionModifyFormFieldsHook,
59    \MediaWiki\Actions\Hook\CustomEditorHook,
60    \MediaWiki\Actions\Hook\GetActionNameHook,
61    \MediaWiki\Actions\Hook\HistoryPageToolLinksHook,
62    \MediaWiki\Actions\Hook\HistoryToolsHook,
63    \MediaWiki\Actions\Hook\InfoActionHook,
64    \MediaWiki\Actions\Hook\PageHistoryBeforeListHook,
65    \MediaWiki\Actions\Hook\PageHistoryLineEndingHook,
66    \MediaWiki\Actions\Hook\PageHistoryPager__doBatchLookupsHook,
67    \MediaWiki\Actions\Hook\PageHistoryPager__getQueryInfoHook,
68    \MediaWiki\Actions\Hook\RawPageViewBeforeOutputHook,
69    \MediaWiki\Actions\Hook\UnwatchArticleCompleteHook,
70    \MediaWiki\Actions\Hook\UnwatchArticleHook,
71    \MediaWiki\Actions\Hook\WatchArticleCompleteHook,
72    \MediaWiki\Actions\Hook\WatchArticleHook,
73    \MediaWiki\Auth\Hook\AuthenticationAttemptThrottledHook,
74    \MediaWiki\Auth\Hook\AuthManagerFilterProvidersHook,
75    \MediaWiki\Auth\Hook\AuthManagerLoginAuthenticateAuditHook,
76    \MediaWiki\Auth\Hook\AuthManagerVerifyAuthenticationHook,
77    \MediaWiki\Auth\Hook\AuthPreserveQueryParamsHook,
78    \MediaWiki\Auth\Hook\ExemptFromAccountCreationThrottleHook,
79    \MediaWiki\Auth\Hook\LocalUserCreatedHook,
80    \MediaWiki\Auth\Hook\ResetPasswordExpirationHook,
81    \MediaWiki\Auth\Hook\SecuritySensitiveOperationStatusHook,
82    \MediaWiki\Auth\Hook\UserLoggedInHook,
83    \MediaWiki\Block\Hook\AbortAutoblockHook,
84    \MediaWiki\Block\Hook\GetAllBlockActionsHook,
85    \MediaWiki\Block\Hook\GetUserBlockHook,
86    \MediaWiki\Block\Hook\PerformRetroactiveAutoblockHook,
87    \MediaWiki\Block\Hook\SpreadAnyEditBlockHook,
88    \MediaWiki\Cache\Hook\BacklinkCacheGetConditionsHook,
89    \MediaWiki\Cache\Hook\BacklinkCacheGetPrefixHook,
90    \MediaWiki\Cache\Hook\HtmlCacheUpdaterAppendUrlsHook,
91    \MediaWiki\Cache\Hook\HtmlCacheUpdaterVaryUrlsHook,
92    \MediaWiki\Cache\Hook\HTMLFileCache__useFileCacheHook,
93    \MediaWiki\ChangeTags\Hook\ChangeTagAfterDeleteHook,
94    \MediaWiki\ChangeTags\Hook\ChangeTagCanCreateHook,
95    \MediaWiki\ChangeTags\Hook\ChangeTagCanDeleteHook,
96    \MediaWiki\ChangeTags\Hook\ChangeTagsAfterUpdateTagsHook,
97    \MediaWiki\ChangeTags\Hook\ChangeTagsAllowedAddHook,
98    \MediaWiki\ChangeTags\Hook\ChangeTagsListActiveHook,
99    \MediaWiki\ChangeTags\Hook\ListDefinedTagsHook,
100    \MediaWiki\ChangeTags\Hook\ListRestrictedTagsHook,
101    \MediaWiki\Collation\Hook\Collation__factoryHook,
102    \MediaWiki\Content\Hook\ContentAlterParserOutputHook,
103    \MediaWiki\Content\Hook\ContentGetParserOutputHook,
104    \MediaWiki\Content\Hook\ContentHandlerForModelIDHook,
105    \MediaWiki\Content\Hook\ContentModelCanBeUsedOnHook,
106    \MediaWiki\Content\Hook\ConvertContentHook,
107    \MediaWiki\Content\Hook\GetContentModelsHook,
108    \MediaWiki\Content\Hook\GetDifferenceEngineHook,
109    \MediaWiki\Content\Hook\GetSlotDiffRendererHook,
110    \MediaWiki\Content\Hook\JsonValidateSaveHook,
111    \MediaWiki\Content\Hook\PageContentLanguageHook,
112    \MediaWiki\Content\Hook\PlaceNewSectionHook,
113    \MediaWiki\Content\Hook\SearchDataForIndexHook,
114    \MediaWiki\Content\Hook\SearchDataForIndex2Hook,
115    \MediaWiki\Context\Hook\RequestContextCreateSkinHook,
116    \MediaWiki\Context\Hook\UserGetLanguageObjectHook,
117    \MediaWiki\Deferred\Hook\LinksUpdateCompleteHook,
118    \MediaWiki\Deferred\Hook\LinksUpdateHook,
119    \MediaWiki\Deferred\Hook\UserEditCountUpdateHook,
120    \MediaWiki\Diff\Hook\AbortDiffCacheHook,
121    \MediaWiki\Diff\Hook\ArticleContentOnDiffHook,
122    \MediaWiki\Diff\Hook\DifferenceEngineAfterLoadNewTextHook,
123    \MediaWiki\Diff\Hook\DifferenceEngineLoadTextAfterNewContentIsLoadedHook,
124    \MediaWiki\Diff\Hook\DifferenceEngineMarkPatrolledLinkHook,
125    \MediaWiki\Diff\Hook\DifferenceEngineMarkPatrolledRCIDHook,
126    \MediaWiki\Diff\Hook\DifferenceEngineNewHeaderHook,
127    \MediaWiki\Diff\Hook\DifferenceEngineOldHeaderHook,
128    \MediaWiki\Diff\Hook\DifferenceEngineOldHeaderNoOldRevHook,
129    \MediaWiki\Diff\Hook\DifferenceEngineRenderRevisionAddParserOutputHook,
130    \MediaWiki\Diff\Hook\DifferenceEngineRenderRevisionShowFinalPatrolLinkHook,
131    \MediaWiki\Diff\Hook\DifferenceEngineShowDiffHook,
132    \MediaWiki\Diff\Hook\DifferenceEngineShowDiffPageHook,
133    \MediaWiki\Diff\Hook\DifferenceEngineShowDiffPageMaybeShowMissingRevisionHook,
134    \MediaWiki\Diff\Hook\DifferenceEngineShowEmptyOldContentHook,
135    \MediaWiki\Diff\Hook\DifferenceEngineViewHeaderHook,
136    \MediaWiki\Diff\Hook\DiffToolsHook,
137    \MediaWiki\Diff\Hook\NewDifferenceEngineHook,
138    \MediaWiki\Diff\Hook\TextSlotDiffRendererTablePrefixHook,
139    \MediaWiki\Exception\Hook\LogExceptionHook,
140    \MediaWiki\Export\Hook\ModifyExportQueryHook,
141    \MediaWiki\Export\Hook\WikiExporter__dumpStableQueryHook,
142    \MediaWiki\Export\Hook\XmlDumpWriterOpenPageHook,
143    \MediaWiki\Export\Hook\XmlDumpWriterWriteRevisionHook,
144    \MediaWiki\FileRepo\Hook\FileTransformedHook,
145    \MediaWiki\FileRepo\Hook\FileUploadHook,
146    \MediaWiki\FileRepo\Hook\LocalFile__getHistoryHook,
147    \MediaWiki\FileRepo\Hook\LocalFilePurgeThumbnailsHook,
148    \MediaWiki\Gallery\Hook\GalleryGetModesHook,
149    \MediaWiki\Hook\AlternateEditHook,
150    \MediaWiki\Hook\AlternateEditPreviewHook,
151    \MediaWiki\Hook\ApiBeforeMainHook,
152    \MediaWiki\Hook\ArticleMergeCompleteHook,
153    \MediaWiki\Hook\ArticleUpdateBeforeRedirectHook,
154    \MediaWiki\Hook\BadImageHook,
155    \MediaWiki\Hook\BeforeInitializeHook,
156    \MediaWiki\Hook\CategoryViewer__doCategoryQueryHook,
157    \MediaWiki\Hook\CategoryViewer__generateLinkHook,
158    \MediaWiki\Hook\ContentSecurityPolicyDefaultSourceHook,
159    \MediaWiki\Hook\ContentSecurityPolicyDirectivesHook,
160    \MediaWiki\Hook\ContentSecurityPolicyScriptSourceHook,
161    \MediaWiki\Hook\DeleteUnknownPreferencesHook,
162    \MediaWiki\Hook\EditFilterMergedContentHook,
163    \MediaWiki\Hook\EditFormInitialTextHook,
164    \MediaWiki\Hook\EditFormPreloadTextHook,
165    \MediaWiki\Hook\EditPage__attemptSave_afterHook,
166    \MediaWiki\Hook\EditPage__attemptSaveHook,
167    \MediaWiki\Hook\EditPage__importFormDataHook,
168    \MediaWiki\Hook\EditPage__showEditForm_fieldsHook,
169    \MediaWiki\Hook\EditPage__showEditForm_initialHook,
170    \MediaWiki\Hook\EditPage__showReadOnlyForm_initialHook,
171    \MediaWiki\Hook\EditPage__showStandardInputs_optionsHook,
172    \MediaWiki\Hook\EditPageBeforeConflictDiffHook,
173    \MediaWiki\Hook\EditPageBeforeEditButtonsHook,
174    \MediaWiki\Hook\EditPageBeforeEditToolbarHook,
175    \MediaWiki\Hook\EditPageCopyrightWarningHook,
176    \MediaWiki\Hook\EditPageGetCheckboxesDefinitionHook,
177    \MediaWiki\Hook\EditPageGetDiffContentHook,
178    \MediaWiki\Hook\EditPageGetPreviewContentHook,
179    \MediaWiki\Hook\EditPageNoSuchSectionHook,
180    \MediaWiki\Hook\EditPageTosSummaryHook,
181    \MediaWiki\Hook\FileDeleteCompleteHook,
182    \MediaWiki\Hook\FormatAutocommentsHook,
183    \MediaWiki\Hook\GetBlockErrorMessageKeyHook,
184    \MediaWiki\Hook\GetCanonicalURLHook,
185    \MediaWiki\Hook\GetDefaultSortkeyHook,
186    \MediaWiki\Hook\GetDoubleUnderscoreIDsHook,
187    \MediaWiki\Hook\GetFullURLHook,
188    \MediaWiki\Hook\GetInternalURLHook,
189    \MediaWiki\Hook\GetIPHook,
190    \MediaWiki\Hook\GetLocalURL__ArticleHook,
191    \MediaWiki\Hook\GetLocalURL__InternalHook,
192    \MediaWiki\Hook\GetLocalURLHook,
193    \MediaWiki\Hook\GetRelativeTimestampHook,
194    \MediaWiki\Hook\GetSecurityLogContextHook,
195    \MediaWiki\Hook\GetSessionJwtDataHook,
196    \MediaWiki\Hook\GitViewersHook,
197    \MediaWiki\Hook\ImageBeforeProduceHTMLHook,
198    \MediaWiki\Hook\ImgAuthBeforeStreamHook,
199    \MediaWiki\Hook\ImgAuthModifyHeadersHook,
200    \MediaWiki\Hook\ImportHandleUnknownUserHook,
201    \MediaWiki\Hook\InitializeArticleMaybeRedirectHook,
202    \MediaWiki\Hook\IsTrustedProxyHook,
203    \MediaWiki\Hook\MaintenanceRefreshLinksInitHook,
204    \MediaWiki\Hook\MaintenanceShellStartHook,
205    \MediaWiki\Hook\MaintenanceUpdateAddParamsHook,
206    \MediaWiki\Hook\MediaWikiPerformActionHook,
207    \MediaWiki\Hook\MediaWikiServicesHook,
208    \MediaWiki\Hook\MimeMagicGuessFromContentHook,
209    \MediaWiki\Hook\MimeMagicImproveFromExtensionHook,
210    \MediaWiki\Hook\MimeMagicInitHook,
211    \MediaWiki\Hook\MovePageCheckPermissionsHook,
212    \MediaWiki\Hook\MovePageIsValidMoveHook,
213    \MediaWiki\Hook\OpenSearchUrlsHook,
214    \MediaWiki\Hook\PageMoveCompleteHook,
215    \MediaWiki\Hook\PageMoveCompletingHook,
216    \MediaWiki\Hook\ParserTestGlobalsHook,
217    \MediaWiki\Hook\PreferencesGetIconHook,
218    \MediaWiki\Hook\PreferencesGetLayoutHook,
219    \MediaWiki\Hook\ProtectionForm__buildFormHook,
220    \MediaWiki\Hook\ProtectionForm__saveHook,
221    \MediaWiki\Hook\ProtectionForm__showLogExtractHook,
222    \MediaWiki\Hook\ProtectionFormAddFormFieldsHook,
223    \MediaWiki\Hook\SelfLinkBeginHook,
224    \MediaWiki\Hook\SetupAfterCacheHook,
225    \MediaWiki\Hook\SpecialLogGetSubpagesForPrefixSearchHook,
226    \MediaWiki\Hook\TempUserCreatedRedirectHook,
227    \MediaWiki\Hook\TestCanonicalRedirectHook,
228    \MediaWiki\Hook\TitleExistsHook,
229    \MediaWiki\Hook\TitleGetEditNoticesHook,
230    \MediaWiki\Hook\TitleGetRestrictionTypesHook,
231    \MediaWiki\Hook\TitleIsAlwaysKnownHook,
232    \MediaWiki\Hook\TitleIsMovableHook,
233    \MediaWiki\Hook\TitleMoveHook,
234    \MediaWiki\Hook\TitleMoveStartingHook,
235    \MediaWiki\Hook\TitleSquidURLsHook,
236    \MediaWiki\Hook\UnitTestsAfterDatabaseSetupHook,
237    \MediaWiki\Hook\UnitTestsBeforeDatabaseTeardownHook,
238    \MediaWiki\Hook\UnitTestsListHook,
239    \MediaWiki\Hook\UserToolLinksEditHook,
240    \MediaWiki\Hook\WebRequestPathInfoRouterHook,
241    \MediaWiki\Hook\WebResponseSetCookieHook,
242    \MediaWiki\Import\Hook\AfterImportPageHook,
243    \MediaWiki\Import\Hook\ImportHandleContentXMLTagHook,
244    \MediaWiki\Import\Hook\ImportHandleLogItemXMLTagHook,
245    \MediaWiki\Import\Hook\ImportHandlePageXMLTagHook,
246    \MediaWiki\Import\Hook\ImportHandleRevisionXMLTagHook,
247    \MediaWiki\Import\Hook\ImportHandleToplevelXMLTagHook,
248    \MediaWiki\Import\Hook\ImportHandleUploadXMLTagHook,
249    \MediaWiki\Installer\Hook\LoadExtensionSchemaUpdatesHook,
250    \MediaWiki\Interwiki\Hook\InterwikiLoadPrefixHook,
251    \MediaWiki\JobQueue\Jobs\Hook\RecentChangesPurgeRowsHook,
252    \MediaWiki\Language\Hook\GetHumanTimestampHook,
253    \MediaWiki\Language\Hook\GetLangPreferredVariantHook,
254    \MediaWiki\Language\Hook\Language__getMessagesFileNameHook,
255    \MediaWiki\Language\Hook\LanguageGetNamespacesHook,
256    \MediaWiki\Language\Hook\LanguageGetTranslatedLanguageNamesHook,
257    \MediaWiki\Language\Hook\LocalisationCacheRecacheFallbackHook,
258    \MediaWiki\Language\Hook\LocalisationCacheRecacheHook,
259    \MediaWiki\Language\Hook\MessageCache__getHook,
260    \MediaWiki\Language\Hook\MessageCacheFetchOverridesHook,
261    \MediaWiki\Language\Hook\MessageCacheReplaceHook,
262    \MediaWiki\Language\Hook\MessagesPreLoadHook,
263    \MediaWiki\Linker\Hook\HtmlPageLinkRendererBeginHook,
264    \MediaWiki\Linker\Hook\HtmlPageLinkRendererEndHook,
265    \MediaWiki\Linker\Hook\LinkerGenerateRollbackLinkHook,
266    \MediaWiki\Linker\Hook\LinkerMakeExternalImageHook,
267    \MediaWiki\Linker\Hook\LinkerMakeExternalLinkHook,
268    \MediaWiki\Linker\Hook\LinkerMakeExternalLinkWithContextHook,
269    \MediaWiki\Linker\Hook\LinkerMakeMediaLinkFileHook,
270    \MediaWiki\Linker\Hook\UserLinkRendererUserLinkPostRenderHook,
271    \MediaWiki\Logging\Hook\LogEventsListGetExtraInputsHook,
272    \MediaWiki\Logging\Hook\LogEventsListLineEndingHook,
273    \MediaWiki\Logging\Hook\LogEventsListShowLogExtractHook,
274    \MediaWiki\Logging\Hook\LogLineHook,
275    \MediaWiki\Logging\Hook\ManualLogEntryBeforePublishHook,
276    \MediaWiki\Mail\Hook\AlternateUserMailerHook,
277    \MediaWiki\Mail\Hook\EmailUserAuthorizeSendHook,
278    \MediaWiki\Mail\Hook\EmailUserSendEmailHook,
279    \MediaWiki\Mail\Hook\UserMailerChangeReturnPathHook,
280    \MediaWiki\Mail\Hook\UserMailerSplitToHook,
281    \MediaWiki\Mail\Hook\UserMailerTransformContentHook,
282    \MediaWiki\Mail\Hook\UserMailerTransformMessageHook,
283    \MediaWiki\Media\Hook\BitmapHandlerCheckImageAreaHook,
284    \MediaWiki\Media\Hook\BitmapHandlerTransformHook,
285    \MediaWiki\Media\Hook\GetExtendedMetadataHook,
286    \MediaWiki\Media\Hook\GetMetadataVersionHook,
287    \MediaWiki\Media\Hook\ThumbnailBeforeProduceHTMLHook,
288    \MediaWiki\Media\Hook\ValidateExtendedMetadataCacheHook,
289    \MediaWiki\Message\Hook\MessagePostProcessHtmlHook,
290    \MediaWiki\Message\Hook\MessagePostProcessTextHook,
291    \MediaWiki\Output\Hook\AfterBuildFeedLinksHook,
292    \MediaWiki\Output\Hook\AfterFinalPageOutputHook,
293    \MediaWiki\Output\Hook\BeforePageDisplayHook,
294    \MediaWiki\Output\Hook\BeforePageRedirectHook,
295    \MediaWiki\Output\Hook\GetCacheVaryCookiesHook,
296    \MediaWiki\Output\Hook\LanguageLinksHook,
297    \MediaWiki\Output\Hook\MakeGlobalVariablesScriptHook,
298    \MediaWiki\Output\Hook\OutputPageAfterGetHeadLinksArrayHook,
299    \MediaWiki\Output\Hook\OutputPageBeforeHTMLHook,
300    \MediaWiki\Output\Hook\OutputPageBodyAttributesHook,
301    \MediaWiki\Output\Hook\OutputPageCheckLastModifiedHook,
302    \MediaWiki\Output\Hook\OutputPageParserOutputHook,
303    \MediaWiki\Output\Hook\OutputPageRenderCategoryLinkHook,
304    \MediaWiki\OutputTransform\Hook\OutputTransformFirstStageHook,
305    \MediaWiki\OutputTransform\Hook\OutputTransformLastStageHook,
306    \MediaWiki\Page\Hook\Article__MissingArticleConditionsHook,
307    \MediaWiki\Page\Hook\ArticleConfirmDeleteHook,
308    \MediaWiki\Page\Hook\ArticleDeleteAfterSuccessHook,
309    \MediaWiki\Page\Hook\ArticleDeleteCompleteHook,
310    \MediaWiki\Page\Hook\ArticleDeleteHook,
311    \MediaWiki\Page\Hook\ArticleFromTitleHook,
312    \MediaWiki\Page\Hook\ArticlePageDataAfterHook,
313    \MediaWiki\Page\Hook\ArticlePageDataBeforeHook,
314    \MediaWiki\Page\Hook\ArticleParserOptionsHook,
315    \MediaWiki\Page\Hook\ArticleProtectCompleteHook,
316    \MediaWiki\Page\Hook\ArticleProtectHook,
317    \MediaWiki\Page\Hook\ArticlePurgeHook,
318    \MediaWiki\Page\Hook\ArticleRevisionViewCustomHook,
319    \MediaWiki\Page\Hook\ArticleShowPatrolFooterHook,
320    \MediaWiki\Page\Hook\ArticleUndeleteHook,
321    \MediaWiki\Page\Hook\ArticleViewFooterHook,
322    \MediaWiki\Page\Hook\ArticleViewHeaderHook,
323    \MediaWiki\Page\Hook\ArticleViewRedirectHook,
324    \MediaWiki\Page\Hook\BeforeDisplayNoArticleTextHook,
325    \MediaWiki\Page\Hook\CategoryAfterPageAddedHook,
326    \MediaWiki\Page\Hook\CategoryAfterPageRemovedHook,
327    \MediaWiki\Page\Hook\CategoryPageViewHook,
328    \MediaWiki\Page\Hook\DisplayOldSubtitleHook,
329    \MediaWiki\Page\Hook\ImageOpenShowImageInlineBeforeHook,
330    \MediaWiki\Page\Hook\ImagePageAfterImageLinksHook,
331    \MediaWiki\Page\Hook\ImagePageFileHistoryLineHook,
332    \MediaWiki\Page\Hook\ImagePageFindFileHook,
333    \MediaWiki\Page\Hook\ImagePageShowTOCHook,
334    \MediaWiki\Page\Hook\IsFileCacheableHook,
335    \MediaWiki\Page\Hook\OpportunisticLinksUpdateHook,
336    \MediaWiki\Page\Hook\PageDeleteCompleteHook,
337    \MediaWiki\Page\Hook\PageDeleteHook,
338    \MediaWiki\Page\Hook\PageDeletionDataUpdatesHook,
339    \MediaWiki\Page\Hook\PageUndeleteCompleteHook,
340    \MediaWiki\Page\Hook\PageUndeleteHook,
341    \MediaWiki\Page\Hook\PageViewUpdatesHook,
342    \MediaWiki\Page\Hook\RevisionFromEditCompleteHook,
343    \MediaWiki\Page\Hook\RevisionUndeletedHook,
344    \MediaWiki\Page\Hook\RollbackCompleteHook,
345    \MediaWiki\Page\Hook\ShowMissingArticleHook,
346    \MediaWiki\Page\Hook\WikiPageDeletionUpdatesHook,
347    \MediaWiki\Page\Hook\WikiPageFactoryHook,
348    \MediaWiki\Parser\Hook\AfterParserFetchFileAndTitleHook,
349    \MediaWiki\Parser\Hook\BeforeParserFetchFileAndTitleHook,
350    \MediaWiki\Parser\Hook\BeforeParserFetchTemplateRevisionRecordHook,
351    \MediaWiki\Parser\Hook\GetLinkColoursHook,
352    \MediaWiki\Parser\Hook\GetMagicVariableIDsHook,
353    \MediaWiki\Parser\Hook\InternalParseBeforeLinksHook,
354    \MediaWiki\Parser\Hook\IsValidEmailAddrHook,
355    \MediaWiki\Parser\Hook\PageRenderingHashHook,
356    \MediaWiki\Parser\Hook\ParserAfterParseHook,
357    \MediaWiki\Parser\Hook\ParserAfterTidyHook,
358    \MediaWiki\Parser\Hook\ParserBeforeInternalParseHook,
359    \MediaWiki\Parser\Hook\ParserBeforePreprocessHook,
360    \MediaWiki\Parser\Hook\ParserCacheSaveCompleteHook,
361    \MediaWiki\Parser\Hook\ParserClearStateHook,
362    \MediaWiki\Parser\Hook\ParserClonedHook,
363    \MediaWiki\Parser\Hook\ParserFetchTemplateDataHook,
364    \MediaWiki\Parser\Hook\ParserFirstCallInitHook,
365    \MediaWiki\Parser\Hook\ParserGetVariableValueSwitchHook,
366    \MediaWiki\Parser\Hook\ParserGetVariableValueTsHook,
367    \MediaWiki\Parser\Hook\ParserLimitReportFormatHook,
368    \MediaWiki\Parser\Hook\ParserLimitReportPrepareHook,
369    \MediaWiki\Parser\Hook\ParserLogLinterDataHook,
370    \MediaWiki\Parser\Hook\ParserMakeImageParamsHook,
371    \MediaWiki\Parser\Hook\ParserModifyImageHTMLHook,
372    \MediaWiki\Parser\Hook\ParserOptionsDefaultsHook,
373    \MediaWiki\Parser\Hook\ParserOptionsRegisterHook,
374    \MediaWiki\Parser\Hook\ParserOutputPostCacheTransformHook,
375    \MediaWiki\Parser\Hook\ParserPreSaveTransformCompleteHook,
376    \MediaWiki\Parser\Hook\RejectParserCacheValueHook,
377    \MediaWiki\Password\Hook\PasswordPoliciesForUserHook,
378    \MediaWiki\Permissions\Hook\GetUserPermissionsErrorsExpensiveHook,
379    \MediaWiki\Permissions\Hook\GetUserPermissionsErrorsHook,
380    \MediaWiki\Permissions\Hook\PermissionStatusAuditHook,
381    \MediaWiki\Permissions\Hook\TitleQuickPermissionsHook,
382    \MediaWiki\Permissions\Hook\TitleReadWhitelistHook,
383    \MediaWiki\Permissions\Hook\UserCanHook,
384    \MediaWiki\Permissions\Hook\UserGetAllRightsHook,
385    \MediaWiki\Permissions\Hook\UserGetRightsHook,
386    \MediaWiki\Permissions\Hook\UserGetRightsRemoveHook,
387    \MediaWiki\Permissions\Hook\UserIsBlockedFromHook,
388    \MediaWiki\Permissions\Hook\UserIsEveryoneAllowedHook,
389    \MediaWiki\Preferences\Hook\GetPreferencesHook,
390    \MediaWiki\Preferences\Hook\PreferencesFormPreSaveHook,
391    \MediaWiki\RCFeed\Hook\IRCLineURLHook,
392    \MediaWiki\RecentChanges\Hook\ChangesListInitRowsHook,
393    \MediaWiki\RecentChanges\Hook\ChangesListInsertArticleLinkHook,
394    \MediaWiki\RecentChanges\Hook\ChangesListInsertLogEntryHook,
395    \MediaWiki\RecentChanges\Hook\EnhancedChangesList__getLogTextHook,
396    \MediaWiki\RecentChanges\Hook\EnhancedChangesListModifyBlockLineDataHook,
397    \MediaWiki\RecentChanges\Hook\EnhancedChangesListModifyLineDataHook,
398    \MediaWiki\RecentChanges\Hook\FetchChangesListHook,
399    \MediaWiki\RecentChanges\Hook\MarkPatrolledAuditHook,
400    \MediaWiki\RecentChanges\Hook\MarkPatrolledCompleteHook,
401    \MediaWiki\RecentChanges\Hook\MarkPatrolledHook,
402    \MediaWiki\RecentChanges\Hook\OldChangesListRecentChangesLineHook,
403    \MediaWiki\RecentChanges\Hook\RecentChange_saveHook,
404    \MediaWiki\RecentChanges\Hook\RecentChangesPurgeQueryHook,
405    \MediaWiki\RenameUser\Hook\RenameUserAbortHook,
406    \MediaWiki\RenameUser\Hook\RenameUserCompleteHook,
407    \MediaWiki\RenameUser\Hook\RenameUserPreRenameHook,
408    \MediaWiki\RenameUser\Hook\RenameUserSQLHook,
409    \MediaWiki\RenameUser\Hook\RenameUserWarningHook,
410    \MediaWiki\Rest\Hook\SearchResultProvideDescriptionHook,
411    \MediaWiki\Revision\Hook\ContentHandlerDefaultModelForHook,
412    \MediaWiki\Revision\Hook\RevisionRecordInsertedHook,
413    \MediaWiki\RevisionDelete\Hook\ArticleRevisionVisibilitySetHook,
414    \MediaWiki\Search\Hook\PrefixSearchExtractNamespaceHook,
415    \MediaWiki\Search\Hook\SearchableNamespacesHook,
416    \MediaWiki\Search\Hook\SearchAfterNoDirectMatchHook,
417    \MediaWiki\Search\Hook\SearchGetNearMatchBeforeHook,
418    \MediaWiki\Search\Hook\SearchGetNearMatchCompleteHook,
419    \MediaWiki\Search\Hook\SearchGetNearMatchHook,
420    \MediaWiki\Search\Hook\SearchIndexFieldsHook,
421    \MediaWiki\Search\Hook\SearchResultInitFromTitleHook,
422    \MediaWiki\Search\Hook\SearchResultProvideThumbnailHook,
423    \MediaWiki\Search\Hook\SearchResultsAugmentHook,
424    \MediaWiki\Search\Hook\ShowSearchHitHook,
425    \MediaWiki\Search\Hook\ShowSearchHitTitleHook,
426    \MediaWiki\Search\Hook\SpecialSearchPowerBoxHook,
427    \MediaWiki\Search\Hook\SpecialSearchProfileFormHook,
428    \MediaWiki\Session\Hook\SessionCheckInfoHook,
429    \MediaWiki\Session\Hook\SessionMetadataHook,
430    \MediaWiki\Shell\Hook\WfShellWikiCmdHook,
431    \MediaWiki\Skin\Hook\GetNewMessagesAlertHook,
432    \MediaWiki\Skin\Hook\SidebarBeforeOutputHook,
433    \MediaWiki\Skin\Hook\SiteNoticeAfterHook,
434    \MediaWiki\Skin\Hook\SiteNoticeBeforeHook,
435    \MediaWiki\Skin\Hook\SkinAddFooterLinksHook,
436    \MediaWiki\Skin\Hook\SkinAfterBottomScriptsHook,
437    \MediaWiki\Skin\Hook\SkinAfterContentHook,
438    \MediaWiki\Skin\Hook\SkinAfterPortletHook,
439    \MediaWiki\Skin\Hook\SkinBuildSidebarHook,
440    \MediaWiki\Skin\Hook\SkinCopyrightFooterMessageHook,
441    \MediaWiki\Skin\Hook\SkinEditSectionLinksHook,
442    \MediaWiki\Skin\Hook\SkinPageReadyConfigHook,
443    \MediaWiki\Skin\Hook\SkinPreloadExistenceHook,
444    \MediaWiki\Skin\Hook\SkinSubPageSubtitleHook,
445    \MediaWiki\Skin\Hook\SkinTemplateGetLanguageLinkHook,
446    \MediaWiki\Skin\Hook\SkinTemplateNavigation__UniversalHook,
447    \MediaWiki\Skin\Hook\UndeletePageToolLinksHook,
448    \MediaWiki\SpecialPage\Hook\AuthChangeFormFieldsHook,
449    \MediaWiki\SpecialPage\Hook\ChangeAuthenticationDataAuditHook,
450    \MediaWiki\SpecialPage\Hook\ChangesListSpecialPageQueryHook,
451    \MediaWiki\SpecialPage\Hook\ChangesListSpecialPageStructuredFiltersHook,
452    \MediaWiki\SpecialPage\Hook\CreateAccountShouldShowUsernamePolicyPopoverHook,
453    \MediaWiki\SpecialPage\Hook\RedirectSpecialArticleRedirectParamsHook,
454    \MediaWiki\SpecialPage\Hook\SpecialPage_initListHook,
455    \MediaWiki\SpecialPage\Hook\SpecialPageAfterExecuteHook,
456    \MediaWiki\SpecialPage\Hook\SpecialPageBeforeExecuteHook,
457    \MediaWiki\SpecialPage\Hook\SpecialPageBeforeFormDisplayHook,
458    \MediaWiki\SpecialPage\Hook\WgQueryPagesHook,
459    \MediaWiki\Specials\Contribute\Hook\ContributeCardsHook,
460    \MediaWiki\Specials\Hook\AncientPagesQueryHook,
461    \MediaWiki\Specials\Hook\BeforeWelcomeCreationHook,
462    \MediaWiki\Specials\Hook\BlockIpCompleteHook,
463    \MediaWiki\Specials\Hook\BlockIpHook,
464    \MediaWiki\Specials\Hook\BookInformationHook,
465    \MediaWiki\Specials\Hook\ChangeUserGroupsHook,
466    \MediaWiki\Specials\Hook\ContribsPager__getQueryInfoHook,
467    \MediaWiki\Specials\Hook\ContribsPager__reallyDoQueryHook,
468    \MediaWiki\Specials\Hook\ContributionsLineEndingHook,
469    \MediaWiki\Specials\Hook\ContributionsToolLinksHook,
470    \MediaWiki\Specials\Hook\DeletedContribsPager__reallyDoQueryHook,
471    \MediaWiki\Specials\Hook\DeletedContributionsLineEndingHook,
472    \MediaWiki\Specials\Hook\EmailUserCCHook,
473    \MediaWiki\Specials\Hook\EmailUserCompleteHook,
474    \MediaWiki\Specials\Hook\EmailUserFormHook,
475    \MediaWiki\Specials\Hook\EmailUserHook,
476    \MediaWiki\Specials\Hook\EmailUserPermissionsErrorsHook,
477    \MediaWiki\Specials\Hook\ExtensionTypesHook,
478    \MediaWiki\Specials\Hook\FileUndeleteCompleteHook,
479    \MediaWiki\Specials\Hook\GetLogTypesOnUserHook,
480    \MediaWiki\Specials\Hook\ImportLogInterwikiLinkHook,
481    \MediaWiki\Specials\Hook\ImportSourcesHook,
482    \MediaWiki\Specials\Hook\LanguageSelectorHook,
483    \MediaWiki\Specials\Hook\LoginFormValidErrorMessagesHook,
484    \MediaWiki\Specials\Hook\LonelyPagesQueryHook,
485    \MediaWiki\Specials\Hook\NewPagesLineEndingHook,
486    \MediaWiki\Specials\Hook\OtherAutoblockLogLinkHook,
487    \MediaWiki\Specials\Hook\OtherBlockLogLinkHook,
488    \MediaWiki\Specials\Hook\PostLoginRedirectHook,
489    \MediaWiki\Specials\Hook\PreferencesGetLegendHook,
490    \MediaWiki\Specials\Hook\PrefsEmailAuditHook,
491    \MediaWiki\Specials\Hook\RandomPageQueryHook,
492    \MediaWiki\Specials\Hook\ShortPagesQueryHook,
493    \MediaWiki\Specials\Hook\SoftwareInfoHook,
494    \MediaWiki\Specials\Hook\SpecialBlockModifyFormFieldsHook,
495    \MediaWiki\Specials\Hook\SpecialContributions__formatRow__flagsHook,
496    \MediaWiki\Specials\Hook\SpecialContributions__getForm__filtersHook,
497    \MediaWiki\Specials\Hook\SpecialContributionsBeforeMainOutputHook,
498    \MediaWiki\Specials\Hook\SpecialCreateAccountBenefitsHook,
499    \MediaWiki\Specials\Hook\SpecialExportGetExtraPagesHook,
500    \MediaWiki\Specials\Hook\SpecialListusersDefaultQueryHook,
501    \MediaWiki\Specials\Hook\SpecialListusersFormatRowHook,
502    \MediaWiki\Specials\Hook\SpecialListusersHeaderFormHook,
503    \MediaWiki\Specials\Hook\SpecialListusersHeaderHook,
504    \MediaWiki\Specials\Hook\SpecialListusersQueryInfoHook,
505    \MediaWiki\Specials\Hook\SpecialLogAddLogSearchRelationsHook,
506    \MediaWiki\Specials\Hook\SpecialLogResolveLogTypeHook,
507    \MediaWiki\Specials\Hook\SpecialMovepageAfterMoveHook,
508    \MediaWiki\Specials\Hook\SpecialMuteModifyFormFieldsHook,
509    \MediaWiki\Specials\Hook\SpecialNewpagesConditionsHook,
510    \MediaWiki\Specials\Hook\SpecialNewPagesFiltersHook,
511    \MediaWiki\Specials\Hook\SpecialPrefixIndexGetFormFiltersHook,
512    \MediaWiki\Specials\Hook\SpecialPrefixIndexQueryHook,
513    \MediaWiki\Specials\Hook\SpecialRandomGetRandomTitleHook,
514    \MediaWiki\Specials\Hook\SpecialRecentChangesPanelHook,
515    \MediaWiki\Specials\Hook\SpecialResetTokensTokensHook,
516    \MediaWiki\Specials\Hook\SpecialSearchCreateLinkHook,
517    \MediaWiki\Specials\Hook\SpecialSearchGoResultHook,
518    \MediaWiki\Specials\Hook\SpecialSearchNogomatchHook,
519    \MediaWiki\Specials\Hook\SpecialSearchProfilesHook,
520    \MediaWiki\Specials\Hook\SpecialSearchResultsAppendHook,
521    \MediaWiki\Specials\Hook\SpecialSearchResultsHook,
522    \MediaWiki\Specials\Hook\SpecialSearchResultsPrependHook,
523    \MediaWiki\Specials\Hook\SpecialSearchSetupEngineHook,
524    \MediaWiki\Specials\Hook\SpecialStatsAddExtraHook,
525    \MediaWiki\Specials\Hook\SpecialTrackingCategories__generateCatLinkHook,
526    \MediaWiki\Specials\Hook\SpecialTrackingCategories__preprocessHook,
527    \MediaWiki\Specials\Hook\SpecialUploadCompleteHook,
528    \MediaWiki\Specials\Hook\SpecialVersionVersionUrlHook,
529    \MediaWiki\Specials\Hook\SpecialWhatLinksHereQueryHook,
530    \MediaWiki\Specials\Hook\UnblockUserCompleteHook,
531    \MediaWiki\Specials\Hook\UnblockUserHook,
532    \MediaWiki\Specials\Hook\UndeleteForm__showHistoryHook,
533    \MediaWiki\Specials\Hook\UndeleteForm__showRevisionHook,
534    \MediaWiki\Specials\Hook\UploadForm_BeforeProcessingHook,
535    \MediaWiki\Specials\Hook\UploadForm_getInitialPageTextHook,
536    \MediaWiki\Specials\Hook\UploadForm_initialHook,
537    \MediaWiki\Specials\Hook\UploadFormInitDescriptorHook,
538    \MediaWiki\Specials\Hook\UploadFormSourceDescriptorsHook,
539    \MediaWiki\Specials\Hook\UserCanChangeEmailHook,
540    \MediaWiki\Specials\Hook\UserLoginCompleteHook,
541    \MediaWiki\Specials\Hook\UserLogoutCompleteHook,
542    \MediaWiki\Specials\Hook\UsersPagerDoBatchLookupsHook,
543    \MediaWiki\Specials\Hook\WantedPages__getQueryInfoHook,
544    \MediaWiki\Specials\Hook\WatchlistEditorBeforeFormRenderHook,
545    \MediaWiki\Specials\Hook\WatchlistEditorBuildRemoveLineHook,
546    \MediaWiki\Specials\Hook\WhatLinksHerePropsHook,
547    \MediaWiki\Storage\Hook\ArticleEditUpdateNewTalkHook,
548    \MediaWiki\Storage\Hook\ArticlePrepareTextForEditHook,
549    \MediaWiki\Storage\Hook\BeforeRevertedTagUpdateHook,
550    \MediaWiki\Storage\Hook\MultiContentSaveHook,
551    \MediaWiki\Storage\Hook\PageSaveCompleteHook,
552    \MediaWiki\Storage\Hook\ParserOutputStashForEditHook,
553    \MediaWiki\Storage\Hook\RevisionDataUpdatesHook,
554    \MediaWiki\Title\Hook\CanonicalNamespacesHook,
555    \MediaWiki\Title\Hook\NamespaceIsMovableHook,
556    \MediaWiki\Upload\Hook\IsUploadAllowedFromUrlHook,
557    \MediaWiki\Upload\Hook\UploadCompleteHook,
558    \MediaWiki\Upload\Hook\UploadCreateFromRequestHook,
559    \MediaWiki\Upload\Hook\UploadStashFileHook,
560    \MediaWiki\Upload\Hook\UploadVerifyFileHook,
561    \MediaWiki\Upload\Hook\UploadVerifyUploadHook,
562    \MediaWiki\User\Hook\AutopromoteConditionHook,
563    \MediaWiki\User\Hook\ConfirmEmailCompleteHook,
564    \MediaWiki\User\Hook\EmailConfirmedHook,
565    \MediaWiki\User\Hook\GetAutoPromoteGroupsHook,
566    \MediaWiki\User\Hook\InvalidateEmailCompleteHook,
567    \MediaWiki\User\Hook\IsValidPasswordHook,
568    \MediaWiki\User\Hook\PingLimiterHook,
569    \MediaWiki\User\Hook\ReadPrivateUserRequirementsConditionHook,
570    \MediaWiki\User\Hook\SpecialPasswordResetOnSubmitHook,
571    \MediaWiki\User\Hook\User__mailPasswordInternalHook,
572    \MediaWiki\User\Hook\UserAddGroupHook,
573    \MediaWiki\User\Hook\UserArrayFromResultHook,
574    \MediaWiki\User\Hook\UserCanSendEmailHook,
575    \MediaWiki\User\Hook\UserClearNewTalkNotificationHook,
576    \MediaWiki\User\Hook\UserEffectiveGroupsHook,
577    \MediaWiki\User\Hook\UserGetDefaultOptionsHook,
578    \MediaWiki\User\Hook\UserGetEmailAuthenticationTimestampHook,
579    \MediaWiki\User\Hook\UserGetEmailHook,
580    \MediaWiki\User\Hook\UserGetReservedNamesHook,
581    \MediaWiki\User\Hook\UserGroupsChangedHook,
582    \MediaWiki\User\Hook\UserIsBotHook,
583    \MediaWiki\User\Hook\UserIsLockedHook,
584    \MediaWiki\User\Hook\UserLoadAfterLoadFromSessionHook,
585    \MediaWiki\User\Hook\UserLoadDefaultsHook,
586    \MediaWiki\User\Hook\UserLogoutHook,
587    \MediaWiki\User\Hook\UserModifyCreateAccountEmailHook,
588    \MediaWiki\User\Hook\UserPrivilegedGroupsHook,
589    \MediaWiki\User\Hook\UserRemoveGroupHook,
590    \MediaWiki\User\Hook\UserRequirementsConditionHook,
591    \MediaWiki\User\Hook\UserRequirementsConditionDisplayHook,
592    \MediaWiki\User\Hook\UserSaveSettingsHook,
593    \MediaWiki\User\Hook\UserSendConfirmationMailHook,
594    \MediaWiki\User\Hook\UserSetEmailAuthenticationTimestampHook,
595    \MediaWiki\User\Hook\UserSetEmailHook,
596    \MediaWiki\User\Options\Hook\LoadUserOptionsHook,
597    \MediaWiki\User\Options\Hook\LocalUserOptionsStoreSaveHook,
598    \MediaWiki\User\Options\Hook\SaveUserOptionsHook,
599    \MediaWiki\Watchlist\Hook\WatchedItemQueryServiceExtensionsHook
600{
601
602    public function __construct(
603        private readonly HookContainer $container,
604    ) {
605    }
606
607    /** @inheritDoc */
608    public function onAbortAutoblock( $autoblockip, $block ) {
609        return $this->container->run(
610            'AbortAutoblock',
611            [ $autoblockip, $block ]
612        );
613    }
614
615    /** @inheritDoc */
616    public function onAbortDiffCache( $diffEngine ) {
617        return $this->container->run(
618            'AbortDiffCache',
619            [ $diffEngine ]
620        );
621    }
622
623    /** @inheritDoc */
624    public function onActionBeforeFormDisplay( $name, $form, $article ) {
625        return $this->container->run(
626            'ActionBeforeFormDisplay',
627            [ $name, $form, $article ]
628        );
629    }
630
631    /** @inheritDoc */
632    public function onActionModifyFormFields( $name, &$fields, $article ) {
633        return $this->container->run(
634            'ActionModifyFormFields',
635            [ $name, &$fields, $article ]
636        );
637    }
638
639    /** @inheritDoc */
640    public function onAfterBuildFeedLinks( &$feedLinks ) {
641        return $this->container->run(
642            'AfterBuildFeedLinks',
643            [ &$feedLinks ]
644        );
645    }
646
647    /** @inheritDoc */
648    public function onAfterFinalPageOutput( $output ): void {
649        $this->container->run(
650            'AfterFinalPageOutput',
651            [ $output ],
652            [ 'abortable' => false ]
653        );
654    }
655
656    /** @inheritDoc */
657    public function onAfterImportPage( $title, $foreignTitle, $revCount,
658        $sRevCount, $pageInfo
659    ) {
660        return $this->container->run(
661            'AfterImportPage',
662            [ $title, $foreignTitle, $revCount, $sRevCount, $pageInfo ]
663        );
664    }
665
666    /** @inheritDoc */
667    public function onAfterParserFetchFileAndTitle( $parser, $ig, &$html ) {
668        return $this->container->run(
669            'AfterParserFetchFileAndTitle',
670            [ $parser, $ig, &$html ]
671        );
672    }
673
674    /** @inheritDoc */
675    public function onAlternateEdit( $editPage ) {
676        return $this->container->run(
677            'AlternateEdit',
678            [ $editPage ]
679        );
680    }
681
682    /** @inheritDoc */
683    public function onAlternateEditPreview( $editPage, &$content, &$previewHTML,
684        &$parserOutput
685    ) {
686        return $this->container->run(
687            'AlternateEditPreview',
688            [ $editPage, &$content, &$previewHTML, &$parserOutput ]
689        );
690    }
691
692    /** @inheritDoc */
693    public function onAlternateUserMailer( $headers, $to, $from, $subject, $body ) {
694        return $this->container->run(
695            'AlternateUserMailer',
696            [ $headers, $to, $from, $subject, $body ]
697        );
698    }
699
700    /** @inheritDoc */
701    public function onAncientPagesQuery( &$tables, &$conds, &$joinConds ) {
702        return $this->container->run(
703            'AncientPagesQuery',
704            [ &$tables, &$conds, &$joinConds ]
705        );
706    }
707
708    /** @inheritDoc */
709    public function onApiBeforeMain( &$main ) {
710        return $this->container->run(
711            'ApiBeforeMain',
712            [ &$main ]
713        );
714    }
715
716    /** @inheritDoc */
717    public function onArticleConfirmDelete( $article, $output, &$reason ) {
718        return $this->container->run(
719            'ArticleConfirmDelete',
720            [ $article, $output, &$reason ]
721        );
722    }
723
724    /** @inheritDoc */
725    public function onArticleContentOnDiff( $diffEngine, $output ) {
726        return $this->container->run(
727            'ArticleContentOnDiff',
728            [ $diffEngine, $output ]
729        );
730    }
731
732    /** @inheritDoc */
733    public function onArticleDelete( $wikiPage, $user, &$reason, &$error, &$status,
734        $suppress
735    ) {
736        return $this->container->run(
737            'ArticleDelete',
738            [ $wikiPage, $user, &$reason, &$error, &$status, $suppress ]
739        );
740    }
741
742    /** @inheritDoc */
743    public function onArticleDeleteAfterSuccess( $title, $outputPage ) {
744        return $this->container->run(
745            'ArticleDeleteAfterSuccess',
746            [ $title, $outputPage ]
747        );
748    }
749
750    /** @inheritDoc */
751    public function onArticleDeleteComplete( $wikiPage, $user, $reason, $id,
752        $content, $logEntry, $archivedRevisionCount
753    ) {
754        return $this->container->run(
755            'ArticleDeleteComplete',
756            [ $wikiPage, $user, $reason, $id, $content, $logEntry,
757                $archivedRevisionCount ]
758        );
759    }
760
761    /** @inheritDoc */
762    public function onArticleEditUpdateNewTalk( $wikiPage, $recipient ) {
763        return $this->container->run(
764            'ArticleEditUpdateNewTalk',
765            [ $wikiPage, $recipient ]
766        );
767    }
768
769    /** @inheritDoc */
770    public function onArticleFromTitle( $title, &$article, $context ) {
771        return $this->container->run(
772            'ArticleFromTitle',
773            [ $title, &$article, $context ]
774        );
775    }
776
777    /** @inheritDoc */
778    public function onArticleMergeComplete( $targetTitle, $destTitle ) {
779        return $this->container->run(
780            'ArticleMergeComplete',
781            [ $targetTitle, $destTitle ]
782        );
783    }
784
785    /** @inheritDoc */
786    public function onArticlePageDataAfter( $wikiPage, &$row ) {
787        return $this->container->run(
788            'ArticlePageDataAfter',
789            [ $wikiPage, &$row ]
790        );
791    }
792
793    /** @inheritDoc */
794    public function onArticlePageDataBefore( $wikiPage, &$fields, &$tables,
795        &$joinConds
796    ) {
797        return $this->container->run(
798            'ArticlePageDataBefore',
799            [ $wikiPage, &$fields, &$tables, &$joinConds ]
800        );
801    }
802
803    /** @inheritDoc */
804    public function onArticleParserOptions( Article $article, ParserOptions $popts ) {
805        return $this->container->run(
806            'ArticleParserOptions',
807            [ $article, $popts ]
808        );
809    }
810
811    /** @inheritDoc */
812    public function onArticlePrepareTextForEdit( $wikiPage, $popts ) {
813        return $this->container->run(
814            'ArticlePrepareTextForEdit',
815            [ $wikiPage, $popts ]
816        );
817    }
818
819    /** @inheritDoc */
820    public function onArticleProtect( $wikiPage, $user, $protect, $reason ) {
821        return $this->container->run(
822            'ArticleProtect',
823            [ $wikiPage, $user, $protect, $reason ]
824        );
825    }
826
827    /** @inheritDoc */
828    public function onArticleProtectComplete( $wikiPage, $user, $protect, $reason ) {
829        return $this->container->run(
830            'ArticleProtectComplete',
831            [ $wikiPage, $user, $protect, $reason ]
832        );
833    }
834
835    /** @inheritDoc */
836    public function onArticlePurge( $wikiPage ) {
837        return $this->container->run(
838            'ArticlePurge',
839            [ $wikiPage ]
840        );
841    }
842
843    /** @inheritDoc */
844    public function onArticleRevisionViewCustom( $revision, $title, $oldid,
845        $output
846    ) {
847        return $this->container->run(
848            'ArticleRevisionViewCustom',
849            [ $revision, $title, $oldid, $output ]
850        );
851    }
852
853    /** @inheritDoc */
854    public function onArticleRevisionVisibilitySet( $title, $ids,
855        $visibilityChangeMap
856    ) {
857        return $this->container->run(
858            'ArticleRevisionVisibilitySet',
859            [ $title, $ids, $visibilityChangeMap ]
860        );
861    }
862
863    /** @inheritDoc */
864    public function onArticleShowPatrolFooter( $article ) {
865        return $this->container->run(
866            'ArticleShowPatrolFooter',
867            [ $article ]
868        );
869    }
870
871    /** @inheritDoc */
872    public function onArticleUndelete( $title, $create, $comment, $oldPageId,
873        $restoredPages
874    ) {
875        return $this->container->run(
876            'ArticleUndelete',
877            [ $title, $create, $comment, $oldPageId, $restoredPages ]
878        );
879    }
880
881    /** @inheritDoc */
882    public function onArticleUpdateBeforeRedirect( $article, &$sectionanchor,
883        &$extraq
884    ) {
885        return $this->container->run(
886            'ArticleUpdateBeforeRedirect',
887            [ $article, &$sectionanchor, &$extraq ]
888        );
889    }
890
891    /** @inheritDoc */
892    public function onArticleViewFooter( $article, $patrolFooterShown ) {
893        return $this->container->run(
894            'ArticleViewFooter',
895            [ $article, $patrolFooterShown ]
896        );
897    }
898
899    /** @inheritDoc */
900    public function onArticleViewHeader( $article, &$outputDone, &$pcache ) {
901        return $this->container->run(
902            'ArticleViewHeader',
903            [ $article, &$outputDone, &$pcache ]
904        );
905    }
906
907    /** @inheritDoc */
908    public function onArticleViewRedirect( $article ) {
909        return $this->container->run(
910            'ArticleViewRedirect',
911            [ $article ]
912        );
913    }
914
915    /** @inheritDoc */
916    public function onArticle__MissingArticleConditions( &$conds, $logTypes ) {
917        return $this->container->run(
918            'Article::MissingArticleConditions',
919            [ &$conds, $logTypes ]
920        );
921    }
922
923    /** @inheritDoc */
924    public function onAuthChangeFormFields( $requests, $fieldInfo,
925        &$formDescriptor, $action
926    ) {
927        return $this->container->run(
928            'AuthChangeFormFields',
929            [ $requests, $fieldInfo, &$formDescriptor, $action ]
930        );
931    }
932
933    /** @inheritDoc */
934    public function onAuthManagerFilterProviders( array &$providers ): void {
935        $this->container->run(
936            'AuthManagerFilterProviders',
937            [ &$providers ],
938            [ 'abortable' => false ]
939        );
940    }
941
942    /** @inheritDoc */
943    public function onAuthManagerLoginAuthenticateAudit( $response, $user,
944        $username, $extraData
945    ) {
946        return $this->container->run(
947            'AuthManagerLoginAuthenticateAudit',
948            [ $response, $user, $username, $extraData ]
949        );
950    }
951
952    /** @inheritDoc */
953    public function onAuthManagerVerifyAuthentication(
954        ?UserIdentity $user,
955        AuthenticationResponse &$response,
956        AuthManager $authManager,
957        array $info
958    ): bool {
959        return $this->container->run(
960            'AuthManagerVerifyAuthentication',
961            [ $user, &$response, $authManager, $info ],
962        );
963    }
964
965    /** @inheritDoc */
966    public function onAuthPreserveQueryParams( &$params, $options ) {
967        return $this->container->run(
968            'AuthPreserveQueryParams', [ &$params, $options ]
969        );
970    }
971
972    /** @inheritDoc */
973    public function onAuthenticationAttemptThrottled( string $type, ?string $username, ?string $ip ) {
974        return $this->container->run(
975            'AuthenticationAttemptThrottled', [ $type, $username, $ip ]
976        );
977    }
978
979    /** @inheritDoc */
980    public function onAutopromoteCondition( $type, $args, $user, &$result ) {
981        return $this->container->run(
982            'AutopromoteCondition',
983            [ $type, $args, $user, &$result ]
984        );
985    }
986
987    /** @inheritDoc */
988    public function onBacklinkCacheGetConditions( $table, $title, &$conds ) {
989        return $this->container->run(
990            'BacklinkCacheGetConditions',
991            [ $table, $title, &$conds ]
992        );
993    }
994
995    /** @inheritDoc */
996    public function onBacklinkCacheGetPrefix( $table, &$prefix ) {
997        return $this->container->run(
998            'BacklinkCacheGetPrefix',
999            [ $table, &$prefix ]
1000        );
1001    }
1002
1003    /** @inheritDoc */
1004    public function onBadImage( $name, &$bad ) {
1005        return $this->container->run(
1006            'BadImage',
1007            [ $name, &$bad ]
1008        );
1009    }
1010
1011    /** @inheritDoc */
1012    public function onBeforeDisplayNoArticleText( $article ) {
1013        return $this->container->run(
1014            'BeforeDisplayNoArticleText',
1015            [ $article ]
1016        );
1017    }
1018
1019    /** @inheritDoc */
1020    public function onBeforeInitialize( $title, $unused, $output, $user, $request,
1021        $mediaWiki
1022    ) {
1023        return $this->container->run(
1024            'BeforeInitialize',
1025            [ $title, $unused, $output, $user, $request, $mediaWiki ]
1026        );
1027    }
1028
1029    /** @inheritDoc */
1030    public function onBeforePageDisplay( $out, $skin ): void {
1031        $this->container->run(
1032            'BeforePageDisplay',
1033            [ $out, $skin ],
1034            [ 'abortable' => false ]
1035        );
1036    }
1037
1038    /** @inheritDoc */
1039    public function onBeforePageRedirect( $out, &$redirect, &$code ) {
1040        return $this->container->run(
1041            'BeforePageRedirect',
1042            [ $out, &$redirect, &$code ]
1043        );
1044    }
1045
1046    /** @inheritDoc */
1047    public function onBeforeParserFetchFileAndTitle( $parser, $nt, &$options,
1048        &$descQuery
1049    ) {
1050        return $this->container->run(
1051            'BeforeParserFetchFileAndTitle',
1052            [ $parser, $nt, &$options, &$descQuery ]
1053        );
1054    }
1055
1056    /** @inheritDoc */
1057    public function onBeforeParserFetchTemplateRevisionRecord(
1058        ?LinkTarget $contextTitle, LinkTarget $title,
1059        bool &$skip, ?RevisionRecord &$revRecord
1060    ) {
1061        return $this->container->run(
1062            'BeforeParserFetchTemplateRevisionRecord',
1063            [ $contextTitle, $title, &$skip, &$revRecord ]
1064        );
1065    }
1066
1067    /** @inheritDoc */
1068    public function onBeforeRevertedTagUpdate( $wikiPage, $user,
1069        $summary, $flags, $revisionRecord, $editResult, &$approved
1070    ): void {
1071        $this->container->run(
1072            'BeforeRevertedTagUpdate',
1073            [ $wikiPage, $user, $summary, $flags, $revisionRecord, $editResult,
1074                &$approved ],
1075            [ 'abortable' => false ]
1076        );
1077    }
1078
1079    /** @inheritDoc */
1080    public function onBeforeWelcomeCreation( &$welcome_creation_msg,
1081        &$injected_html
1082    ) {
1083        return $this->container->run(
1084            'BeforeWelcomeCreation',
1085            [ &$welcome_creation_msg, &$injected_html ]
1086        );
1087    }
1088
1089    /** @inheritDoc */
1090    public function onBitmapHandlerCheckImageArea( $image, &$params,
1091        &$checkImageAreaHookResult
1092    ) {
1093        return $this->container->run(
1094            'BitmapHandlerCheckImageArea',
1095            [ $image, &$params, &$checkImageAreaHookResult ]
1096        );
1097    }
1098
1099    /** @inheritDoc */
1100    public function onBitmapHandlerTransform( $handler, $image, &$scalerParams,
1101        &$mto
1102    ) {
1103        return $this->container->run(
1104            'BitmapHandlerTransform',
1105            [ $handler, $image, &$scalerParams, &$mto ]
1106        );
1107    }
1108
1109    /** @inheritDoc */
1110    public function onBlockIp( $block, $user, &$reason ) {
1111        return $this->container->run(
1112            'BlockIp',
1113            [ $block, $user, &$reason ]
1114        );
1115    }
1116
1117    /** @inheritDoc */
1118    public function onBlockIpComplete( $block, $user, $priorBlock ) {
1119        return $this->container->run(
1120            'BlockIpComplete',
1121            [ $block, $user, $priorBlock ]
1122        );
1123    }
1124
1125    /** @inheritDoc */
1126    public function onBookInformation( $isbn, $output ) {
1127        return $this->container->run(
1128            'BookInformation',
1129            [ $isbn, $output ]
1130        );
1131    }
1132
1133    /** @inheritDoc */
1134    public function onCanonicalNamespaces( &$namespaces ) {
1135        return $this->container->run(
1136            'CanonicalNamespaces',
1137            [ &$namespaces ]
1138        );
1139    }
1140
1141    /** @inheritDoc */
1142    public function onCategoryAfterPageAdded( $category, $wikiPage ) {
1143        return $this->container->run(
1144            'CategoryAfterPageAdded',
1145            [ $category, $wikiPage ]
1146        );
1147    }
1148
1149    /** @inheritDoc */
1150    public function onCategoryAfterPageRemoved( $category, $wikiPage, $id ) {
1151        return $this->container->run(
1152            'CategoryAfterPageRemoved',
1153            [ $category, $wikiPage, $id ]
1154        );
1155    }
1156
1157    /** @inheritDoc */
1158    public function onCategoryPageView( $catpage ) {
1159        return $this->container->run(
1160            'CategoryPageView',
1161            [ $catpage ]
1162        );
1163    }
1164
1165    /** @inheritDoc */
1166    public function onCategoryViewer__doCategoryQuery( $type, $res ) {
1167        return $this->container->run(
1168            'CategoryViewer::doCategoryQuery',
1169            [ $type, $res ]
1170        );
1171    }
1172
1173    /** @inheritDoc */
1174    public function onCategoryViewer__generateLink( $type, $title, $html, &$link ) {
1175        return $this->container->run(
1176            'CategoryViewer::generateLink',
1177            [ $type, $title, $html, &$link ]
1178        );
1179    }
1180
1181    /** @inheritDoc */
1182    public function onChangeAuthenticationDataAudit( $req, $status ) {
1183        return $this->container->run(
1184            'ChangeAuthenticationDataAudit',
1185            [ $req, $status ]
1186        );
1187    }
1188
1189    /** @inheritDoc */
1190    public function onChangesListInitRows( $changesList, $rows ) {
1191        return $this->container->run(
1192            'ChangesListInitRows',
1193            [ $changesList, $rows ]
1194        );
1195    }
1196
1197    /** @inheritDoc */
1198    public function onChangesListInsertArticleLink( $changesList, &$articlelink,
1199        &$s, $rc, $unpatrolled, $watched
1200    ) {
1201        return $this->container->run(
1202            'ChangesListInsertArticleLink',
1203            [ $changesList, &$articlelink, &$s, $rc, $unpatrolled, $watched ]
1204        );
1205    }
1206
1207    /** @inheritDoc */
1208    public function onChangesListInsertLogEntry( $entry, $context, &$html, &$classes, &$attribs ) {
1209        return $this->container->run(
1210            'ChangesListInsertLogEntry',
1211            [ $entry, $context, &$html, &$classes, &$attribs ]
1212        );
1213    }
1214
1215    /** @inheritDoc */
1216    public function onChangesListSpecialPageQuery( $name, &$tables, &$fields,
1217        &$conds, &$query_options, &$join_conds, $opts
1218    ) {
1219        return $this->container->run(
1220            'ChangesListSpecialPageQuery',
1221            [ $name, &$tables, &$fields, &$conds, &$query_options,
1222                &$join_conds, $opts ]
1223        );
1224    }
1225
1226    /** @inheritDoc */
1227    public function onChangesListSpecialPageStructuredFilters( $special ) {
1228        return $this->container->run(
1229            'ChangesListSpecialPageStructuredFilters',
1230            [ $special ]
1231        );
1232    }
1233
1234    /** @inheritDoc */
1235    public function onChangeTagAfterDelete( $tag, &$status ) {
1236        return $this->container->run(
1237            'ChangeTagAfterDelete',
1238            [ $tag, &$status ]
1239        );
1240    }
1241
1242    /** @inheritDoc */
1243    public function onChangeTagCanCreate( $tag, $user, &$status ) {
1244        return $this->container->run(
1245            'ChangeTagCanCreate',
1246            [ $tag, $user, &$status ]
1247        );
1248    }
1249
1250    /** @inheritDoc */
1251    public function onChangeTagCanDelete( $tag, $user, &$status ) {
1252        return $this->container->run(
1253            'ChangeTagCanDelete',
1254            [ $tag, $user, &$status ]
1255        );
1256    }
1257
1258    /** @inheritDoc */
1259    public function onChangeTagsAfterUpdateTags( $addedTags, $removedTags,
1260        $prevTags, $rc_id, $rev_id, $log_id, $params, $rc, $user
1261    ) {
1262        return $this->container->run(
1263            'ChangeTagsAfterUpdateTags',
1264            [ $addedTags, $removedTags, $prevTags, $rc_id, $rev_id, $log_id,
1265                $params, $rc, $user ]
1266        );
1267    }
1268
1269    /** @inheritDoc */
1270    public function onChangeTagsAllowedAdd( &$allowedTags, $addTags, $user ) {
1271        return $this->container->run(
1272            'ChangeTagsAllowedAdd',
1273            [ &$allowedTags, $addTags, $user ]
1274        );
1275    }
1276
1277    /** @inheritDoc */
1278    public function onChangeTagsListActive( &$tags ) {
1279        return $this->container->run(
1280            'ChangeTagsListActive',
1281            [ &$tags ]
1282        );
1283    }
1284
1285    /** @inheritDoc */
1286    public function onChangeUserGroups( $performer, $user, &$add, &$remove ) {
1287        return $this->container->run(
1288            'ChangeUserGroups',
1289            [ $performer, $user, &$add, &$remove ]
1290        );
1291    }
1292
1293    /** @inheritDoc */
1294    public function onCollation__factory( $collationName, &$collationObject ) {
1295        return $this->container->run(
1296            'Collation::factory',
1297            [ $collationName, &$collationObject ]
1298        );
1299    }
1300
1301    /** @inheritDoc */
1302    public function onConfirmEmailComplete( $user ) {
1303        return $this->container->run(
1304            'ConfirmEmailComplete',
1305            [ $user ]
1306        );
1307    }
1308
1309    /** @inheritDoc */
1310    public function onContentAlterParserOutput( $content, $title, $parserOutput ) {
1311        return $this->container->run(
1312            'ContentAlterParserOutput',
1313            [ $content, $title, $parserOutput ]
1314        );
1315    }
1316
1317    /** @inheritDoc */
1318    public function onContentGetParserOutput( $content, $title, $revId, $options,
1319        $generateHtml, &$parserOutput
1320    ) {
1321        return $this->container->run(
1322            'ContentGetParserOutput',
1323            [ $content, $title, $revId, $options, $generateHtml, &$parserOutput ]
1324        );
1325    }
1326
1327    /** @inheritDoc */
1328    public function onContentHandlerDefaultModelFor( $title, &$model ) {
1329        return $this->container->run(
1330            'ContentHandlerDefaultModelFor',
1331            [ $title, &$model ]
1332        );
1333    }
1334
1335    /** @inheritDoc */
1336    public function onContentHandlerForModelID( $modelName, &$handler ) {
1337        return $this->container->run(
1338            'ContentHandlerForModelID',
1339            [ $modelName, &$handler ]
1340        );
1341    }
1342
1343    /** @inheritDoc */
1344    public function onContentModelCanBeUsedOn( $contentModel, $title, &$ok ) {
1345        return $this->container->run(
1346            'ContentModelCanBeUsedOn',
1347            [ $contentModel, $title, &$ok ]
1348        );
1349    }
1350
1351    /** @inheritDoc */
1352    public function onContentSecurityPolicyDefaultSource( &$defaultSrc,
1353        $policyConfig, $mode
1354    ) {
1355        return $this->container->run(
1356            'ContentSecurityPolicyDefaultSource',
1357            [ &$defaultSrc, $policyConfig, $mode ]
1358        );
1359    }
1360
1361    /** @inheritDoc */
1362    public function onContentSecurityPolicyDirectives( &$directives, $policyConfig,
1363        $mode
1364    ) {
1365        return $this->container->run(
1366            'ContentSecurityPolicyDirectives',
1367            [ &$directives, $policyConfig, $mode ]
1368        );
1369    }
1370
1371    /** @inheritDoc */
1372    public function onContentSecurityPolicyScriptSource( &$scriptSrc,
1373        $policyConfig, $mode
1374    ) {
1375        return $this->container->run(
1376            'ContentSecurityPolicyScriptSource',
1377            [ &$scriptSrc, $policyConfig, $mode ]
1378        );
1379    }
1380
1381    /** @inheritDoc */
1382    public function onContribsPager__getQueryInfo( $pager, &$queryInfo ) {
1383        return $this->container->run(
1384            'ContribsPager::getQueryInfo',
1385            [ $pager, &$queryInfo ]
1386        );
1387    }
1388
1389    /** @inheritDoc */
1390    public function onContribsPager__reallyDoQuery( &$data, $pager, $offset,
1391        $limit, $descending
1392    ) {
1393        return $this->container->run(
1394            'ContribsPager::reallyDoQuery',
1395            [ &$data, $pager, $offset, $limit, $descending ]
1396        );
1397    }
1398
1399    /** @inheritDoc */
1400    public function onContributeCards( &$cards ): void {
1401        $this->container->run(
1402            'ContributeCards',
1403            [ &$cards ]
1404        );
1405    }
1406
1407    /** @inheritDoc */
1408    public function onContributionsLineEnding( $page, &$ret, $row, &$classes,
1409        &$attribs
1410    ) {
1411        return $this->container->run(
1412            'ContributionsLineEnding',
1413            [ $page, &$ret, $row, &$classes, &$attribs ]
1414        );
1415    }
1416
1417    /** @inheritDoc */
1418    public function onContributionsToolLinks( $id, Title $title, array &$tools, SpecialPage $specialPage ) {
1419        return $this->container->run(
1420            'ContributionsToolLinks',
1421            [ $id, $title, &$tools, $specialPage ]
1422        );
1423    }
1424
1425    /** @inheritDoc */
1426    public function onConvertContent( $content, $toModel, $lossy, &$result ) {
1427        return $this->container->run(
1428            'ConvertContent',
1429            [ $content, $toModel, $lossy, &$result ]
1430        );
1431    }
1432
1433    /** @inheritDoc */
1434    public function onCustomEditor( $article, $user ) {
1435        return $this->container->run(
1436            'CustomEditor',
1437            [ $article, $user ]
1438        );
1439    }
1440
1441    /** @inheritDoc */
1442    public function onDeletedContribsPager__reallyDoQuery( &$data, $pager, $offset,
1443        $limit, $descending
1444    ) {
1445        return $this->container->run(
1446            'DeletedContribsPager::reallyDoQuery',
1447            [ &$data, $pager, $offset, $limit, $descending ]
1448        );
1449    }
1450
1451    /** @inheritDoc */
1452    public function onDeletedContributionsLineEnding( $page, &$ret, $row,
1453        &$classes, &$attribs
1454    ) {
1455        return $this->container->run(
1456            'DeletedContributionsLineEnding',
1457            [ $page, &$ret, $row, &$classes, &$attribs ]
1458        );
1459    }
1460
1461    /** @inheritDoc */
1462    public function onDeleteUnknownPreferences( &$where, $db ) {
1463        return $this->container->run(
1464            'DeleteUnknownPreferences',
1465            [ &$where, $db ]
1466        );
1467    }
1468
1469    /** @inheritDoc */
1470    public function onDifferenceEngineAfterLoadNewText( $differenceEngine ) {
1471        return $this->container->run(
1472            'DifferenceEngineAfterLoadNewText',
1473            [ $differenceEngine ]
1474        );
1475    }
1476
1477    /** @inheritDoc */
1478    public function onTextSlotDiffRendererTablePrefix(
1479        TextSlotDiffRenderer $textSlotDiffRenderer,
1480        IContextSource $context,
1481        array &$parts
1482    ) {
1483        return $this->container->run(
1484            'TextSlotDiffRendererTablePrefix',
1485            [ $textSlotDiffRenderer, $context, &$parts ]
1486        );
1487    }
1488
1489    /** @inheritDoc */
1490    public function onDifferenceEngineLoadTextAfterNewContentIsLoaded(
1491        $differenceEngine
1492    ) {
1493        return $this->container->run(
1494            'DifferenceEngineLoadTextAfterNewContentIsLoaded',
1495            [ $differenceEngine ]
1496        );
1497    }
1498
1499    /** @inheritDoc */
1500    public function onDifferenceEngineMarkPatrolledLink( $differenceEngine,
1501        &$markAsPatrolledLink, $rcid
1502    ) {
1503        return $this->container->run(
1504            'DifferenceEngineMarkPatrolledLink',
1505            [ $differenceEngine, &$markAsPatrolledLink, $rcid ]
1506        );
1507    }
1508
1509    /** @inheritDoc */
1510    public function onDifferenceEngineMarkPatrolledRCID( &$rcid, $differenceEngine,
1511        $change, $user
1512    ) {
1513        return $this->container->run(
1514            'DifferenceEngineMarkPatrolledRCID',
1515            [ &$rcid, $differenceEngine, $change, $user ]
1516        );
1517    }
1518
1519    /** @inheritDoc */
1520    public function onDifferenceEngineNewHeader( $differenceEngine, &$newHeader,
1521        $formattedRevisionTools, $nextlink, $rollback, $newminor, $diffOnly, $rdel,
1522        $unhide
1523    ) {
1524        return $this->container->run(
1525            'DifferenceEngineNewHeader',
1526            [ $differenceEngine, &$newHeader, $formattedRevisionTools,
1527                $nextlink, $rollback, $newminor, $diffOnly, $rdel, $unhide ]
1528        );
1529    }
1530
1531    /** @inheritDoc */
1532    public function onDifferenceEngineOldHeader( $differenceEngine, &$oldHeader,
1533        $prevlink, $oldminor, $diffOnly, $ldel, $unhide
1534    ) {
1535        return $this->container->run(
1536            'DifferenceEngineOldHeader',
1537            [ $differenceEngine, &$oldHeader, $prevlink, $oldminor, $diffOnly,
1538                $ldel, $unhide ]
1539        );
1540    }
1541
1542    /** @inheritDoc */
1543    public function onDifferenceEngineOldHeaderNoOldRev( &$oldHeader ) {
1544        return $this->container->run(
1545            'DifferenceEngineOldHeaderNoOldRev',
1546            [ &$oldHeader ]
1547        );
1548    }
1549
1550    /** @inheritDoc */
1551    public function onDifferenceEngineRenderRevisionAddParserOutput(
1552        $differenceEngine, $out, $parserOutput, $wikiPage
1553    ) {
1554        return $this->container->run(
1555            'DifferenceEngineRenderRevisionAddParserOutput',
1556            [ $differenceEngine, $out, $parserOutput, $wikiPage ]
1557        );
1558    }
1559
1560    /** @inheritDoc */
1561    public function onDifferenceEngineRenderRevisionShowFinalPatrolLink() {
1562        return $this->container->run(
1563            'DifferenceEngineRenderRevisionShowFinalPatrolLink',
1564            []
1565        );
1566    }
1567
1568    /** @inheritDoc */
1569    public function onDifferenceEngineShowDiff( $differenceEngine ) {
1570        return $this->container->run(
1571            'DifferenceEngineShowDiff',
1572            [ $differenceEngine ]
1573        );
1574    }
1575
1576    /** @inheritDoc */
1577    public function onDifferenceEngineShowDiffPage( $out ) {
1578        return $this->container->run(
1579            'DifferenceEngineShowDiffPage',
1580            [ $out ]
1581        );
1582    }
1583
1584    /** @inheritDoc */
1585    public function onDifferenceEngineShowDiffPageMaybeShowMissingRevision(
1586        $differenceEngine
1587    ) {
1588        return $this->container->run(
1589            'DifferenceEngineShowDiffPageMaybeShowMissingRevision',
1590            [ $differenceEngine ]
1591        );
1592    }
1593
1594    /** @inheritDoc */
1595    public function onDifferenceEngineShowEmptyOldContent( $differenceEngine ) {
1596        return $this->container->run(
1597            'DifferenceEngineShowEmptyOldContent',
1598            [ $differenceEngine ]
1599        );
1600    }
1601
1602    /** @inheritDoc */
1603    public function onDifferenceEngineViewHeader( $differenceEngine ) {
1604        return $this->container->run(
1605            'DifferenceEngineViewHeader',
1606            [ $differenceEngine ]
1607        );
1608    }
1609
1610    /** @inheritDoc */
1611    public function onDiffTools( $newRevRecord, &$links, $oldRevRecord, $userIdentity ) {
1612        return $this->container->run(
1613            'DiffTools',
1614            [ $newRevRecord, &$links, $oldRevRecord, $userIdentity ]
1615        );
1616    }
1617
1618    /** @inheritDoc */
1619    public function onDisplayOldSubtitle( $article, &$oldid ) {
1620        return $this->container->run(
1621            'DisplayOldSubtitle',
1622            [ $article, &$oldid ]
1623        );
1624    }
1625
1626    /** @inheritDoc */
1627    public function onEditFilterMergedContent( $context, $content, $status,
1628        $summary, $user, $minoredit
1629    ) {
1630        return $this->container->run(
1631            'EditFilterMergedContent',
1632            [ $context, $content, $status, $summary, $user, $minoredit ]
1633        );
1634    }
1635
1636    /** @inheritDoc */
1637    public function onEditFormInitialText( $editPage ) {
1638        return $this->container->run(
1639            'EditFormInitialText',
1640            [ $editPage ]
1641        );
1642    }
1643
1644    /** @inheritDoc */
1645    public function onEditFormPreloadText( &$text, $title ) {
1646        return $this->container->run(
1647            'EditFormPreloadText',
1648            [ &$text, $title ]
1649        );
1650    }
1651
1652    /** @inheritDoc */
1653    public function onEditPageBeforeConflictDiff( $editor, $out ) {
1654        return $this->container->run(
1655            'EditPageBeforeConflictDiff',
1656            [ $editor, $out ]
1657        );
1658    }
1659
1660    /** @inheritDoc */
1661    public function onEditPageBeforeEditButtons( $editpage, &$buttons, &$tabindex ) {
1662        return $this->container->run(
1663            'EditPageBeforeEditButtons',
1664            [ $editpage, &$buttons, &$tabindex ]
1665        );
1666    }
1667
1668    /** @inheritDoc */
1669    public function onEditPageBeforeEditToolbar( &$toolbar ) {
1670        return $this->container->run(
1671            'EditPageBeforeEditToolbar',
1672            [ &$toolbar ]
1673        );
1674    }
1675
1676    /** @inheritDoc */
1677    public function onEditPageCopyrightWarning( $title, &$msg ) {
1678        return $this->container->run(
1679            'EditPageCopyrightWarning',
1680            [ $title, &$msg ]
1681        );
1682    }
1683
1684    /** @inheritDoc */
1685    public function onEditPageGetCheckboxesDefinition( $editpage, &$checkboxes ) {
1686        return $this->container->run(
1687            'EditPageGetCheckboxesDefinition',
1688            [ $editpage, &$checkboxes ]
1689        );
1690    }
1691
1692    /** @inheritDoc */
1693    public function onEditPageGetDiffContent( $editPage, &$newtext ) {
1694        return $this->container->run(
1695            'EditPageGetDiffContent',
1696            [ $editPage, &$newtext ]
1697        );
1698    }
1699
1700    /** @inheritDoc */
1701    public function onEditPageGetPreviewContent( $editPage, &$content ) {
1702        return $this->container->run(
1703            'EditPageGetPreviewContent',
1704            [ $editPage, &$content ]
1705        );
1706    }
1707
1708    /** @inheritDoc */
1709    public function onEditPageNoSuchSection( $editpage, &$res ) {
1710        return $this->container->run(
1711            'EditPageNoSuchSection',
1712            [ $editpage, &$res ]
1713        );
1714    }
1715
1716    /** @inheritDoc */
1717    public function onEditPageTosSummary( $title, &$msg ) {
1718        return $this->container->run(
1719            'EditPageTosSummary',
1720            [ $title, &$msg ]
1721        );
1722    }
1723
1724    /** @inheritDoc */
1725    public function onEditPage__attemptSave( $editpage_Obj ) {
1726        return $this->container->run(
1727            'EditPage::attemptSave',
1728            [ $editpage_Obj ]
1729        );
1730    }
1731
1732    /** @inheritDoc */
1733    public function onEditPage__attemptSave_after( $editpage_Obj, $status,
1734        $resultDetails
1735    ) {
1736        return $this->container->run(
1737            'EditPage::attemptSave:after',
1738            [ $editpage_Obj, $status, $resultDetails ]
1739        );
1740    }
1741
1742    /** @inheritDoc */
1743    public function onEditPage__importFormData( $editpage, $request ) {
1744        return $this->container->run(
1745            'EditPage::importFormData',
1746            [ $editpage, $request ]
1747        );
1748    }
1749
1750    /** @inheritDoc */
1751    public function onEditPage__showEditForm_fields( $editor, $out ) {
1752        return $this->container->run(
1753            'EditPage::showEditForm:fields',
1754            [ $editor, $out ]
1755        );
1756    }
1757
1758    /** @inheritDoc */
1759    public function onEditPage__showEditForm_initial( $editor, $out ) {
1760        return $this->container->run(
1761            'EditPage::showEditForm:initial',
1762            [ $editor, $out ]
1763        );
1764    }
1765
1766    /** @inheritDoc */
1767    public function onEditPage__showReadOnlyForm_initial( $editor, $out ) {
1768        return $this->container->run(
1769            'EditPage::showReadOnlyForm:initial',
1770            [ $editor, $out ]
1771        );
1772    }
1773
1774    /** @inheritDoc */
1775    public function onEditPage__showStandardInputs_options( $editor, $out,
1776        &$tabindex
1777    ) {
1778        return $this->container->run(
1779            'EditPage::showStandardInputs:options',
1780            [ $editor, $out, &$tabindex ]
1781        );
1782    }
1783
1784    /** @inheritDoc */
1785    public function onEmailConfirmed( $user, &$confirmed ) {
1786        return $this->container->run(
1787            'EmailConfirmed',
1788            [ $user, &$confirmed ]
1789        );
1790    }
1791
1792    /** @inheritDoc */
1793    public function onEmailUser( &$to, &$from, &$subject, &$text, &$error ) {
1794        return $this->container->run(
1795            'EmailUser',
1796            [ &$to, &$from, &$subject, &$text, &$error ]
1797        );
1798    }
1799
1800    /** @inheritDoc */
1801    public function onEmailUserCC( &$to, &$from, &$subject, &$text ) {
1802        return $this->container->run(
1803            'EmailUserCC',
1804            [ &$to, &$from, &$subject, &$text ]
1805        );
1806    }
1807
1808    /** @inheritDoc */
1809    public function onEmailUserComplete( $to, $from, $subject, $text ) {
1810        return $this->container->run(
1811            'EmailUserComplete',
1812            [ $to, $from, $subject, $text ]
1813        );
1814    }
1815
1816    /** @inheritDoc */
1817    public function onEmailUserForm( &$form ) {
1818        return $this->container->run(
1819            'EmailUserForm',
1820            [ &$form ]
1821        );
1822    }
1823
1824    /** @inheritDoc */
1825    public function onEmailUserPermissionsErrors( $user, $editToken, &$hookErr ) {
1826        return $this->container->run(
1827            'EmailUserPermissionsErrors',
1828            [ $user, $editToken, &$hookErr ]
1829        );
1830    }
1831
1832    /** @inheritDoc */
1833    public function onEmailUserAuthorizeSend( Authority $sender, StatusValue $status ) {
1834        return $this->container->run(
1835            'EmailUserAuthorizeSend',
1836            [ $sender, $status ]
1837        );
1838    }
1839
1840    /** @inheritDoc */
1841    public function onEmailUserSendEmail(
1842        Authority $from,
1843        MailAddress $fromAddress,
1844        UserEmailContact $to,
1845        MailAddress $toAddress,
1846        string $subject,
1847        string $text,
1848        StatusValue $status
1849    ) {
1850        return $this->container->run(
1851            'EmailUserSendEmail',
1852            [ $from, $fromAddress, $to, $toAddress, $subject, $text, $status ]
1853        );
1854    }
1855
1856    /** @inheritDoc */
1857    public function onEnhancedChangesListModifyBlockLineData( $changesList, &$data,
1858        $rc
1859    ) {
1860        return $this->container->run(
1861            'EnhancedChangesListModifyBlockLineData',
1862            [ $changesList, &$data, $rc ]
1863        );
1864    }
1865
1866    /** @inheritDoc */
1867    public function onEnhancedChangesListModifyLineData( $changesList, &$data,
1868        $block, $rc, &$classes, &$attribs
1869    ) {
1870        return $this->container->run(
1871            'EnhancedChangesListModifyLineData',
1872            [ $changesList, &$data, $block, $rc, &$classes, &$attribs ]
1873        );
1874    }
1875
1876    /** @inheritDoc */
1877    public function onEnhancedChangesList__getLogText( $changesList, &$links,
1878        $block
1879    ) {
1880        return $this->container->run(
1881            'EnhancedChangesList::getLogText',
1882            [ $changesList, &$links, $block ]
1883        );
1884    }
1885
1886    /** @inheritDoc */
1887    public function onExemptFromAccountCreationThrottle( $ip ) {
1888        return $this->container->run(
1889            'ExemptFromAccountCreationThrottle',
1890            [ $ip ]
1891        );
1892    }
1893
1894    /** @inheritDoc */
1895    public function onExtensionTypes( &$extTypes ) {
1896        return $this->container->run(
1897            'ExtensionTypes',
1898            [ &$extTypes ]
1899        );
1900    }
1901
1902    /** @inheritDoc */
1903    public function onFetchChangesList( $user, $skin, &$list, $groups ) {
1904        return $this->container->run(
1905            'FetchChangesList',
1906            [ $user, $skin, &$list, $groups ]
1907        );
1908    }
1909
1910    /** @inheritDoc */
1911    public function onFileDeleteComplete( $file, $oldimage, $article, $user,
1912        $reason
1913    ) {
1914        return $this->container->run(
1915            'FileDeleteComplete',
1916            [ $file, $oldimage, $article, $user, $reason ]
1917        );
1918    }
1919
1920    /** @inheritDoc */
1921    public function onFileTransformed( $file, $thumb, $tmpThumbPath, $thumbPath ) {
1922        return $this->container->run(
1923            'FileTransformed',
1924            [ $file, $thumb, $tmpThumbPath, $thumbPath ]
1925        );
1926    }
1927
1928    /** @inheritDoc */
1929    public function onFileUndeleteComplete( $title, $fileVersions, $user, $reason ) {
1930        return $this->container->run(
1931            'FileUndeleteComplete',
1932            [ $title, $fileVersions, $user, $reason ]
1933        );
1934    }
1935
1936    /** @inheritDoc */
1937    public function onFileUpload( $file, $reupload, $hasDescription ) {
1938        return $this->container->run(
1939            'FileUpload',
1940            [ $file, $reupload, $hasDescription ]
1941        );
1942    }
1943
1944    /** @inheritDoc */
1945    public function onFormatAutocomments( &$comment, $pre, $extractedText, $post, $title,
1946        $local, $wikiId
1947    ) {
1948        return $this->container->run(
1949            'FormatAutocomments',
1950            [ &$comment, $pre, $extractedText, $post, $title, $local, $wikiId ]
1951        );
1952    }
1953
1954    /** @inheritDoc */
1955    public function onGalleryGetModes( &$modeArray ) {
1956        return $this->container->run(
1957            'GalleryGetModes',
1958            [ &$modeArray ]
1959        );
1960    }
1961
1962    /** @inheritDoc */
1963    public function onGetAllBlockActions( &$actions ) {
1964        return $this->container->run(
1965            'GetAllBlockActions',
1966            [ &$actions ],
1967            [ 'abortable' => false ]
1968        );
1969    }
1970
1971    /** @inheritDoc */
1972    public function onGetAutoPromoteGroups( $user, &$promote ) {
1973        return $this->container->run(
1974            'GetAutoPromoteGroups',
1975            [ $user, &$promote ]
1976        );
1977    }
1978
1979    /** @inheritDoc */
1980    public function onGetActionName( IContextSource $context, string &$action ): void {
1981        $this->container->run(
1982            'GetActionName',
1983            [ $context, &$action ],
1984            [ 'abortable' => false ]
1985        );
1986    }
1987
1988    /** @inheritDoc */
1989    public function onGetCacheVaryCookies( $out, &$cookies ) {
1990        return $this->container->run(
1991            'GetCacheVaryCookies',
1992            [ $out, &$cookies ]
1993        );
1994    }
1995
1996    /** @inheritDoc */
1997    public function onGetCanonicalURL( $title, &$url, $query ) {
1998        return $this->container->run(
1999            'GetCanonicalURL',
2000            [ $title, &$url, $query ]
2001        );
2002    }
2003
2004    /** @inheritDoc */
2005    public function onGetContentModels( &$models ) {
2006        return $this->container->run(
2007            'GetContentModels',
2008            [ &$models ]
2009        );
2010    }
2011
2012    /** @inheritDoc */
2013    public function onGetDefaultSortkey( $title, &$sortkey ) {
2014        return $this->container->run(
2015            'GetDefaultSortkey',
2016            [ $title, &$sortkey ]
2017        );
2018    }
2019
2020    /** @inheritDoc */
2021    public function onGetDifferenceEngine( $context, $old, $new, $refreshCache,
2022        $unhide, &$differenceEngine
2023    ) {
2024        return $this->container->run(
2025            'GetDifferenceEngine',
2026            [ $context, $old, $new, $refreshCache, $unhide,
2027                &$differenceEngine ]
2028        );
2029    }
2030
2031    /** @inheritDoc */
2032    public function onGetDoubleUnderscoreIDs( &$doubleUnderscoreIDs ) {
2033        return $this->container->run(
2034            'GetDoubleUnderscoreIDs',
2035            [ &$doubleUnderscoreIDs ]
2036        );
2037    }
2038
2039    /** @inheritDoc */
2040    public function onGetExtendedMetadata( &$combinedMeta, $file, $context,
2041        $single, &$maxCacheTime
2042    ) {
2043        return $this->container->run(
2044            'GetExtendedMetadata',
2045            [ &$combinedMeta, $file, $context, $single, &$maxCacheTime ]
2046        );
2047    }
2048
2049    /** @inheritDoc */
2050    public function onGetFullURL( $title, &$url, $query ) {
2051        return $this->container->run(
2052            'GetFullURL',
2053            [ $title, &$url, $query ]
2054        );
2055    }
2056
2057    /** @inheritDoc */
2058    public function onGetHumanTimestamp( &$output, $timestamp, $relativeTo, $user,
2059        $lang
2060    ) {
2061        return $this->container->run(
2062            'GetHumanTimestamp',
2063            [ &$output, $timestamp, $relativeTo, $user, $lang ]
2064        );
2065    }
2066
2067    /** @inheritDoc */
2068    public function onGetInternalURL( $title, &$url, $query ) {
2069        return $this->container->run(
2070            'GetInternalURL',
2071            [ $title, &$url, $query ]
2072        );
2073    }
2074
2075    /** @inheritDoc */
2076    public function onGetIP( &$ip ) {
2077        return $this->container->run(
2078            'GetIP',
2079            [ &$ip ]
2080        );
2081    }
2082
2083    /** @inheritDoc */
2084    public function onGetLangPreferredVariant( &$req ) {
2085        return $this->container->run(
2086            'GetLangPreferredVariant',
2087            [ &$req ]
2088        );
2089    }
2090
2091    /** @inheritDoc */
2092    public function onGetLinkColours( $linkcolour_ids, &$colours, $title ) {
2093        return $this->container->run(
2094            'GetLinkColours',
2095            [ $linkcolour_ids, &$colours, $title ]
2096        );
2097    }
2098
2099    /** @inheritDoc */
2100    public function onGetLocalURL( $title, &$url, $query ) {
2101        return $this->container->run(
2102            'GetLocalURL',
2103            [ $title, &$url, $query ]
2104        );
2105    }
2106
2107    /** @inheritDoc */
2108    public function onGetLocalURL__Article( $title, &$url ) {
2109        return $this->container->run(
2110            'GetLocalURL::Article',
2111            [ $title, &$url ]
2112        );
2113    }
2114
2115    /** @inheritDoc */
2116    public function onGetLocalURL__Internal( $title, &$url, $query ) {
2117        return $this->container->run(
2118            'GetLocalURL::Internal',
2119            [ $title, &$url, $query ]
2120        );
2121    }
2122
2123    /** @inheritDoc */
2124    public function onGetLogTypesOnUser( &$types ) {
2125        return $this->container->run(
2126            'GetLogTypesOnUser',
2127            [ &$types ]
2128        );
2129    }
2130
2131    /** @inheritDoc */
2132    public function onGetMagicVariableIDs( &$variableIDs ) {
2133        return $this->container->run(
2134            'GetMagicVariableIDs',
2135            [ &$variableIDs ]
2136        );
2137    }
2138
2139    /** @inheritDoc */
2140    public function onGetMetadataVersion( &$version ) {
2141        return $this->container->run(
2142            'GetMetadataVersion',
2143            [ &$version ]
2144        );
2145    }
2146
2147    /** @inheritDoc */
2148    public function onGetNewMessagesAlert( &$newMessagesAlert, $newtalks, $user,
2149        $out
2150    ) {
2151        return $this->container->run(
2152            'GetNewMessagesAlert',
2153            [ &$newMessagesAlert, $newtalks, $user, $out ]
2154        );
2155    }
2156
2157    /** @inheritDoc */
2158    public function onGetPreferences( $user, &$preferences ) {
2159        return $this->container->run(
2160            'GetPreferences',
2161            [ $user, &$preferences ]
2162        );
2163    }
2164
2165    /** @inheritDoc */
2166    public function onGetRelativeTimestamp( &$output, &$diff, $timestamp,
2167        $relativeTo, $user, $lang
2168    ) {
2169        return $this->container->run(
2170            'GetRelativeTimestamp',
2171            [ &$output, &$diff, $timestamp, $relativeTo, $user, $lang ]
2172        );
2173    }
2174
2175    /** @inheritDoc */
2176    public function onGetSlotDiffRenderer( $contentHandler, &$slotDiffRenderer,
2177        $context
2178    ) {
2179        return $this->container->run(
2180            'GetSlotDiffRenderer',
2181            [ $contentHandler, &$slotDiffRenderer, $context ]
2182        );
2183    }
2184
2185    /** @inheritDoc */
2186    public function onGetUserBlock( $user, $ip, &$block ) {
2187        return $this->container->run(
2188            'GetUserBlock',
2189            [ $user, $ip, &$block ]
2190        );
2191    }
2192
2193    /** @inheritDoc */
2194    public function onPermissionStatusAudit(
2195        LinkTarget $title,
2196        UserIdentity $user,
2197        string $action,
2198        string $rigor,
2199        PermissionStatus $status
2200    ): void {
2201        $this->container->run(
2202            'PermissionStatusAudit',
2203            [ $title, $user, $action, $rigor, $status ],
2204            [ 'abortable' => false ]
2205        );
2206    }
2207
2208    /** @inheritDoc */
2209    public function onGetSecurityLogContext( array $info, array &$context ): void {
2210        $this->container->run(
2211            'GetSecurityLogContext',
2212            [ $info, &$context ],
2213            [ 'abortable' => false ]
2214        );
2215    }
2216
2217    /** @inheritDoc */
2218    public function onGetSessionJwtData( ?UserIdentity $user, array &$jwtData ): void {
2219        $this->container->run(
2220            'GetSessionJwtData',
2221            [ $user, &$jwtData ],
2222            [ 'abortable' => false ]
2223        );
2224    }
2225
2226    /** @inheritDoc */
2227    public function onGetUserPermissionsErrors( $title, $user, $action, &$result ) {
2228        return $this->container->run(
2229            'getUserPermissionsErrors',
2230            [ $title, $user, $action, &$result ]
2231        );
2232    }
2233
2234    /** @inheritDoc */
2235    public function onGetUserPermissionsErrorsExpensive( $title, $user, $action,
2236        &$result
2237    ) {
2238        return $this->container->run(
2239            'getUserPermissionsErrorsExpensive',
2240            [ $title, $user, $action, &$result ]
2241        );
2242    }
2243
2244    /** @inheritDoc */
2245    public function onGitViewers( &$extTypes ) {
2246        return $this->container->run(
2247            'GitViewers',
2248            [ &$extTypes ]
2249        );
2250    }
2251
2252    /** @inheritDoc */
2253    public function onHistoryPageToolLinks( IContextSource $context, LinkRenderer $linkRenderer, array &$links ) {
2254        return $this->container->run(
2255            'HistoryPageToolLinks',
2256            [ $context, $linkRenderer, &$links ]
2257        );
2258    }
2259
2260    /** @inheritDoc */
2261    public function onHistoryTools( $revRecord, &$links, $prevRevRecord, $userIdentity ) {
2262        return $this->container->run(
2263            'HistoryTools',
2264            [ $revRecord, &$links, $prevRevRecord, $userIdentity ]
2265        );
2266    }
2267
2268    /** @inheritDoc */
2269    public function onHtmlCacheUpdaterAppendUrls( $title, $mode, &$append ) {
2270        return $this->container->run(
2271            'HtmlCacheUpdaterAppendUrls',
2272            [ $title, $mode, &$append ]
2273        );
2274    }
2275
2276    /** @inheritDoc */
2277    public function onHtmlCacheUpdaterVaryUrls( $urls, &$append ) {
2278        return $this->container->run(
2279            'HtmlCacheUpdaterVaryUrls',
2280            [ $urls, &$append ]
2281        );
2282    }
2283
2284    /** @inheritDoc */
2285    public function onHTMLFileCache__useFileCache( $context ) {
2286        return $this->container->run(
2287            'HTMLFileCache::useFileCache',
2288            [ $context ]
2289        );
2290    }
2291
2292    /** @inheritDoc */
2293    public function onHtmlPageLinkRendererBegin( $linkRenderer, $target, &$text,
2294        &$customAttribs, &$query, &$ret
2295    ) {
2296        return $this->container->run(
2297            'HtmlPageLinkRendererBegin',
2298            [ $linkRenderer, $target, &$text, &$customAttribs, &$query, &$ret ]
2299        );
2300    }
2301
2302    /** @inheritDoc */
2303    public function onHtmlPageLinkRendererEnd( $linkRenderer, $target, $isKnown,
2304        &$text, &$attribs, &$ret
2305    ) {
2306        return $this->container->run(
2307            'HtmlPageLinkRendererEnd',
2308            [ $linkRenderer, $target, $isKnown, &$text, &$attribs, &$ret ]
2309        );
2310    }
2311
2312    /** @inheritDoc */
2313    public function onImageBeforeProduceHTML( $linker, &$title, &$file,
2314        &$frameParams, &$handlerParams, &$time, &$res, $parser, &$query, &$widthOption
2315    ) {
2316        return $this->container->run(
2317            'ImageBeforeProduceHTML',
2318            [ $linker, &$title, &$file, &$frameParams, &$handlerParams, &$time,
2319                &$res, $parser, &$query, &$widthOption ]
2320        );
2321    }
2322
2323    /** @inheritDoc */
2324    public function onImageOpenShowImageInlineBefore( $imagePage, $output ) {
2325        return $this->container->run(
2326            'ImageOpenShowImageInlineBefore',
2327            [ $imagePage, $output ]
2328        );
2329    }
2330
2331    /** @inheritDoc */
2332    public function onImagePageAfterImageLinks( $imagePage, &$html ) {
2333        return $this->container->run(
2334            'ImagePageAfterImageLinks',
2335            [ $imagePage, &$html ]
2336        );
2337    }
2338
2339    /** @inheritDoc */
2340    public function onImagePageFileHistoryLine( $imageHistoryList, $file, &$line, &$css ) {
2341        return $this->container->run(
2342            'ImagePageFileHistoryLine',
2343            [ $imageHistoryList, $file, &$line, &$css ]
2344        );
2345    }
2346
2347    /** @inheritDoc */
2348    public function onImagePageFindFile( $page, &$file, &$displayFile ) {
2349        return $this->container->run(
2350            'ImagePageFindFile',
2351            [ $page, &$file, &$displayFile ]
2352        );
2353    }
2354
2355    /** @inheritDoc */
2356    public function onImagePageShowTOC( $page, &$toc ) {
2357        return $this->container->run(
2358            'ImagePageShowTOC',
2359            [ $page, &$toc ]
2360        );
2361    }
2362
2363    /** @inheritDoc */
2364    public function onImgAuthBeforeStream( &$title, &$path, &$name, &$result ) {
2365        return $this->container->run(
2366            'ImgAuthBeforeStream',
2367            [ &$title, &$path, &$name, &$result ]
2368        );
2369    }
2370
2371    /** @inheritDoc */
2372    public function onImgAuthModifyHeaders( $title, &$headers ) {
2373        return $this->container->run(
2374            'ImgAuthModifyHeaders',
2375            [ $title, &$headers ]
2376        );
2377    }
2378
2379    /** @inheritDoc */
2380    public function onImportHandleLogItemXMLTag( $reader, $logInfo ) {
2381        return $this->container->run(
2382            'ImportHandleLogItemXMLTag',
2383            [ $reader, $logInfo ]
2384        );
2385    }
2386
2387    /** @inheritDoc */
2388    public function onImportHandlePageXMLTag( $reader, &$pageInfo ) {
2389        return $this->container->run(
2390            'ImportHandlePageXMLTag',
2391            [ $reader, &$pageInfo ]
2392        );
2393    }
2394
2395    /** @inheritDoc */
2396    public function onImportHandleRevisionXMLTag( $reader, $pageInfo,
2397        $revisionInfo
2398    ) {
2399        return $this->container->run(
2400            'ImportHandleRevisionXMLTag',
2401            [ $reader, $pageInfo, $revisionInfo ]
2402        );
2403    }
2404
2405    /** @inheritDoc */
2406    public function onImportHandleContentXMLTag( $reader, $contentInfo ) {
2407        return $this->container->run(
2408            'ImportHandleContentXMLTag',
2409            [ $reader, $contentInfo ] );
2410    }
2411
2412    /** @inheritDoc */
2413    public function onImportHandleToplevelXMLTag( $reader ) {
2414        return $this->container->run(
2415            'ImportHandleToplevelXMLTag',
2416            [ $reader ]
2417        );
2418    }
2419
2420    /** @inheritDoc */
2421    public function onImportHandleUnknownUser( $name ) {
2422        return $this->container->run(
2423            'ImportHandleUnknownUser',
2424            [ $name ]
2425        );
2426    }
2427
2428    /** @inheritDoc */
2429    public function onImportHandleUploadXMLTag( $reader, $revisionInfo ) {
2430        return $this->container->run(
2431            'ImportHandleUploadXMLTag',
2432            [ $reader, $revisionInfo ]
2433        );
2434    }
2435
2436    /** @inheritDoc */
2437    public function onImportLogInterwikiLink( &$fullInterwikiPrefix, &$pageTitle ) {
2438        return $this->container->run(
2439            'ImportLogInterwikiLink',
2440            [ &$fullInterwikiPrefix, &$pageTitle ]
2441        );
2442    }
2443
2444    /** @inheritDoc */
2445    public function onImportSources( &$importSources ) {
2446        return $this->container->run(
2447            'ImportSources',
2448            [ &$importSources ]
2449        );
2450    }
2451
2452    /** @inheritDoc */
2453    public function onInfoAction( $context, &$pageInfo ) {
2454        return $this->container->run(
2455            'InfoAction',
2456            [ $context, &$pageInfo ]
2457        );
2458    }
2459
2460    /** @inheritDoc */
2461    public function onInitializeArticleMaybeRedirect( $title, $request,
2462        &$ignoreRedirect, &$target, &$article
2463    ) {
2464        return $this->container->run(
2465            'InitializeArticleMaybeRedirect',
2466            [ $title, $request, &$ignoreRedirect, &$target, &$article ]
2467        );
2468    }
2469
2470    /** @inheritDoc */
2471    public function onInternalParseBeforeLinks( $parser, &$text, $stripState ) {
2472        return $this->container->run(
2473            'InternalParseBeforeLinks',
2474            [ $parser, &$text, $stripState ]
2475        );
2476    }
2477
2478    /** @inheritDoc */
2479    public function onInterwikiLoadPrefix( $prefix, &$iwData ) {
2480        return $this->container->run(
2481            'InterwikiLoadPrefix',
2482            [ $prefix, &$iwData ]
2483        );
2484    }
2485
2486    /** @inheritDoc */
2487    public function onInvalidateEmailComplete( $user ) {
2488        return $this->container->run(
2489            'InvalidateEmailComplete',
2490            [ $user ]
2491        );
2492    }
2493
2494    /** @inheritDoc */
2495    public function onIRCLineURL( &$url, &$query, $rc ) {
2496        return $this->container->run(
2497            'IRCLineURL',
2498            [ &$url, &$query, $rc ]
2499        );
2500    }
2501
2502    /** @inheritDoc */
2503    public function onIsFileCacheable( $article ) {
2504        return $this->container->run(
2505            'IsFileCacheable',
2506            [ $article ]
2507        );
2508    }
2509
2510    /** @inheritDoc */
2511    public function onIsTrustedProxy( $ip, &$result ) {
2512        return $this->container->run(
2513            'IsTrustedProxy',
2514            [ $ip, &$result ]
2515        );
2516    }
2517
2518    /** @inheritDoc */
2519    public function onIsUploadAllowedFromUrl( $url, &$allowed ) {
2520        return $this->container->run(
2521            'IsUploadAllowedFromUrl',
2522            [ $url, &$allowed ]
2523        );
2524    }
2525
2526    /** @inheritDoc */
2527    public function onIsValidEmailAddr( $addr, &$result ) {
2528        return $this->container->run(
2529            'isValidEmailAddr',
2530            [ $addr, &$result ]
2531        );
2532    }
2533
2534    /** @inheritDoc */
2535    public function onIsValidPassword( $password, &$result, $user ) {
2536        return $this->container->run(
2537            'isValidPassword',
2538            [ $password, &$result, $user ]
2539        );
2540    }
2541
2542    /** @inheritDoc */
2543    public function onJsonValidateSave( JsonContent $content, PageIdentity $pageIdentity, StatusValue $status ) {
2544        return $this->container->run(
2545            'JsonValidateSave',
2546            [ $content, $pageIdentity, &$status ]
2547        );
2548    }
2549
2550    /** @inheritDoc */
2551    public function onLanguageGetNamespaces( &$namespaces ) {
2552        return $this->container->run(
2553            'LanguageGetNamespaces',
2554            [ &$namespaces ]
2555        );
2556    }
2557
2558    /** @inheritDoc */
2559    public function onLanguageGetTranslatedLanguageNames( &$names, $code ) {
2560        return $this->container->run(
2561            'LanguageGetTranslatedLanguageNames',
2562            [ &$names, $code ]
2563        );
2564    }
2565
2566    /** @inheritDoc */
2567    public function onLanguageLinks( $title, &$links, &$linkFlags ) {
2568        return $this->container->run(
2569            'LanguageLinks',
2570            [ $title, &$links, &$linkFlags ]
2571        );
2572    }
2573
2574    /** @inheritDoc */
2575    public function onLanguageSelector( $out, $cssClassName ) {
2576        return $this->container->run(
2577            'LanguageSelector',
2578            [ $out, $cssClassName ]
2579        );
2580    }
2581
2582    /** @inheritDoc */
2583    public function onLanguage__getMessagesFileName( $code, &$file ) {
2584        return $this->container->run(
2585            'Language::getMessagesFileName',
2586            [ $code, &$file ]
2587        );
2588    }
2589
2590    /** @inheritDoc */
2591    public function onLinkerGenerateRollbackLink( $revRecord, $context, $options, &$inner ) {
2592        return $this->container->run(
2593            'LinkerGenerateRollbackLink',
2594            [ $revRecord, $context, $options, &$inner ]
2595        );
2596    }
2597
2598    /** @inheritDoc */
2599    public function onLinkerMakeExternalImage( &$url, &$alt, &$img ) {
2600        return $this->container->run(
2601            'LinkerMakeExternalImage',
2602            [ &$url, &$alt, &$img ]
2603        );
2604    }
2605
2606    /** @inheritDoc */
2607    public function onLinkerMakeExternalLink( &$url, &$text, &$link, &$attribs,
2608        $linkType
2609    ) {
2610        return $this->container->run(
2611            'LinkerMakeExternalLink',
2612            [ &$url, &$text, &$link, &$attribs, $linkType ]
2613        );
2614    }
2615
2616    /** @inheritDoc */
2617    public function onLinkerMakeExternalLinkWithContext(
2618        ?string &$url, string &$text, array &$attribs,
2619        string $linkType, ParsoidLinkTarget $contextTitle
2620    ) {
2621        return $this->container->run(
2622            'LinkerMakeExternalLinkWithContext',
2623            [ &$url, &$text, &$attribs, $linkType, $contextTitle ]
2624        );
2625    }
2626
2627    /** @inheritDoc */
2628    public function onLinkerMakeMediaLinkFile( $title, $file, &$html, &$attribs,
2629        &$ret
2630    ) {
2631        return $this->container->run(
2632            'LinkerMakeMediaLinkFile',
2633            [ $title, $file, &$html, &$attribs, &$ret ]
2634        );
2635    }
2636
2637    /** @inheritDoc */
2638    public function onLinksUpdate( $linksUpdate ) {
2639        return $this->container->run(
2640            'LinksUpdate',
2641            [ $linksUpdate ]
2642        );
2643    }
2644
2645    /** @inheritDoc */
2646    public function onLinksUpdateComplete( $linksUpdate, $ticket ) {
2647        return $this->container->run(
2648            'LinksUpdateComplete',
2649            [ $linksUpdate, $ticket ]
2650        );
2651    }
2652
2653    /** @inheritDoc */
2654    public function onListDefinedTags( &$tags ) {
2655        return $this->container->run(
2656            'ListDefinedTags',
2657            [ &$tags ]
2658        );
2659    }
2660
2661    /** @inheritDoc */
2662    public function onListRestrictedTags( array &$restrictedTags ): void {
2663        $this->container->run(
2664            'ListRestrictedTags',
2665            [ &$restrictedTags ],
2666            [ 'abortable' => false ]
2667        );
2668    }
2669
2670    /** @inheritDoc */
2671    public function onLoadExtensionSchemaUpdates( $updater ) {
2672        return $this->container->run(
2673            'LoadExtensionSchemaUpdates',
2674            [ $updater ],
2675            [ 'noServices' => true ]
2676        );
2677    }
2678
2679    /** @inheritDoc */
2680    public function onLocalFilePurgeThumbnails( $file, $archiveName, $urls ) {
2681        return $this->container->run(
2682            'LocalFilePurgeThumbnails',
2683            [ $file, $archiveName, $urls ]
2684        );
2685    }
2686
2687    /** @inheritDoc */
2688    public function onLocalFile__getHistory( $file, &$tables, &$fields, &$conds,
2689        &$opts, &$join_conds
2690    ) {
2691        return $this->container->run(
2692            'LocalFile::getHistory',
2693            [ $file, &$tables, &$fields, &$conds, &$opts, &$join_conds ]
2694        );
2695    }
2696
2697    /** @inheritDoc */
2698    public function onLocalisationCacheRecache( $cache, $code, &$alldata, $unused ) {
2699        return $this->container->run(
2700            'LocalisationCacheRecache',
2701            [ $cache, $code, &$alldata, $unused ]
2702        );
2703    }
2704
2705    /** @inheritDoc */
2706    public function onLocalisationCacheRecacheFallback( $cache, $code, &$alldata ) {
2707        return $this->container->run(
2708            'LocalisationCacheRecacheFallback',
2709            [ $cache, $code, &$alldata ]
2710        );
2711    }
2712
2713    /** @inheritDoc */
2714    public function onLocalUserCreated( $user, $autocreated ) {
2715        return $this->container->run(
2716            'LocalUserCreated',
2717            [ $user, $autocreated ]
2718        );
2719    }
2720
2721    /** @inheritDoc */
2722    public function onLogEventsListGetExtraInputs( $type, $logEventsList, &$input,
2723        &$formDescriptor
2724    ) {
2725        return $this->container->run(
2726            'LogEventsListGetExtraInputs',
2727            [ $type, $logEventsList, &$input, &$formDescriptor ]
2728        );
2729    }
2730
2731    /** @inheritDoc */
2732    public function onLogEventsListLineEnding( $page, &$ret, $entry, &$classes,
2733        &$attribs
2734    ) {
2735        return $this->container->run(
2736            'LogEventsListLineEnding',
2737            [ $page, &$ret, $entry, &$classes, &$attribs ]
2738        );
2739    }
2740
2741    /** @inheritDoc */
2742    public function onLogEventsListShowLogExtract( &$s, $types, $page, $user,
2743        $param
2744    ) {
2745        return $this->container->run(
2746            'LogEventsListShowLogExtract',
2747            [ &$s, $types, $page, $user, $param ]
2748        );
2749    }
2750
2751    /** @inheritDoc */
2752    public function onLogException( $e, $suppressed ) {
2753        return $this->container->run(
2754            'LogException',
2755            [ $e, $suppressed ]
2756        );
2757    }
2758
2759    /** @inheritDoc */
2760    public function onLoginFormValidErrorMessages( array &$messages ) {
2761        return $this->container->run(
2762            'LoginFormValidErrorMessages',
2763            [ &$messages ]
2764        );
2765    }
2766
2767    /** @inheritDoc */
2768    public function onCreateAccountShouldShowUsernamePolicyPopover( $specialPage, &$show ) {
2769        return $this->container->run(
2770            'CreateAccountShouldShowUsernamePolicyPopover',
2771            [ $specialPage, &$show ]
2772        );
2773    }
2774
2775    /** @inheritDoc */
2776    public function onLogLine( $log_type, $log_action, $title, $paramArray,
2777        &$comment, &$revert, $time
2778    ) {
2779        return $this->container->run(
2780            'LogLine',
2781            [ $log_type, $log_action, $title, $paramArray, &$comment,
2782                &$revert, $time ]
2783        );
2784    }
2785
2786    /** @inheritDoc */
2787    public function onLonelyPagesQuery( &$tables, &$conds, &$joinConds ) {
2788        return $this->container->run(
2789            'LonelyPagesQuery',
2790            [ &$tables, &$conds, &$joinConds ]
2791        );
2792    }
2793
2794    /** @inheritDoc */
2795    public function onMaintenanceRefreshLinksInit( $refreshLinks ) {
2796        return $this->container->run(
2797            'MaintenanceRefreshLinksInit',
2798            [ $refreshLinks ]
2799        );
2800    }
2801
2802    /** @inheritDoc */
2803    public function onMaintenanceShellStart(): void {
2804        $this->container->run(
2805            'MaintenanceShellStart',
2806            [],
2807            [ 'abortable' => false ]
2808        );
2809    }
2810
2811    /** @inheritDoc */
2812    public function onMaintenanceUpdateAddParams( &$params ) {
2813        return $this->container->run(
2814            'MaintenanceUpdateAddParams',
2815            [ &$params ]
2816        );
2817    }
2818
2819    /** @inheritDoc */
2820    public function onMakeGlobalVariablesScript( &$vars, $out ): void {
2821        $this->container->run(
2822            'MakeGlobalVariablesScript',
2823            [ &$vars, $out ],
2824            [ 'abortable' => false ]
2825        );
2826    }
2827
2828    /** @inheritDoc */
2829    public function onManualLogEntryBeforePublish( $logEntry ): void {
2830        $this->container->run(
2831            'ManualLogEntryBeforePublish',
2832            [ $logEntry ],
2833            [ 'abortable' => false ]
2834        );
2835    }
2836
2837    /** @inheritDoc */
2838    public function onMarkPatrolled( $rcid, $user, $wcOnlySysopsCanPatrol, $auto,
2839        &$tags
2840    ) {
2841        return $this->container->run(
2842            'MarkPatrolled',
2843            [ $rcid, $user, $wcOnlySysopsCanPatrol, $auto, &$tags ]
2844        );
2845    }
2846
2847    /** @inheritDoc */
2848    public function onMarkPatrolledComplete( $rcid, $user, $wcOnlySysopsCanPatrol,
2849        $auto
2850    ) {
2851        return $this->container->run(
2852            'MarkPatrolledComplete',
2853            [ $rcid, $user, $wcOnlySysopsCanPatrol, $auto ]
2854        );
2855    }
2856
2857    /** @inheritDoc */
2858    public function onMarkPatrolledAudit( $recentChange, $userIdentity, int $logId ): void {
2859        $this->container->run(
2860            'MarkPatrolledAudit',
2861            [ $recentChange, $userIdentity, $logId ],
2862            [ 'abortable' => false ]
2863        );
2864    }
2865
2866    /** @inheritDoc */
2867    public function onMediaWikiPerformAction( $output, $article, $title, $user,
2868        $request, $mediaWiki
2869    ) {
2870        return $this->container->run(
2871            'MediaWikiPerformAction',
2872            [ $output, $article, $title, $user, $request, $mediaWiki ]
2873        );
2874    }
2875
2876    /** @inheritDoc */
2877    public function onMediaWikiServices( $services ) {
2878        return $this->container->run(
2879            'MediaWikiServices',
2880            [ $services ],
2881            [ 'noServices' => true ]
2882        );
2883    }
2884
2885    /** @inheritDoc */
2886    public function onMessageCacheFetchOverrides( array &$messages ): void {
2887        $this->container->run(
2888            'MessageCacheFetchOverrides',
2889            [ &$messages ],
2890            [ 'abortable' => false ]
2891        );
2892    }
2893
2894    /** @inheritDoc */
2895    public function onMessageCacheReplace( $title, $text ) {
2896        return $this->container->run(
2897            'MessageCacheReplace',
2898            [ $title, $text ]
2899        );
2900    }
2901
2902    /** @inheritDoc */
2903    public function onMessageCache__get( &$key ) {
2904        return $this->container->run(
2905            'MessageCache::get',
2906            [ &$key ]
2907        );
2908    }
2909
2910    /** @inheritDoc */
2911    public function onMessagePostProcessHtml( &$value, $format, $key ): void {
2912        $this->container->run(
2913            'MessagePostProcessHtml',
2914            [ &$value, $format, $key ],
2915            [ 'abortable' => false ]
2916        );
2917    }
2918
2919    /** @inheritDoc */
2920    public function onMessagePostProcessText( &$value, $format, $key ): void {
2921        $this->container->run(
2922            'MessagePostProcessText',
2923            [ &$value, $format, $key ],
2924            [ 'abortable' => false ]
2925        );
2926    }
2927
2928    /** @inheritDoc */
2929    public function onMessagesPreLoad( $title, &$message, $code ) {
2930        return $this->container->run(
2931            'MessagesPreLoad',
2932            [ $title, &$message, $code ]
2933        );
2934    }
2935
2936    /** @inheritDoc */
2937    public function onMimeMagicGuessFromContent( $mimeMagic, &$head, &$tail, $file,
2938        &$mime
2939    ) {
2940        return $this->container->run(
2941            'MimeMagicGuessFromContent',
2942            [ $mimeMagic, &$head, &$tail, $file, &$mime ]
2943        );
2944    }
2945
2946    /** @inheritDoc */
2947    public function onMimeMagicImproveFromExtension( $mimeMagic, $ext, &$mime ) {
2948        return $this->container->run(
2949            'MimeMagicImproveFromExtension',
2950            [ $mimeMagic, $ext, &$mime ]
2951        );
2952    }
2953
2954    /** @inheritDoc */
2955    public function onMimeMagicInit( $mimeMagic ) {
2956        return $this->container->run(
2957            'MimeMagicInit',
2958            [ $mimeMagic ]
2959        );
2960    }
2961
2962    /** @inheritDoc */
2963    public function onGetBlockErrorMessageKey( $block, &$key ) {
2964        return $this->container->run(
2965            'GetBlockErrorMessageKey',
2966            [ $block, &$key ]
2967        );
2968    }
2969
2970    /** @inheritDoc */
2971    public function onModifyExportQuery( $db, &$tables, $cond, &$opts,
2972        &$join_conds, &$conds
2973    ) {
2974        return $this->container->run(
2975            'ModifyExportQuery',
2976            [ $db, &$tables, $cond, &$opts, &$join_conds, &$conds ]
2977        );
2978    }
2979
2980    /** @inheritDoc */
2981    public function onMovePageCheckPermissions( $oldTitle, $newTitle, $user,
2982        $reason, $status
2983    ) {
2984        return $this->container->run(
2985            'MovePageCheckPermissions',
2986            [ $oldTitle, $newTitle, $user, $reason, $status ]
2987        );
2988    }
2989
2990    /** @inheritDoc */
2991    public function onMovePageIsValidMove( $oldTitle, $newTitle, $status ) {
2992        return $this->container->run(
2993            'MovePageIsValidMove',
2994            [ $oldTitle, $newTitle, $status ]
2995        );
2996    }
2997
2998    /** @inheritDoc */
2999    public function onMultiContentSave( $renderedRevision, $user, $summary, $flags,
3000        $status
3001    ) {
3002        return $this->container->run(
3003            'MultiContentSave',
3004            [ $renderedRevision, $user, $summary, $flags, $status ]
3005        );
3006    }
3007
3008    /** @inheritDoc */
3009    public function onNamespaceIsMovable( $index, &$result ) {
3010        return $this->container->run(
3011            'NamespaceIsMovable',
3012            [ $index, &$result ]
3013        );
3014    }
3015
3016    /** @inheritDoc */
3017    public function onNewDifferenceEngine( $title, &$oldId, &$newId, $old, $new ) {
3018        return $this->container->run(
3019            'NewDifferenceEngine',
3020            [ $title, &$oldId, &$newId, $old, $new ]
3021        );
3022    }
3023
3024    /** @inheritDoc */
3025    public function onNewPagesLineEnding( $page, &$ret, $row, &$classes, &$attribs ) {
3026        return $this->container->run(
3027            'NewPagesLineEnding',
3028            [ $page, &$ret, $row, &$classes, &$attribs ]
3029        );
3030    }
3031
3032    /** @inheritDoc */
3033    public function onOldChangesListRecentChangesLine( $changeslist, &$s, $rc,
3034        &$classes, &$attribs
3035    ) {
3036        return $this->container->run(
3037            'OldChangesListRecentChangesLine',
3038            [ $changeslist, &$s, $rc, &$classes, &$attribs ]
3039        );
3040    }
3041
3042    /** @inheritDoc */
3043    public function onOpenSearchUrls( &$urls ) {
3044        return $this->container->run(
3045            'OpenSearchUrls',
3046            [ &$urls ]
3047        );
3048    }
3049
3050    /** @inheritDoc */
3051    public function onOpportunisticLinksUpdate( $page, $title, $parserOutput ) {
3052        return $this->container->run(
3053            'OpportunisticLinksUpdate',
3054            [ $page, $title, $parserOutput ]
3055        );
3056    }
3057
3058    /** @inheritDoc */
3059    public function onOtherAutoblockLogLink( &$otherBlockLink ) {
3060        return $this->container->run(
3061            'OtherAutoblockLogLink',
3062            [ &$otherBlockLink ]
3063        );
3064    }
3065
3066    /** @inheritDoc */
3067    public function onOtherBlockLogLink( &$otherBlockLink, $ip ) {
3068        return $this->container->run(
3069            'OtherBlockLogLink',
3070            [ &$otherBlockLink, $ip ]
3071        );
3072    }
3073
3074    /** @inheritDoc */
3075    public function onOutputPageAfterGetHeadLinksArray( &$tags, $out ) {
3076        return $this->container->run(
3077            'OutputPageAfterGetHeadLinksArray',
3078            [ &$tags, $out ]
3079        );
3080    }
3081
3082    /** @inheritDoc */
3083    public function onOutputPageBeforeHTML( $out, &$text ) {
3084        return $this->container->run(
3085            'OutputPageBeforeHTML',
3086            [ $out, &$text ]
3087        );
3088    }
3089
3090    /** @inheritDoc */
3091    public function onOutputPageBodyAttributes( $out, $sk, &$bodyAttrs ): void {
3092        $this->container->run(
3093            'OutputPageBodyAttributes',
3094            [ $out, $sk, &$bodyAttrs ],
3095            [ 'abortable' => false ]
3096        );
3097    }
3098
3099    /** @inheritDoc */
3100    public function onOutputPageCheckLastModified( &$modifiedTimes, $out ) {
3101        return $this->container->run(
3102            'OutputPageCheckLastModified',
3103            [ &$modifiedTimes, $out ]
3104        );
3105    }
3106
3107    /** @inheritDoc */
3108    public function onOutputPageParserOutput( $outputPage, $parserOutput ): void {
3109        $this->container->run(
3110            'OutputPageParserOutput',
3111            [ $outputPage, $parserOutput ],
3112            [ 'abortable' => false ]
3113        );
3114    }
3115
3116    /** @inheritDoc */
3117    public function onOutputPageRenderCategoryLink(
3118        OutputPage $outputPage,
3119        ProperPageIdentity $categoryTitle,
3120        string $text,
3121        ?string &$link
3122    ): void {
3123        $this->container->run(
3124            'OutputPageRenderCategoryLink',
3125            [ $outputPage, $categoryTitle, $text, &$link ],
3126            [ 'abortable' => false ]
3127        );
3128    }
3129
3130    /** @inheritDoc */
3131    public function onOutputTransformFirstStage(
3132        ParserOutput &$parserOutput, ParserOptions $parserOptions
3133    ): void {
3134        $this->container->run(
3135            'OutputTransformFirstStage',
3136            [ &$parserOutput, $parserOptions ],
3137            [ 'abortable' => false ]
3138        );
3139    }
3140
3141    /** @inheritDoc */
3142    public function onOutputTransformLastStage(
3143        ParserOutput &$parserOutput, ParserOptions $parserOptions
3144    ): void {
3145        $this->container->run(
3146            'OutputTransformLastStage',
3147            [ &$parserOutput, $parserOptions ],
3148            [ 'abortable' => false ]
3149        );
3150    }
3151
3152    /** @inheritDoc */
3153    public function onPageContentLanguage( $title, &$pageLang, $userLang ) {
3154        return $this->container->run(
3155            'PageContentLanguage',
3156            [ $title, &$pageLang, $userLang ]
3157        );
3158    }
3159
3160    /** @inheritDoc */
3161    public function onPageDelete(
3162        ProperPageIdentity $page,
3163        Authority $deleter,
3164        string $reason,
3165        StatusValue $status,
3166        bool $suppress
3167    ) {
3168        return $this->container->run(
3169            'PageDelete',
3170            [ $page, $deleter, $reason, $status, $suppress ]
3171        );
3172    }
3173
3174    /** @inheritDoc */
3175    public function onPageDeleteComplete(
3176        ProperPageIdentity $page,
3177        Authority $deleter,
3178        string $reason,
3179        int $pageID,
3180        RevisionRecord $deletedRev,
3181        ManualLogEntry $logEntry,
3182        int $archivedRevisionCount
3183    ) {
3184        return $this->container->run(
3185            'PageDeleteComplete',
3186            [ $page, $deleter, $reason, $pageID, $deletedRev, $logEntry, $archivedRevisionCount ]
3187        );
3188    }
3189
3190    /** @inheritDoc */
3191    public function onPageDeletionDataUpdates( $title, $revision, &$updates ) {
3192        return $this->container->run(
3193            'PageDeletionDataUpdates',
3194            [ $title, $revision, &$updates ]
3195        );
3196    }
3197
3198    /** @inheritDoc */
3199    public function onPageUndelete(
3200        ProperPageIdentity $page,
3201        Authority $performer,
3202        string $reason,
3203        bool $unsuppress,
3204        array $timestamps,
3205        array $fileVersions,
3206        StatusValue $status
3207    ) {
3208        return $this->container->run(
3209            'PageUndelete',
3210            [ $page, $performer, $reason, $unsuppress, $timestamps, $fileVersions, $status ]
3211        );
3212    }
3213
3214    /** @inheritDoc */
3215    public function onPageUndeleteComplete(
3216        ProperPageIdentity $page,
3217        Authority $restorer,
3218        string $reason,
3219        RevisionRecord $restoredRev,
3220        ManualLogEntry $logEntry,
3221        int $restoredRevisionCount,
3222        bool $created,
3223        array $restoredPageIds
3224    ): void {
3225        $this->container->run(
3226            'PageUndeleteComplete',
3227            [
3228                $page,
3229                $restorer,
3230                $reason,
3231                $restoredRev,
3232                $logEntry,
3233                $restoredRevisionCount,
3234                $created,
3235                $restoredPageIds
3236            ],
3237            [ 'abortable' => false ]
3238        );
3239    }
3240
3241    /** @inheritDoc */
3242    public function onPageHistoryBeforeList( $article, $context ) {
3243        return $this->container->run(
3244            'PageHistoryBeforeList',
3245            [ $article, $context ]
3246        );
3247    }
3248
3249    /** @inheritDoc */
3250    public function onPageHistoryLineEnding( $historyAction, &$row, &$s, &$classes,
3251        &$attribs
3252    ) {
3253        return $this->container->run(
3254            'PageHistoryLineEnding',
3255            [ $historyAction, &$row, &$s, &$classes, &$attribs ]
3256        );
3257    }
3258
3259    /** @inheritDoc */
3260    public function onPageHistoryPager__doBatchLookups( $pager, $result ) {
3261        return $this->container->run(
3262            'PageHistoryPager::doBatchLookups',
3263            [ $pager, $result ]
3264        );
3265    }
3266
3267    /** @inheritDoc */
3268    public function onPageHistoryPager__getQueryInfo( $pager, &$queryInfo ) {
3269        return $this->container->run(
3270            'PageHistoryPager::getQueryInfo',
3271            [ $pager, &$queryInfo ]
3272        );
3273    }
3274
3275    /** @inheritDoc */
3276    public function onPageMoveComplete( $old, $new, $user, $pageid, $redirid, $reason, $revision ) {
3277        return $this->container->run(
3278            'PageMoveComplete',
3279            [ $old, $new, $user, $pageid, $redirid, $reason, $revision ]
3280        );
3281    }
3282
3283    /** @inheritDoc */
3284    public function onPageMoveCompleting( $old, $new, $user, $pageid, $redirid, $reason, $revision ) {
3285        return $this->container->run(
3286            'PageMoveCompleting',
3287            [ $old, $new, $user, $pageid, $redirid, $reason, $revision ]
3288        );
3289    }
3290
3291    /** @inheritDoc */
3292    public function onPageRenderingHash( &$confstr, $user, &$forOptions ) {
3293        return $this->container->run(
3294            'PageRenderingHash',
3295            [ &$confstr, $user, &$forOptions ]
3296        );
3297    }
3298
3299    /** @inheritDoc */
3300    public function onPageSaveComplete( $wikiPage, $user, $summary, $flags,
3301        $revisionRecord, $editResult
3302    ) {
3303        return $this->container->run(
3304            'PageSaveComplete',
3305            [ $wikiPage, $user, $summary, $flags, $revisionRecord, $editResult ]
3306        );
3307    }
3308
3309    /** @inheritDoc */
3310    public function onPageViewUpdates( $wikipage, $user ) {
3311        return $this->container->run(
3312            'PageViewUpdates',
3313            [ $wikipage, $user ]
3314        );
3315    }
3316
3317    /** @inheritDoc */
3318    public function onParserAfterParse( $parser, &$text, $stripState ) {
3319        return $this->container->run(
3320            'ParserAfterParse',
3321            [ $parser, &$text, $stripState ]
3322        );
3323    }
3324
3325    /** @inheritDoc */
3326    public function onParserAfterTidy( $parser, &$text ) {
3327        return $this->container->run(
3328            'ParserAfterTidy',
3329            [ $parser, &$text ]
3330        );
3331    }
3332
3333    /** @inheritDoc */
3334    public function onParserBeforeInternalParse( $parser, &$text, $stripState ) {
3335        return $this->container->run(
3336            'ParserBeforeInternalParse',
3337            [ $parser, &$text, $stripState ]
3338        );
3339    }
3340
3341    /** @inheritDoc */
3342    public function onParserBeforePreprocess( $parser, &$text, $stripState ) {
3343        return $this->container->run(
3344            'ParserBeforePreprocess',
3345            [ $parser, &$text, $stripState ]
3346        );
3347    }
3348
3349    /** @inheritDoc */
3350    public function onParserCacheSaveComplete( $parserCache, $parserOutput, $title,
3351        $popts, $revId
3352    ) {
3353        return $this->container->run(
3354            'ParserCacheSaveComplete',
3355            [ $parserCache, $parserOutput, $title, $popts, $revId ]
3356        );
3357    }
3358
3359    /** @inheritDoc */
3360    public function onParserClearState( $parser ) {
3361        return $this->container->run(
3362            'ParserClearState',
3363            [ $parser ]
3364        );
3365    }
3366
3367    /** @inheritDoc */
3368    public function onParserCloned( $parser ) {
3369        return $this->container->run(
3370            'ParserCloned',
3371            [ $parser ]
3372        );
3373    }
3374
3375    /** @inheritDoc */
3376    public function onParserFetchTemplateData( array $titles, array &$tplData ): bool {
3377        return $this->container->run(
3378            'ParserFetchTemplateData',
3379            [ $titles, &$tplData ]
3380        );
3381    }
3382
3383    /** @inheritDoc */
3384    public function onParserFirstCallInit( $parser ) {
3385        return $this->container->run(
3386            'ParserFirstCallInit',
3387            [ $parser ]
3388        );
3389    }
3390
3391    /** @inheritDoc */
3392    public function onParserGetVariableValueSwitch( $parser, &$variableCache,
3393        $magicWordId, &$ret, $frame
3394    ) {
3395        return $this->container->run(
3396            'ParserGetVariableValueSwitch',
3397            [ $parser, &$variableCache, $magicWordId, &$ret, $frame ]
3398        );
3399    }
3400
3401    /** @inheritDoc */
3402    public function onParserGetVariableValueTs( $parser, &$time ) {
3403        return $this->container->run(
3404            'ParserGetVariableValueTs',
3405            [ $parser, &$time ]
3406        );
3407    }
3408
3409    /** @inheritDoc */
3410    public function onParserLimitReportFormat( $key, &$value, &$report, $isHTML,
3411        $localize
3412    ) {
3413        return $this->container->run(
3414            'ParserLimitReportFormat',
3415            [ $key, &$value, &$report, $isHTML, $localize ]
3416        );
3417    }
3418
3419    /** @inheritDoc */
3420    public function onParserLimitReportPrepare( $parser, $output ) {
3421        return $this->container->run(
3422            'ParserLimitReportPrepare',
3423            [ $parser, $output ]
3424        );
3425    }
3426
3427    /** @inheritDoc */
3428    public function onParserLogLinterData( string $title, int $revId, array $lints ): bool {
3429        return $this->container->run(
3430            'ParserLogLinterData',
3431            [ $title, $revId, $lints ]
3432        );
3433    }
3434
3435    /** @inheritDoc */
3436    public function onParserMakeImageParams( $title, $file, &$params, $parser ) {
3437        return $this->container->run(
3438            'ParserMakeImageParams',
3439            [ $title, $file, &$params, $parser ]
3440        );
3441    }
3442
3443    /** @inheritDoc */
3444    public function onParserModifyImageHTML( Parser $parser, File $file,
3445        array $params, string &$html
3446    ): void {
3447        $this->container->run(
3448            'ParserModifyImageHTML',
3449            [ $parser, $file, $params, &$html ],
3450            [ 'abortable' => false ]
3451        );
3452    }
3453
3454    /** @inheritDoc */
3455    public function onParserOptionsDefaults( &$defaults, &$inCacheKey, &$lazyLoad, &$postprocOpts = [] ) {
3456        return $this->container->run(
3457            'ParserOptionsDefaults',
3458            [ &$defaults, &$inCacheKey, &$lazyLoad, &$postprocOpts ]
3459        );
3460    }
3461
3462    /** @inheritDoc */
3463    public function onParserOptionsRegister( &$defaults, &$inCacheKey, &$lazyLoad ) {
3464        return $this->container->run(
3465            'ParserOptionsRegister',
3466            [ &$defaults, &$inCacheKey, &$lazyLoad ]
3467        );
3468    }
3469
3470    /** @inheritDoc */
3471    public function onParserOutputPostCacheTransform( $parserOutput, &$text,
3472        &$options
3473    ): void {
3474        $this->container->run(
3475            'ParserOutputPostCacheTransform',
3476            [ $parserOutput, &$text, &$options ],
3477            [ 'abortable' => false ]
3478        );
3479    }
3480
3481    /** @inheritDoc */
3482    public function onParserOutputStashForEdit( $page, $content, $output, $summary,
3483        $user
3484    ) {
3485        return $this->container->run(
3486            'ParserOutputStashForEdit',
3487            [ $page, $content, $output, $summary, $user ]
3488        );
3489    }
3490
3491    /** @inheritDoc */
3492    public function onParserPreSaveTransformComplete( $parser, &$text ) {
3493        return $this->container->run(
3494            'ParserPreSaveTransformComplete',
3495            [ $parser, &$text ]
3496        );
3497    }
3498
3499    /** @inheritDoc */
3500    public function onParserTestGlobals( &$globals ) {
3501        return $this->container->run(
3502            'ParserTestGlobals',
3503            [ &$globals ]
3504        );
3505    }
3506
3507    /** @inheritDoc */
3508    public function onPasswordPoliciesForUser( $user, &$effectivePolicy ) {
3509        return $this->container->run(
3510            'PasswordPoliciesForUser',
3511            [ $user, &$effectivePolicy ]
3512        );
3513    }
3514
3515    /** @inheritDoc */
3516    public function onPerformRetroactiveAutoblock( $block, &$blockIds ) {
3517        return $this->container->run(
3518            'PerformRetroactiveAutoblock',
3519            [ $block, &$blockIds ]
3520        );
3521    }
3522
3523    /** @inheritDoc */
3524    public function onPingLimiter( $user, $action, &$result, $incrBy ) {
3525        return $this->container->run(
3526            'PingLimiter',
3527            [ $user, $action, &$result, $incrBy ]
3528        );
3529    }
3530
3531    /** @inheritDoc */
3532    public function onPlaceNewSection( $content, $oldtext, $subject, &$text ) {
3533        return $this->container->run(
3534            'PlaceNewSection',
3535            [ $content, $oldtext, $subject, &$text ]
3536        );
3537    }
3538
3539    /** @inheritDoc */
3540    public function onPostLoginRedirect( &$returnTo, &$returnToQuery, &$type ) {
3541        return $this->container->run(
3542            'PostLoginRedirect',
3543            [ &$returnTo, &$returnToQuery, &$type ]
3544        );
3545    }
3546
3547    /** @inheritDoc */
3548    public function onPreferencesFormPreSave( $formData, $form, $user, &$result,
3549        $oldUserOptions
3550    ) {
3551        return $this->container->run(
3552            'PreferencesFormPreSave',
3553            [ $formData, $form, $user, &$result, $oldUserOptions ]
3554        );
3555    }
3556
3557    /** @inheritDoc */
3558    public function onPreferencesGetIcon( &$iconNames ) {
3559        return $this->container->run(
3560            'PreferencesGetIcon',
3561            [ &$iconNames ]
3562        );
3563    }
3564
3565    /** @inheritDoc */
3566    public function onPreferencesGetLayout( &$useMobileLayout, $skinName,
3567        $skinProperties = []
3568    ) {
3569        return $this->container->run(
3570            'PreferencesGetLayout',
3571            [ &$useMobileLayout, $skinName, $skinProperties ]
3572        );
3573    }
3574
3575    /** @inheritDoc */
3576    public function onPreferencesGetLegend( $form, $key, &$legend ) {
3577        return $this->container->run(
3578            'PreferencesGetLegend',
3579            [ $form, $key, &$legend ]
3580        );
3581    }
3582
3583    /** @inheritDoc */
3584    public function onPrefixSearchExtractNamespace( &$namespaces, &$search ) {
3585        return $this->container->run(
3586            'PrefixSearchExtractNamespace',
3587            [ &$namespaces, &$search ]
3588        );
3589    }
3590
3591    /** @inheritDoc */
3592    public function onPrefsEmailAudit( $user, $oldaddr, $newaddr ) {
3593        return $this->container->run(
3594            'PrefsEmailAudit',
3595            [ $user, $oldaddr, $newaddr ]
3596        );
3597    }
3598
3599    /** @inheritDoc */
3600    public function onProtectionForm__buildForm( $article, &$output ) {
3601        return $this->container->run(
3602            'ProtectionForm::buildForm',
3603            [ $article, &$output ]
3604        );
3605    }
3606
3607    /** @inheritDoc */
3608    public function onProtectionFormAddFormFields( $article, &$hookFormOptions ) {
3609        return $this->container->run(
3610            'ProtectionFormAddFormFields',
3611            [ $article, &$hookFormOptions ]
3612        );
3613    }
3614
3615    /** @inheritDoc */
3616    public function onProtectionForm__save( $article, &$errorMsg, $reasonstr ) {
3617        return $this->container->run(
3618            'ProtectionForm::save',
3619            [ $article, &$errorMsg, $reasonstr ]
3620        );
3621    }
3622
3623    /** @inheritDoc */
3624    public function onProtectionForm__showLogExtract( $article, $out ) {
3625        return $this->container->run(
3626            'ProtectionForm::showLogExtract',
3627            [ $article, $out ]
3628        );
3629    }
3630
3631    /** @inheritDoc */
3632    public function onRandomPageQuery( &$tables, &$conds, &$joinConds ) {
3633        return $this->container->run(
3634            'RandomPageQuery',
3635            [ &$tables, &$conds, &$joinConds ]
3636        );
3637    }
3638
3639    /** @inheritDoc */
3640    public function onRawPageViewBeforeOutput( $obj, &$text ) {
3641        return $this->container->run(
3642            'RawPageViewBeforeOutput',
3643            [ $obj, &$text ]
3644        );
3645    }
3646
3647    /** @inheritDoc */
3648    public function onReadPrivateUserRequirementsCondition(
3649        UserIdentity $performer,
3650        UserIdentity $target,
3651        array $conditions
3652    ): void {
3653        $this->container->run(
3654            'ReadPrivateUserRequirementsCondition',
3655            [ $performer, $target, $conditions ],
3656            [ 'abortable' => false ]
3657        );
3658    }
3659
3660    /** @inheritDoc */
3661    public function onRecentChangesPurgeRows( $rows ): void {
3662        $this->container->run(
3663            'RecentChangesPurgeRows',
3664            [ $rows ]
3665        );
3666    }
3667
3668    /** @inheritDoc */
3669    public function onRecentChangesPurgeQuery( $query, &$callbacks ): void {
3670        $this->container->run(
3671            'RecentChangesPurgeQuery',
3672            [ $query, &$callbacks ]
3673        );
3674    }
3675
3676    /** @inheritDoc */
3677    public function onRecentChange_save( $recentChange ) {
3678        return $this->container->run(
3679            'RecentChange_save',
3680            [ $recentChange ]
3681        );
3682    }
3683
3684    /** @inheritDoc */
3685    public function onRedirectSpecialArticleRedirectParams( &$redirectParams ) {
3686        return $this->container->run(
3687            'RedirectSpecialArticleRedirectParams',
3688            [ &$redirectParams ]
3689        );
3690    }
3691
3692    /** @inheritDoc */
3693    public function onRejectParserCacheValue( $parserOutput, $wikiPage,
3694        $parserOptions
3695    ) {
3696        return $this->container->run(
3697            'RejectParserCacheValue',
3698            [ $parserOutput, $wikiPage, $parserOptions ]
3699        );
3700    }
3701
3702    /** @inheritDoc */
3703    public function onRenameUserAbort( int $uid, string $old, string $new ) {
3704        return $this->container->run(
3705            'RenameUserAbort',
3706            [ $uid, $old, $new ]
3707        );
3708    }
3709
3710    /** @inheritDoc */
3711    public function onRenameUserComplete( int $uid, string $old, string $new ): void {
3712        $this->container->run(
3713            'RenameUserComplete',
3714            [ $uid, $old, $new ],
3715            [ 'abortable' => false ]
3716        );
3717    }
3718
3719    /** @inheritDoc */
3720    public function onRenameUserPreRename( int $uid, string $old, string $new ): void {
3721        $this->container->run(
3722            'RenameUserPreRename',
3723            [ $uid, $old, $new ],
3724            [ 'abortable' => false ]
3725        );
3726    }
3727
3728    /** @inheritDoc */
3729    public function onRenameUserSQL( RenameuserSQL $renameUserSql ): void {
3730        $this->container->run(
3731            'RenameUserSQL',
3732            [ $renameUserSql ],
3733            [ 'abortable' => false ]
3734        );
3735    }
3736
3737    /** @inheritDoc */
3738    public function onRenameUserWarning( string $oldUsername, string $newUsername, array &$warnings ): void {
3739        $this->container->run(
3740            'RenameUserWarning',
3741            [ $oldUsername, $newUsername, &$warnings ],
3742            [ 'abortable' => false ]
3743        );
3744    }
3745
3746    /** @inheritDoc */
3747    public function onRequestContextCreateSkin( $context, &$skin ) {
3748        return $this->container->run(
3749            'RequestContextCreateSkin',
3750            [ $context, &$skin ]
3751        );
3752    }
3753
3754    /** @inheritDoc */
3755    public function onResetPasswordExpiration( $user, &$newExpire ) {
3756        return $this->container->run(
3757            'ResetPasswordExpiration',
3758            [ $user, &$newExpire ]
3759        );
3760    }
3761
3762    /** @inheritDoc */
3763    public function onRevisionDataUpdates( $title, $renderedRevision, &$updates ) {
3764        return $this->container->run(
3765            'RevisionDataUpdates',
3766            [ $title, $renderedRevision, &$updates ]
3767        );
3768    }
3769
3770    /** @inheritDoc */
3771    public function onRevisionFromEditComplete( $wikiPage, $rev, $originalRevId, $user, &$tags ) {
3772        return $this->container->run(
3773            'RevisionFromEditComplete',
3774            [ $wikiPage, $rev, $originalRevId, $user, &$tags ]
3775        );
3776    }
3777
3778    /** @inheritDoc */
3779    public function onRevisionRecordInserted( $revisionRecord ) {
3780        return $this->container->run(
3781            'RevisionRecordInserted',
3782            [ $revisionRecord ]
3783        );
3784    }
3785
3786    /** @inheritDoc */
3787    public function onRevisionUndeleted( $revisionRecord, $oldPageID ) {
3788        return $this->container->run(
3789            'RevisionUndeleted',
3790            [ $revisionRecord, $oldPageID ]
3791        );
3792    }
3793
3794    /** @inheritDoc */
3795    public function onRollbackComplete( $wikiPage, $user, $revision, $current ) {
3796        return $this->container->run(
3797            'RollbackComplete',
3798            [ $wikiPage, $user, $revision, $current ]
3799        );
3800    }
3801
3802    /** @inheritDoc */
3803    public function onSearchableNamespaces( &$arr ) {
3804        return $this->container->run(
3805            'SearchableNamespaces',
3806            [ &$arr ]
3807        );
3808    }
3809
3810    /** @inheritDoc */
3811    public function onSearchAfterNoDirectMatch( $term, &$title ) {
3812        return $this->container->run(
3813            'SearchAfterNoDirectMatch',
3814            [ $term, &$title ]
3815        );
3816    }
3817
3818    /** @inheritDoc */
3819    public function onSearchDataForIndex( &$fields, $handler, $page, $output, $engine ) {
3820        return $this->container->run(
3821            'SearchDataForIndex',
3822            [ &$fields, $handler, $page, $output, $engine ]
3823        );
3824    }
3825
3826    /** @inheritDoc */
3827    public function onSearchDataForIndex2( array &$fields, ContentHandler $handler,
3828        WikiPage $page, ParserOutput $output, SearchEngine $engine, RevisionRecord $revision
3829    ) {
3830        return $this->container->run(
3831            'SearchDataForIndex2',
3832            [ &$fields, $handler, $page, $output, $engine, $revision ]
3833        );
3834    }
3835
3836    /** @inheritDoc */
3837    public function onSearchGetNearMatch( $term, &$title ) {
3838        return $this->container->run(
3839            'SearchGetNearMatch',
3840            [ $term, &$title ]
3841        );
3842    }
3843
3844    /** @inheritDoc */
3845    public function onSearchGetNearMatchBefore( $allSearchTerms, &$titleResult ) {
3846        return $this->container->run(
3847            'SearchGetNearMatchBefore',
3848            [ $allSearchTerms, &$titleResult ]
3849        );
3850    }
3851
3852    /** @inheritDoc */
3853    public function onSearchGetNearMatchComplete( $term, &$title ) {
3854        return $this->container->run(
3855            'SearchGetNearMatchComplete',
3856            [ $term, &$title ]
3857        );
3858    }
3859
3860    /** @inheritDoc */
3861    public function onSearchIndexFields( &$fields, $engine ) {
3862        return $this->container->run(
3863            'SearchIndexFields',
3864            [ &$fields, $engine ]
3865        );
3866    }
3867
3868    /** @inheritDoc */
3869    public function onSearchResultInitFromTitle( $title, &$id ) {
3870        return $this->container->run(
3871            'SearchResultInitFromTitle',
3872            [ $title, &$id ]
3873        );
3874    }
3875
3876    /** @inheritDoc */
3877    public function onSearchResultProvideDescription( array $pageIdentities, &$descriptions ) {
3878        return $this->container->run(
3879            'SearchResultProvideDescription',
3880            [ $pageIdentities, &$descriptions ]
3881        );
3882    }
3883
3884    /** @inheritDoc */
3885    public function onSearchResultProvideThumbnail( array $pageIdentities, &$thumbnails, ?int $size = null ) {
3886        return $this->container->run(
3887            'SearchResultProvideThumbnail',
3888            [ $pageIdentities, &$thumbnails, $size ]
3889        );
3890    }
3891
3892    /** @inheritDoc */
3893    public function onSearchResultsAugment( &$setAugmentors, &$rowAugmentors ) {
3894        return $this->container->run(
3895            'SearchResultsAugment',
3896            [ &$setAugmentors, &$rowAugmentors ]
3897        );
3898    }
3899
3900    /** @inheritDoc */
3901    public function onSecuritySensitiveOperationStatus( &$status, $operation,
3902        $session, $timeSinceAuth
3903    ) {
3904        return $this->container->run(
3905            'SecuritySensitiveOperationStatus',
3906            [ &$status, $operation, $session, $timeSinceAuth ]
3907        );
3908    }
3909
3910    /** @inheritDoc */
3911    public function onSelfLinkBegin( $nt, &$html, &$trail, &$prefix, &$ret ) {
3912        return $this->container->run(
3913            'SelfLinkBegin',
3914            [ $nt, &$html, &$trail, &$prefix, &$ret ]
3915        );
3916    }
3917
3918    /** @inheritDoc */
3919    public function onSessionCheckInfo( &$reason, $info, $request, $metadata,
3920        $data
3921    ) {
3922        return $this->container->run(
3923            'SessionCheckInfo',
3924            [ &$reason, $info, $request, $metadata, $data ]
3925        );
3926    }
3927
3928    /** @inheritDoc */
3929    public function onSessionMetadata( $backend, &$metadata, $requests ) {
3930        return $this->container->run(
3931            'SessionMetadata',
3932            [ $backend, &$metadata, $requests ]
3933        );
3934    }
3935
3936    /** @inheritDoc */
3937    public function onSetupAfterCache() {
3938        return $this->container->run(
3939            'SetupAfterCache',
3940            []
3941        );
3942    }
3943
3944    /** @inheritDoc */
3945    public function onShortPagesQuery( &$tables, &$conds, &$joinConds, &$options ) {
3946        return $this->container->run(
3947            'ShortPagesQuery',
3948            [ &$tables, &$conds, &$joinConds, &$options ]
3949        );
3950    }
3951
3952    /** @inheritDoc */
3953    public function onShowMissingArticle( $article ) {
3954        return $this->container->run(
3955            'ShowMissingArticle',
3956            [ $article ]
3957        );
3958    }
3959
3960    /** @inheritDoc */
3961    public function onShowSearchHit( $searchPage, $result, $terms, &$link,
3962        &$redirect, &$section, &$extract, &$score, &$size, &$date, &$related, &$html
3963    ) {
3964        return $this->container->run(
3965            'ShowSearchHit',
3966            [ $searchPage, $result, $terms, &$link, &$redirect, &$section,
3967                &$extract, &$score, &$size, &$date, &$related, &$html ]
3968        );
3969    }
3970
3971    /** @inheritDoc */
3972    public function onShowSearchHitTitle( &$title, &$titleSnippet, $result, $terms,
3973        $specialSearch, &$query, &$attributes
3974    ) {
3975        return $this->container->run(
3976            'ShowSearchHitTitle',
3977            [ &$title, &$titleSnippet, $result, $terms, $specialSearch,
3978                &$query, &$attributes ]
3979        );
3980    }
3981
3982    /** @inheritDoc */
3983    public function onSidebarBeforeOutput( $skin, &$sidebar ): void {
3984        $this->container->run(
3985            'SidebarBeforeOutput',
3986            [ $skin, &$sidebar ],
3987            [ 'abortable' => false ]
3988        );
3989    }
3990
3991    /** @inheritDoc */
3992    public function onSiteNoticeAfter( &$siteNotice, $skin ) {
3993        return $this->container->run(
3994            'SiteNoticeAfter',
3995            [ &$siteNotice, $skin ]
3996        );
3997    }
3998
3999    /** @inheritDoc */
4000    public function onSiteNoticeBefore( &$siteNotice, $skin ) {
4001        return $this->container->run(
4002            'SiteNoticeBefore',
4003            [ &$siteNotice, $skin ]
4004        );
4005    }
4006
4007    /** @inheritDoc */
4008    public function onSkinPageReadyConfig( RL\Context $context,
4009        array &$config
4010    ) {
4011        $this->container->run(
4012            'SkinPageReadyConfig',
4013            [ $context, &$config ],
4014            [ 'abortable' => true ]
4015        );
4016    }
4017
4018    /** @inheritDoc */
4019    public function onSkinAddFooterLinks( Skin $skin, string $key, array &$footerItems ) {
4020        $this->container->run(
4021            'SkinAddFooterLinks',
4022            [ $skin, $key, &$footerItems ]
4023        );
4024    }
4025
4026    /** @inheritDoc */
4027    public function onSkinAfterBottomScripts( $skin, &$text ) {
4028        return $this->container->run(
4029            'SkinAfterBottomScripts',
4030            [ $skin, &$text ]
4031        );
4032    }
4033
4034    /** @inheritDoc */
4035    public function onSkinAfterContent( &$data, $skin ) {
4036        return $this->container->run(
4037            'SkinAfterContent',
4038            [ &$data, $skin ]
4039        );
4040    }
4041
4042    /** @inheritDoc */
4043    public function onSkinAfterPortlet( $skin, $portlet, &$html ) {
4044        return $this->container->run(
4045            'SkinAfterPortlet',
4046            [ $skin, $portlet, &$html ]
4047        );
4048    }
4049
4050    /** @inheritDoc */
4051    public function onSkinBuildSidebar( $skin, &$bar ) {
4052        return $this->container->run(
4053            'SkinBuildSidebar',
4054            [ $skin, &$bar ]
4055        );
4056    }
4057
4058    /** @inheritDoc */
4059    public function onSkinCopyrightFooterMessage( $title, $type, &$msg ) {
4060        return $this->container->run(
4061            'SkinCopyrightFooterMessage',
4062            [ $title, $type, &$msg ]
4063        );
4064    }
4065
4066    /** @inheritDoc */
4067    public function onSkinEditSectionLinks( $skin, $title, $section, $tooltip,
4068        &$result, $lang
4069    ) {
4070        return $this->container->run(
4071            'SkinEditSectionLinks',
4072            [ $skin, $title, $section, $tooltip, &$result, $lang ]
4073        );
4074    }
4075
4076    /** @inheritDoc */
4077    public function onSkinPreloadExistence( &$titles, $skin ) {
4078        return $this->container->run(
4079            'SkinPreloadExistence',
4080            [ &$titles, $skin ]
4081        );
4082    }
4083
4084    /** @inheritDoc */
4085    public function onSkinSubPageSubtitle( &$subpages, $skin, $out ) {
4086        return $this->container->run(
4087            'SkinSubPageSubtitle',
4088            [ &$subpages, $skin, $out ]
4089        );
4090    }
4091
4092    /** @inheritDoc */
4093    public function onSkinTemplateGetLanguageLink( &$languageLink,
4094        $languageLinkTitle, $title, $outputPage
4095    ) {
4096        return $this->container->run(
4097            'SkinTemplateGetLanguageLink',
4098            [ &$languageLink, $languageLinkTitle, $title, $outputPage ]
4099        );
4100    }
4101
4102    /** @inheritDoc */
4103    public function onSkinTemplateNavigation__Universal( $sktemplate, &$links ): void {
4104        $this->container->run(
4105            'SkinTemplateNavigation::Universal',
4106            [ $sktemplate, &$links ],
4107            [ 'abortable' => false ]
4108        );
4109    }
4110
4111    /** @inheritDoc */
4112    public function onSoftwareInfo( &$software ) {
4113        return $this->container->run(
4114            'SoftwareInfo',
4115            [ &$software ]
4116        );
4117    }
4118
4119    /** @inheritDoc */
4120    public function onSpecialBlockModifyFormFields( $sp, &$fields ) {
4121        return $this->container->run(
4122            'SpecialBlockModifyFormFields',
4123            [ $sp, &$fields ]
4124        );
4125    }
4126
4127    /** @inheritDoc */
4128    public function onSpecialContributionsBeforeMainOutput( $id, $user, $sp ) {
4129        return $this->container->run(
4130            'SpecialContributionsBeforeMainOutput',
4131            [ $id, $user, $sp ]
4132        );
4133    }
4134
4135    /** @inheritDoc */
4136    public function onSpecialContributions__formatRow__flags( $context, $row,
4137        &$flags
4138    ) {
4139        return $this->container->run(
4140            'SpecialContributions::formatRow::flags',
4141            [ $context, $row, &$flags ]
4142        );
4143    }
4144
4145    /** @inheritDoc */
4146    public function onSpecialContributions__getForm__filters( $sp, &$filters ) {
4147        return $this->container->run(
4148            'SpecialContributions::getForm::filters',
4149            [ $sp, &$filters ]
4150        );
4151    }
4152
4153    /** @inheritDoc */
4154    public function onSpecialCreateAccountBenefits( ?string &$html, array $info, array &$options ) {
4155        return $this->container->run(
4156            'SpecialCreateAccountBenefits',
4157            [ &$html, $info, &$options ]
4158        );
4159    }
4160
4161    /** @inheritDoc */
4162    public function onSpecialExportGetExtraPages( $inputPages, &$extraPages ) {
4163        return $this->container->run(
4164            'SpecialExportGetExtraPages',
4165            [ $inputPages, &$extraPages ]
4166        );
4167    }
4168
4169    /** @inheritDoc */
4170    public function onSpecialListusersDefaultQuery( $pager, &$query ) {
4171        return $this->container->run(
4172            'SpecialListusersDefaultQuery',
4173            [ $pager, &$query ]
4174        );
4175    }
4176
4177    /** @inheritDoc */
4178    public function onSpecialListusersFormatRow( &$item, $row ) {
4179        return $this->container->run(
4180            'SpecialListusersFormatRow',
4181            [ &$item, $row ]
4182        );
4183    }
4184
4185    /** @inheritDoc */
4186    public function onSpecialListusersHeader( $pager, &$out ) {
4187        return $this->container->run(
4188            'SpecialListusersHeader',
4189            [ $pager, &$out ]
4190        );
4191    }
4192
4193    /** @inheritDoc */
4194    public function onSpecialListusersHeaderForm( $pager, &$out ) {
4195        return $this->container->run(
4196            'SpecialListusersHeaderForm',
4197            [ $pager, &$out ]
4198        );
4199    }
4200
4201    /** @inheritDoc */
4202    public function onSpecialListusersQueryInfo( $pager, &$query ) {
4203        return $this->container->run(
4204            'SpecialListusersQueryInfo',
4205            [ $pager, &$query ]
4206        );
4207    }
4208
4209    /** @inheritDoc */
4210    public function onSpecialLogAddLogSearchRelations( $type, $request, &$qc ) {
4211        return $this->container->run(
4212            'SpecialLogAddLogSearchRelations',
4213            [ $type, $request, &$qc ]
4214        );
4215    }
4216
4217    /** @inheritDoc */
4218    public function onSpecialLogResolveLogType(
4219        array $params,
4220        string &$type
4221    ): void {
4222        $this->container->run(
4223            'SpecialLogResolveLogType',
4224            [ $params, &$type ],
4225            [ 'abortable' => false ]
4226        );
4227    }
4228
4229    /** @inheritDoc */
4230    public function onSpecialLogGetSubpagesForPrefixSearch(
4231        IContextSource $context,
4232        array &$subpages
4233    ): void {
4234        $this->container->run(
4235            'SpecialLogGetSubpagesForPrefixSearch',
4236            [ $context, &$subpages ],
4237            [ 'abortable' => false ]
4238        );
4239    }
4240
4241    /** @inheritDoc */
4242    public function onSpecialMovepageAfterMove( $movePage, $oldTitle, $newTitle ) {
4243        return $this->container->run(
4244            'SpecialMovepageAfterMove',
4245            [ $movePage, $oldTitle, $newTitle ]
4246        );
4247    }
4248
4249    /** @inheritDoc */
4250    public function onSpecialMuteModifyFormFields( $target, $user, &$fields ) {
4251        return $this->container->run(
4252            'SpecialMuteModifyFormFields',
4253            [ $target, $user, &$fields ]
4254        );
4255    }
4256
4257    /** @inheritDoc */
4258    public function onSpecialNewpagesConditions( $special, $opts, &$conds,
4259        &$tables, &$fields, &$join_conds
4260    ) {
4261        return $this->container->run(
4262            'SpecialNewpagesConditions',
4263            [ $special, $opts, &$conds, &$tables, &$fields, &$join_conds ]
4264        );
4265    }
4266
4267    /** @inheritDoc */
4268    public function onSpecialNewPagesFilters( $special, &$filters ) {
4269        return $this->container->run(
4270            'SpecialNewPagesFilters',
4271            [ $special, &$filters ]
4272        );
4273    }
4274
4275    /** @inheritDoc */
4276    public function onSpecialPageAfterExecute( $special, $subPage ) {
4277        return $this->container->run(
4278            'SpecialPageAfterExecute',
4279            [ $special, $subPage ]
4280        );
4281    }
4282
4283    /** @inheritDoc */
4284    public function onSpecialPageBeforeExecute( $special, $subPage ) {
4285        return $this->container->run(
4286            'SpecialPageBeforeExecute',
4287            [ $special, $subPage ]
4288        );
4289    }
4290
4291    /** @inheritDoc */
4292    public function onSpecialPageBeforeFormDisplay( $name, $form ) {
4293        return $this->container->run(
4294            'SpecialPageBeforeFormDisplay',
4295            [ $name, $form ]
4296        );
4297    }
4298
4299    /** @inheritDoc */
4300    public function onSpecialPage_initList( &$list ) {
4301        return $this->container->run(
4302            'SpecialPage_initList',
4303            [ &$list ]
4304        );
4305    }
4306
4307    /** @inheritDoc */
4308    public function onSpecialPasswordResetOnSubmit( &$users, $data, &$error ) {
4309        return $this->container->run(
4310            'SpecialPasswordResetOnSubmit',
4311            [ &$users, $data, &$error ]
4312        );
4313    }
4314
4315    /** @inheritDoc */
4316    public function onSpecialPrefixIndexGetFormFilters( IContextSource $contextSource, array &$filters ) {
4317        $this->container->run(
4318            'SpecialPrefixIndexGetFormFilters',
4319            [ $contextSource, &$filters ],
4320            [ 'abortable' => false ]
4321        );
4322    }
4323
4324    /** @inheritDoc */
4325    public function onSpecialPrefixIndexQuery( array $fieldData, SelectQueryBuilder $queryBuilder ) {
4326        $this->container->run(
4327            'SpecialPrefixIndexQuery',
4328            [ $fieldData, $queryBuilder ],
4329            [ 'abortable' => false ]
4330        );
4331    }
4332
4333    /** @inheritDoc */
4334    public function onSpecialRandomGetRandomTitle( &$randstr, &$isRedir,
4335        &$namespaces, &$extra, &$title
4336    ) {
4337        return $this->container->run(
4338            'SpecialRandomGetRandomTitle',
4339            [ &$randstr, &$isRedir, &$namespaces, &$extra, &$title ]
4340        );
4341    }
4342
4343    /** @inheritDoc */
4344    public function onSpecialRecentChangesPanel( &$extraOpts, $opts ) {
4345        return $this->container->run(
4346            'SpecialRecentChangesPanel',
4347            [ &$extraOpts, $opts ]
4348        );
4349    }
4350
4351    /** @inheritDoc */
4352    public function onSpecialResetTokensTokens( &$tokens ) {
4353        return $this->container->run(
4354            'SpecialResetTokensTokens',
4355            [ &$tokens ]
4356        );
4357    }
4358
4359    /** @inheritDoc */
4360    public function onSpecialSearchCreateLink( $t, &$params ) {
4361        return $this->container->run(
4362            'SpecialSearchCreateLink',
4363            [ $t, &$params ]
4364        );
4365    }
4366
4367    /** @inheritDoc */
4368    public function onSpecialSearchGoResult( $term, $title, &$url ) {
4369        return $this->container->run(
4370            'SpecialSearchGoResult',
4371            [ $term, $title, &$url ]
4372        );
4373    }
4374
4375    /** @inheritDoc */
4376    public function onSpecialSearchNogomatch( &$title ) {
4377        return $this->container->run(
4378            'SpecialSearchNogomatch',
4379            [ &$title ]
4380        );
4381    }
4382
4383    /** @inheritDoc */
4384    public function onSpecialSearchPowerBox( &$showSections, $term, &$opts ) {
4385        return $this->container->run(
4386            'SpecialSearchPowerBox',
4387            [ &$showSections, $term, &$opts ]
4388        );
4389    }
4390
4391    /** @inheritDoc */
4392    public function onSpecialSearchProfileForm( $search, &$form, $profile, $term,
4393        $opts
4394    ) {
4395        return $this->container->run(
4396            'SpecialSearchProfileForm',
4397            [ $search, &$form, $profile, $term, $opts ]
4398        );
4399    }
4400
4401    /** @inheritDoc */
4402    public function onSpecialSearchProfiles( &$profiles ) {
4403        return $this->container->run(
4404            'SpecialSearchProfiles',
4405            [ &$profiles ]
4406        );
4407    }
4408
4409    /** @inheritDoc */
4410    public function onSpecialSearchResults( $term, &$titleMatches, &$textMatches ) {
4411        return $this->container->run(
4412            'SpecialSearchResults',
4413            [ $term, &$titleMatches, &$textMatches ]
4414        );
4415    }
4416
4417    /** @inheritDoc */
4418    public function onSpecialSearchResultsAppend( $specialSearch, $output, $term ) {
4419        return $this->container->run(
4420            'SpecialSearchResultsAppend',
4421            [ $specialSearch, $output, $term ]
4422        );
4423    }
4424
4425    /** @inheritDoc */
4426    public function onSpecialSearchResultsPrepend( $specialSearch, $output, $term ) {
4427        return $this->container->run(
4428            'SpecialSearchResultsPrepend',
4429            [ $specialSearch, $output, $term ]
4430        );
4431    }
4432
4433    /** @inheritDoc */
4434    public function onSpecialSearchSetupEngine( $search, $profile, $engine ) {
4435        return $this->container->run(
4436            'SpecialSearchSetupEngine',
4437            [ $search, $profile, $engine ]
4438        );
4439    }
4440
4441    /** @inheritDoc */
4442    public function onSpecialStatsAddExtra( &$extraStats, $context ) {
4443        return $this->container->run(
4444            'SpecialStatsAddExtra',
4445            [ &$extraStats, $context ]
4446        );
4447    }
4448
4449    /** @inheritDoc */
4450    public function onSpecialTrackingCategories__generateCatLink( $specialPage,
4451        $catTitle, &$html
4452    ) {
4453        return $this->container->run(
4454            'SpecialTrackingCategories::generateCatLink',
4455            [ $specialPage, $catTitle, &$html ]
4456        );
4457    }
4458
4459    /** @inheritDoc */
4460    public function onSpecialTrackingCategories__preprocess( $specialPage,
4461        $trackingCategories
4462    ) {
4463        return $this->container->run(
4464            'SpecialTrackingCategories::preprocess',
4465            [ $specialPage, $trackingCategories ]
4466        );
4467    }
4468
4469    /** @inheritDoc */
4470    public function onSpecialUploadComplete( $form ) {
4471        return $this->container->run(
4472            'SpecialUploadComplete',
4473            [ $form ]
4474        );
4475    }
4476
4477    /** @inheritDoc */
4478    public function onSpecialVersionVersionUrl( $version, &$versionUrl ) {
4479        return $this->container->run(
4480            'SpecialVersionVersionUrl',
4481            [ $version, &$versionUrl ]
4482        );
4483    }
4484
4485    /** @inheritDoc */
4486    public function onSpreadAnyEditBlock( $user, bool &$blockWasSpread ) {
4487        return $this->container->run(
4488            'SpreadAnyEditBlock',
4489            [ $user, &$blockWasSpread ]
4490        );
4491    }
4492
4493    /** @inheritDoc */
4494    public function onSpecialWhatLinksHereQuery( $table, $data, $queryBuilder ): void {
4495        $this->container->run(
4496            'SpecialWhatLinksHereQuery',
4497            [ $table, $data, $queryBuilder ],
4498            [ 'abortable' => false ]
4499        );
4500    }
4501
4502    /** @inheritDoc */
4503    public function onTempUserCreatedRedirect(
4504        Session $session,
4505        UserIdentity $user,
4506        string $returnTo,
4507        string $returnToQuery,
4508        string $returnToAnchor,
4509        &$redirectUrl
4510    ) {
4511        return $this->container->run(
4512            'TempUserCreatedRedirect',
4513            [ $session, $user, $returnTo, $returnToQuery, $returnToAnchor, &$redirectUrl ]
4514        );
4515    }
4516
4517    /** @inheritDoc */
4518    public function onTestCanonicalRedirect( $request, $title, $output ) {
4519        return $this->container->run(
4520            'TestCanonicalRedirect',
4521            [ $request, $title, $output ]
4522        );
4523    }
4524
4525    /** @inheritDoc */
4526    public function onThumbnailBeforeProduceHTML( $thumbnail, &$attribs,
4527        &$linkAttribs
4528    ) {
4529        return $this->container->run(
4530            'ThumbnailBeforeProduceHTML',
4531            [ $thumbnail, &$attribs, &$linkAttribs ]
4532        );
4533    }
4534
4535    /** @inheritDoc */
4536    public function onTitleExists( $title, &$exists ) {
4537        return $this->container->run(
4538            'TitleExists',
4539            [ $title, &$exists ]
4540        );
4541    }
4542
4543    /** @inheritDoc */
4544    public function onTitleGetEditNotices( $title, $oldid, &$notices ) {
4545        return $this->container->run(
4546            'TitleGetEditNotices',
4547            [ $title, $oldid, &$notices ]
4548        );
4549    }
4550
4551    /** @inheritDoc */
4552    public function onTitleGetRestrictionTypes( $title, &$types ) {
4553        return $this->container->run(
4554            'TitleGetRestrictionTypes',
4555            [ $title, &$types ]
4556        );
4557    }
4558
4559    /** @inheritDoc */
4560    public function onTitleIsAlwaysKnown( $title, &$isKnown ) {
4561        return $this->container->run(
4562            'TitleIsAlwaysKnown',
4563            [ $title, &$isKnown ]
4564        );
4565    }
4566
4567    /** @inheritDoc */
4568    public function onTitleIsMovable( $title, &$result ) {
4569        return $this->container->run(
4570            'TitleIsMovable',
4571            [ $title, &$result ]
4572        );
4573    }
4574
4575    /** @inheritDoc */
4576    public function onTitleMove( $old, $nt, $user, $reason, &$status ) {
4577        return $this->container->run(
4578            'TitleMove',
4579            [ $old, $nt, $user, $reason, &$status ]
4580        );
4581    }
4582
4583    /** @inheritDoc */
4584    public function onTitleMoveStarting( $old, $nt, $user ) {
4585        return $this->container->run(
4586            'TitleMoveStarting',
4587            [ $old, $nt, $user ]
4588        );
4589    }
4590
4591    /** @inheritDoc */
4592    public function onTitleQuickPermissions( $title, $user, $action, &$errors,
4593        $doExpensiveQueries, $short
4594    ) {
4595        return $this->container->run(
4596            'TitleQuickPermissions',
4597            [ $title, $user, $action, &$errors, $doExpensiveQueries, $short ]
4598        );
4599    }
4600
4601    /** @inheritDoc */
4602    public function onTitleReadWhitelist( $title, $user, &$allowed ) {
4603        return $this->container->run(
4604            'TitleReadWhitelist',
4605            [ $title, $user, &$allowed ]
4606        );
4607    }
4608
4609    /** @inheritDoc */
4610    public function onTitleSquidURLs( $title, &$urls ) {
4611        return $this->container->run(
4612            'TitleSquidURLs',
4613            [ $title, &$urls ]
4614        );
4615    }
4616
4617    /** @inheritDoc */
4618    public function onUnblockUser( $block, $user, &$reason ) {
4619        return $this->container->run(
4620            'UnblockUser',
4621            [ $block, $user, &$reason ]
4622        );
4623    }
4624
4625    /** @inheritDoc */
4626    public function onUnblockUserComplete( $block, $user ) {
4627        return $this->container->run(
4628            'UnblockUserComplete',
4629            [ $block, $user ]
4630        );
4631    }
4632
4633    /** @inheritDoc */
4634    public function onUndeleteForm__showHistory( &$archive, $title ) {
4635        return $this->container->run(
4636            'UndeleteForm::showHistory',
4637            [ &$archive, $title ]
4638        );
4639    }
4640
4641    /** @inheritDoc */
4642    public function onUndeleteForm__showRevision( &$archive, $title ) {
4643        return $this->container->run(
4644            'UndeleteForm::showRevision',
4645            [ &$archive, $title ]
4646        );
4647    }
4648
4649    /** @inheritDoc */
4650    public function onUndeletePageToolLinks( IContextSource $context, LinkRenderer $linkRenderer, array &$links ) {
4651        return $this->container->run(
4652            'UndeletePageToolLinks',
4653            [ $context, $linkRenderer, &$links ]
4654        );
4655    }
4656
4657    /** @inheritDoc */
4658    public function onUnitTestsAfterDatabaseSetup( $database, $prefix ) {
4659        return $this->container->run(
4660            'UnitTestsAfterDatabaseSetup',
4661            [ $database, $prefix ]
4662        );
4663    }
4664
4665    /** @inheritDoc */
4666    public function onUnitTestsBeforeDatabaseTeardown() {
4667        return $this->container->run(
4668            'UnitTestsBeforeDatabaseTeardown',
4669            []
4670        );
4671    }
4672
4673    /** @inheritDoc */
4674    public function onUnitTestsList( &$paths ) {
4675        return $this->container->run(
4676            'UnitTestsList',
4677            [ &$paths ]
4678        );
4679    }
4680
4681    /** @inheritDoc */
4682    public function onUnwatchArticle( $user, $page, &$status ) {
4683        return $this->container->run(
4684            'UnwatchArticle',
4685            [ $user, $page, &$status ]
4686        );
4687    }
4688
4689    /** @inheritDoc */
4690    public function onUnwatchArticleComplete( $user, $page ) {
4691        return $this->container->run(
4692            'UnwatchArticleComplete',
4693            [ $user, $page ]
4694        );
4695    }
4696
4697    /** @inheritDoc */
4698    public function onUploadComplete( $uploadBase ) {
4699        return $this->container->run(
4700            'UploadComplete',
4701            [ $uploadBase ]
4702        );
4703    }
4704
4705    /** @inheritDoc */
4706    public function onUploadCreateFromRequest( $type, &$className ) {
4707        return $this->container->run(
4708            'UploadCreateFromRequest',
4709            [ $type, &$className ]
4710        );
4711    }
4712
4713    /** @inheritDoc */
4714    public function onUploadFormInitDescriptor( &$descriptor ) {
4715        return $this->container->run(
4716            'UploadFormInitDescriptor',
4717            [ &$descriptor ]
4718        );
4719    }
4720
4721    /** @inheritDoc */
4722    public function onUploadFormSourceDescriptors( &$descriptor, &$radio,
4723        $selectedSourceType
4724    ) {
4725        return $this->container->run(
4726            'UploadFormSourceDescriptors',
4727            [ &$descriptor, &$radio, $selectedSourceType ]
4728        );
4729    }
4730
4731    /** @inheritDoc */
4732    public function onUploadForm_BeforeProcessing( $upload ) {
4733        return $this->container->run(
4734            'UploadForm:BeforeProcessing',
4735            [ $upload ]
4736        );
4737    }
4738
4739    /** @inheritDoc */
4740    public function onUploadForm_getInitialPageText( &$pageText, $msg, $config ) {
4741        return $this->container->run(
4742            'UploadForm:getInitialPageText',
4743            [ &$pageText, $msg, $config ]
4744        );
4745    }
4746
4747    /** @inheritDoc */
4748    public function onUploadForm_initial( $upload ) {
4749        return $this->container->run(
4750            'UploadForm:initial',
4751            [ $upload ]
4752        );
4753    }
4754
4755    /** @inheritDoc */
4756    public function onUploadStashFile( $upload, $user, $props, &$error ) {
4757        return $this->container->run(
4758            'UploadStashFile',
4759            [ $upload, $user, $props, &$error ]
4760        );
4761    }
4762
4763    /** @inheritDoc */
4764    public function onUploadVerifyFile( $upload, $mime, &$error ) {
4765        return $this->container->run(
4766            'UploadVerifyFile',
4767            [ $upload, $mime, &$error ]
4768        );
4769    }
4770
4771    /** @inheritDoc */
4772    public function onUploadVerifyUpload( $upload, $user, $props, $comment,
4773        $pageText, &$error
4774    ) {
4775        return $this->container->run(
4776            'UploadVerifyUpload',
4777            [ $upload, $user, $props, $comment, $pageText, &$error ]
4778        );
4779    }
4780
4781    /** @inheritDoc */
4782    public function onUserAddGroup( $user, &$group, &$expiry ) {
4783        return $this->container->run(
4784            'UserAddGroup',
4785            [ $user, &$group, &$expiry ]
4786        );
4787    }
4788
4789    /** @inheritDoc */
4790    public function onUserArrayFromResult( &$userArray, $res ) {
4791        return $this->container->run(
4792            'UserArrayFromResult',
4793            [ &$userArray, $res ]
4794        );
4795    }
4796
4797    /** @inheritDoc */
4798    public function onUserCan( $title, $user, $action, &$result ) {
4799        return $this->container->run(
4800            'userCan',
4801            [ $title, $user, $action, &$result ]
4802        );
4803    }
4804
4805    /** @inheritDoc */
4806    public function onUserCanChangeEmail( $user, $oldaddr, $newaddr, &$status ) {
4807        return $this->container->run(
4808            'UserCanChangeEmail',
4809            [ $user, $oldaddr, $newaddr, &$status ]
4810        );
4811    }
4812
4813    /** @inheritDoc */
4814    public function onUserCanSendEmail( $user, &$hookErr ) {
4815        return $this->container->run(
4816            'UserCanSendEmail',
4817            [ $user, &$hookErr ]
4818        );
4819    }
4820
4821    /** @inheritDoc */
4822    public function onUserClearNewTalkNotification( $userIdentity, $oldid ) {
4823        return $this->container->run(
4824            'UserClearNewTalkNotification',
4825            [ $userIdentity, $oldid ]
4826        );
4827    }
4828
4829    /** @inheritDoc */
4830    public function onUserEditCountUpdate( $infos ): void {
4831        $this->container->run(
4832            'UserEditCountUpdate',
4833            [ $infos ],
4834            [ 'abortable' => false ]
4835        );
4836    }
4837
4838    /** @inheritDoc */
4839    public function onUserEffectiveGroups( $user, &$groups ) {
4840        return $this->container->run(
4841            'UserEffectiveGroups',
4842            [ $user, &$groups ]
4843        );
4844    }
4845
4846    /** @inheritDoc */
4847    public function onUserGetAllRights( &$rights ) {
4848        return $this->container->run(
4849            'UserGetAllRights',
4850            [ &$rights ]
4851        );
4852    }
4853
4854    /** @inheritDoc */
4855    public function onUserGetDefaultOptions( &$defaultOptions ) {
4856        return $this->container->run(
4857            'UserGetDefaultOptions',
4858            [ &$defaultOptions ]
4859        );
4860    }
4861
4862    /** @inheritDoc */
4863    public function onUserGetEmail( $user, &$email ) {
4864        return $this->container->run(
4865            'UserGetEmail',
4866            [ $user, &$email ]
4867        );
4868    }
4869
4870    /** @inheritDoc */
4871    public function onUserGetEmailAuthenticationTimestamp( $user, &$timestamp ) {
4872        return $this->container->run(
4873            'UserGetEmailAuthenticationTimestamp',
4874            [ $user, &$timestamp ]
4875        );
4876    }
4877
4878    /** @inheritDoc */
4879    public function onUserGetLanguageObject( $user, &$code, $context ) {
4880        return $this->container->run(
4881            'UserGetLanguageObject',
4882            [ $user, &$code, $context ]
4883        );
4884    }
4885
4886    /** @inheritDoc */
4887    public function onUserPrivilegedGroups( $userIdentity, &$groups ) {
4888        return $this->container->run(
4889            'UserPrivilegedGroups',
4890            [ $userIdentity, &$groups ]
4891        );
4892    }
4893
4894    /** @inheritDoc */
4895    public function onUserGetReservedNames( &$reservedUsernames ) {
4896        return $this->container->run(
4897            'UserGetReservedNames',
4898            [ &$reservedUsernames ]
4899        );
4900    }
4901
4902    /** @inheritDoc */
4903    public function onUserGetRights( $user, &$rights ) {
4904        return $this->container->run(
4905            'UserGetRights',
4906            [ $user, &$rights ]
4907        );
4908    }
4909
4910    /** @inheritDoc */
4911    public function onUserGetRightsRemove( $user, &$rights ) {
4912        return $this->container->run(
4913            'UserGetRightsRemove',
4914            [ $user, &$rights ]
4915        );
4916    }
4917
4918    /** @inheritDoc */
4919    public function onUserGroupsChanged( $user, $added, $removed, $performer,
4920        $reason, $oldUGMs, $newUGMs
4921    ) {
4922        return $this->container->run(
4923            'UserGroupsChanged',
4924            [ $user, $added, $removed, $performer, $reason, $oldUGMs,
4925                $newUGMs ]
4926        );
4927    }
4928
4929    /** @inheritDoc */
4930    public function onUserIsBlockedFrom( $user, $title, &$blocked, &$allowUsertalk ) {
4931        return $this->container->run(
4932            'UserIsBlockedFrom',
4933            [ $user, $title, &$blocked, &$allowUsertalk ]
4934        );
4935    }
4936
4937    /** @inheritDoc */
4938    public function onUserIsBot( $user, &$isBot ) {
4939        return $this->container->run(
4940            'UserIsBot',
4941            [ $user, &$isBot ]
4942        );
4943    }
4944
4945    /** @inheritDoc */
4946    public function onUserIsEveryoneAllowed( $right ) {
4947        return $this->container->run(
4948            'UserIsEveryoneAllowed',
4949            [ $right ]
4950        );
4951    }
4952
4953    /** @inheritDoc */
4954    public function onUserIsLocked( $user, &$locked ) {
4955        return $this->container->run(
4956            'UserIsLocked',
4957            [ $user, &$locked ]
4958        );
4959    }
4960
4961    /** @inheritDoc */
4962    public function onUserLinkRendererUserLinkPostRender(
4963        UserIdentity $targetUser, IContextSource $context, &$html, &$prefix, &$postfix
4964    ) {
4965        return $this->container->run(
4966            'UserLinkRendererUserLinkPostRender',
4967            [ $targetUser, $context, &$html, &$prefix, &$postfix ]
4968        );
4969    }
4970
4971    /** @inheritDoc */
4972    public function onUserLoadAfterLoadFromSession( $user ) {
4973        return $this->container->run(
4974            'UserLoadAfterLoadFromSession',
4975            [ $user ]
4976        );
4977    }
4978
4979    /** @inheritDoc */
4980    public function onUserLoadDefaults( $user, $name ) {
4981        return $this->container->run(
4982            'UserLoadDefaults',
4983            [ $user, $name ]
4984        );
4985    }
4986
4987    /** @inheritDoc */
4988    public function onLoadUserOptions( UserIdentity $user, array &$options ): void {
4989        $this->container->run(
4990            'LoadUserOptions',
4991            [ $user, &$options ],
4992            [ 'abortable' => false ]
4993        );
4994    }
4995
4996    /** @inheritDoc */
4997    public function onUserLoggedIn( $user ) {
4998        return $this->container->run(
4999            'UserLoggedIn',
5000            [ $user ]
5001        );
5002    }
5003
5004    /** @inheritDoc */
5005    public function onUserLoginComplete( $user, &$inject_html, $direct ) {
5006        return $this->container->run(
5007            'UserLoginComplete',
5008            [ $user, &$inject_html, $direct ]
5009        );
5010    }
5011
5012    /** @inheritDoc */
5013    public function onUserLogout( $user ) {
5014        return $this->container->run(
5015            'UserLogout',
5016            [ $user ]
5017        );
5018    }
5019
5020    public function onUserModifyCreateAccountEmail(
5021        User $user, User $performer, Message &$subject, Message &$body
5022    ): void {
5023        $this->container->run(
5024            'UserModifyCreateAccountEmail',
5025            [ $user, $performer, &$subject, &$body ],
5026            [ 'abortable' => false ]
5027        );
5028    }
5029
5030    /** @inheritDoc */
5031    public function onUserLogoutComplete( $user, &$inject_html, $oldName ) {
5032        return $this->container->run(
5033            'UserLogoutComplete',
5034            [ $user, &$inject_html, $oldName ]
5035        );
5036    }
5037
5038    /** @inheritDoc */
5039    public function onUserMailerChangeReturnPath( $to, &$returnPath ) {
5040        return $this->container->run(
5041            'UserMailerChangeReturnPath',
5042            [ $to, &$returnPath ]
5043        );
5044    }
5045
5046    /** @inheritDoc */
5047    public function onUserMailerSplitTo( &$to ) {
5048        return $this->container->run(
5049            'UserMailerSplitTo',
5050            [ &$to ]
5051        );
5052    }
5053
5054    /** @inheritDoc */
5055    public function onUserMailerTransformContent( $to, $from, &$body, &$error ) {
5056        return $this->container->run(
5057            'UserMailerTransformContent',
5058            [ $to, $from, &$body, &$error ]
5059        );
5060    }
5061
5062    /** @inheritDoc */
5063    public function onUserMailerTransformMessage( $to, $from, &$subject, &$headers,
5064        &$body, &$error
5065    ) {
5066        return $this->container->run(
5067            'UserMailerTransformMessage',
5068            [ $to, $from, &$subject, &$headers, &$body, &$error ]
5069        );
5070    }
5071
5072    /** @inheritDoc */
5073    public function onUserRemoveGroup( $user, &$group ) {
5074        return $this->container->run(
5075            'UserRemoveGroup',
5076            [ $user, &$group ]
5077        );
5078    }
5079
5080    /** @inheritDoc */
5081    public function onUserRequirementsCondition( string|int $type, array $args, UserIdentity $user,
5082        bool $isPerformingRequest, ?bool &$result
5083    ): void {
5084        $this->container->run(
5085            'UserRequirementsCondition',
5086            [ $type, $args, $user, $isPerformingRequest, &$result ],
5087            [ 'abortable' => false ]
5088        );
5089    }
5090
5091    /** @inheritDoc */
5092    public function onUserRequirementsConditionDisplay( string|int $type, array $args, IContextSource $context,
5093        ?MessageSpecifier &$messageSpec
5094    ): void {
5095        $this->container->run(
5096            'UserRequirementsConditionDisplay',
5097            [ $type, $args, $context, &$messageSpec ],
5098            [ 'abortable' => false ]
5099        );
5100    }
5101
5102    /** @inheritDoc */
5103    public function onSaveUserOptions( UserIdentity $user, array &$modifiedOptions, array $originalOptions ) {
5104        return $this->container->run(
5105            'SaveUserOptions',
5106            [ $user, &$modifiedOptions, $originalOptions ]
5107        );
5108    }
5109
5110    /** @inheritDoc */
5111    public function onLocalUserOptionsStoreSave( UserIdentity $user, array $oldOptions, array $newOptions ): void {
5112        $this->container->run(
5113            'LocalUserOptionsStoreSave',
5114            [ $user, $oldOptions, $newOptions ],
5115            [ 'abortable' => false ]
5116        );
5117    }
5118
5119    /** @inheritDoc */
5120    public function onUserSaveSettings( $user ) {
5121        return $this->container->run(
5122            'UserSaveSettings',
5123            [ $user ]
5124        );
5125    }
5126
5127    /** @inheritDoc */
5128    public function onUserSendConfirmationMail( $user, &$mail, $info ) {
5129        return $this->container->run(
5130            'UserSendConfirmationMail',
5131            [ $user, &$mail, $info ]
5132        );
5133    }
5134
5135    /** @inheritDoc */
5136    public function onUserSetEmail( $user, &$email ) {
5137        return $this->container->run(
5138            'UserSetEmail',
5139            [ $user, &$email ]
5140        );
5141    }
5142
5143    /** @inheritDoc */
5144    public function onUserSetEmailAuthenticationTimestamp( $user, &$timestamp ) {
5145        return $this->container->run(
5146            'UserSetEmailAuthenticationTimestamp',
5147            [ $user, &$timestamp ]
5148        );
5149    }
5150
5151    /** @inheritDoc */
5152    public function onUsersPagerDoBatchLookups( $dbr, $userIds, &$cache, &$groups ) {
5153        return $this->container->run(
5154            'UsersPagerDoBatchLookups',
5155            [ $dbr, $userIds, &$cache, &$groups ]
5156        );
5157    }
5158
5159    /** @inheritDoc */
5160    public function onUserToolLinksEdit( $userId, $userText, &$items ) {
5161        return $this->container->run(
5162            'UserToolLinksEdit',
5163            [ $userId, $userText, &$items ]
5164        );
5165    }
5166
5167    /** @inheritDoc */
5168    public function onUser__mailPasswordInternal( $user, $ip, $u ) {
5169        return $this->container->run(
5170            'User::mailPasswordInternal',
5171            [ $user, $ip, $u ]
5172        );
5173    }
5174
5175    /** @inheritDoc */
5176    public function onValidateExtendedMetadataCache( $timestamp, $file ) {
5177        return $this->container->run(
5178            'ValidateExtendedMetadataCache',
5179            [ $timestamp, $file ]
5180        );
5181    }
5182
5183    /** @inheritDoc */
5184    public function onWantedPages__getQueryInfo( $wantedPages, &$query ) {
5185        return $this->container->run(
5186            'WantedPages::getQueryInfo',
5187            [ $wantedPages, &$query ]
5188        );
5189    }
5190
5191    /** @inheritDoc */
5192    public function onWatchArticle( $user, $page, &$status, $expiry ) {
5193        return $this->container->run(
5194            'WatchArticle',
5195            [ $user, $page, &$status, $expiry ]
5196        );
5197    }
5198
5199    /** @inheritDoc */
5200    public function onWatchArticleComplete( $user, $page ) {
5201        return $this->container->run(
5202            'WatchArticleComplete',
5203            [ $user, $page ]
5204        );
5205    }
5206
5207    /** @inheritDoc */
5208    public function onWatchedItemQueryServiceExtensions( &$extensions,
5209        $watchedItemQueryService
5210    ) {
5211        return $this->container->run(
5212            'WatchedItemQueryServiceExtensions',
5213            [ &$extensions, $watchedItemQueryService ]
5214        );
5215    }
5216
5217    /** @inheritDoc */
5218    public function onWatchlistEditorBeforeFormRender( &$watchlistInfo ) {
5219        return $this->container->run(
5220            'WatchlistEditorBeforeFormRender',
5221            [ &$watchlistInfo ]
5222        );
5223    }
5224
5225    /** @inheritDoc */
5226    public function onWatchlistEditorBuildRemoveLine( &$tools, $title, $redirect,
5227        $skin, &$link
5228    ) {
5229        return $this->container->run(
5230            'WatchlistEditorBuildRemoveLine',
5231            [ &$tools, $title, $redirect, $skin, &$link ]
5232        );
5233    }
5234
5235    /** @inheritDoc */
5236    public function onWebRequestPathInfoRouter( $router ) {
5237        return $this->container->run(
5238            'WebRequestPathInfoRouter',
5239            [ $router ]
5240        );
5241    }
5242
5243    /** @inheritDoc */
5244    public function onWebResponseSetCookie( &$name, &$value, &$expire, &$options ) {
5245        return $this->container->run(
5246            'WebResponseSetCookie',
5247            [ &$name, &$value, &$expire, &$options ]
5248        );
5249    }
5250
5251    /** @inheritDoc */
5252    public function onWfShellWikiCmd( &$script, &$parameters, &$options ) {
5253        return $this->container->run(
5254            'wfShellWikiCmd',
5255            [ &$script, &$parameters, &$options ]
5256        );
5257    }
5258
5259    /** @inheritDoc */
5260    public function onWgQueryPages( &$qp ) {
5261        return $this->container->run(
5262            'wgQueryPages',
5263            [ &$qp ]
5264        );
5265    }
5266
5267    /** @inheritDoc */
5268    public function onWhatLinksHereProps( $row, $title, $target, &$props ) {
5269        return $this->container->run(
5270            'WhatLinksHereProps',
5271            [ $row, $title, $target, &$props ]
5272        );
5273    }
5274
5275    /** @inheritDoc */
5276    public function onWikiExporter__dumpStableQuery( &$tables, &$opts, &$join ) {
5277        return $this->container->run(
5278            'WikiExporter::dumpStableQuery',
5279            [ &$tables, &$opts, &$join ]
5280        );
5281    }
5282
5283    /** @inheritDoc */
5284    public function onWikiPageDeletionUpdates( $page, $content, &$updates ) {
5285        return $this->container->run(
5286            'WikiPageDeletionUpdates',
5287            [ $page, $content, &$updates ]
5288        );
5289    }
5290
5291    /** @inheritDoc */
5292    public function onWikiPageFactory( $title, &$page ) {
5293        return $this->container->run(
5294            'WikiPageFactory',
5295            [ $title, &$page ]
5296        );
5297    }
5298
5299    /** @inheritDoc */
5300    public function onXmlDumpWriterOpenPage( $obj, &$out, $row, $title ) {
5301        return $this->container->run(
5302            'XmlDumpWriterOpenPage',
5303            [ $obj, &$out, $row, $title ]
5304        );
5305    }
5306
5307    /** @inheritDoc */
5308    public function onXmlDumpWriterWriteRevision( $obj, &$out, $row, $text, $rev ) {
5309        return $this->container->run(
5310            'XmlDumpWriterWriteRevision',
5311            [ $obj, &$out, $row, $text, $rev ]
5312        );
5313    }
5314}