This is a protected function that has existed since at least 1.32 (although it appeared to be unused in core there too, I didn't check extensions yet).
Can we simply remove it (given that it is unused and has been for some time), or must we go through the Deprecation Policy at https://www.mediawiki.org/wiki/Deprecation_policy by starting with soft deprecation? If we can remove in this case, should we email wikitech-l and document per the policy page?
Looks to have been there since 1.16 :)
It is mentioned a couple of times in TitleTest, which suggest they're covering it. That's obviously a lie... They were added by @Legoktm in https://github.com/wikimedia/mediawiki/commit/b3dd0fb560aa1a3a0d3c1cd75eacb055e56222b8
The obvious one would've been some call that has been removed/replaced at some point (if it was ever called)... I wonder if it was orphaned in the 1.16 refactoring? :)
I think the question here is therefore whether anyone is likely to subclass Title in any random extension (because that's basically the only way it'd be used)... Considering we don't have any examples of anyone doing that in any of our hosted extensions, I imagine it's unlikely
If it was public, it forms part of an "interface"... We would follow protocol. For a protected unused method? I'd get rid. You can add it to RELEASE-NOTES, but I wouldn't bother with wikitech-l etc
If it happens to be used by some weird dynamically generated call.. Well, the tests should break. If they don't, and it is used weirdly like that... Well, shame on them for not leaving any grep-ability behind
More specifically, the stable part of the PHP API is comprised of all code that is explicitly marked public, and has been included in at least one stable release. In addition, some classes expect to be subclassed in extensions; in those cases protected functions also are included in the API. These classes should have a note in their documentation comment that they expect subclassing. If no note is present, it SHOULD be assumed that the class is not expected to be subclassed.
...so the deprecation policy clearly doesn't apply here.
I removed Title::validateFileMoveOperation and also removed the test comment saying the method was covered in the test but not the test itself since it is calling the replacement method.