See D11108 for an example... basically, a method was named incorrectly in a subclass.
From IRC:
```
<joshuaspence> d'oh
i figured it out
i've been using shouldWriteInverseTransaction instead of shouldWriteInverseTransactions
as the method name
ManiphestTaskDependsOnTaskEdgeType (the diff that i was copying) seems to have done this as well
<epriestley> ohhhh
we should fix that
<joshuaspence> sending you a diff
<epriestley> I don't have a great way to detect that in general without doing some kind of "@override" annotation, which seems really heavy to me.
We might be able to look for similar method names in the visibility-of-extended-methods test, maybe.
<joshuaspence> yeah, i was thinking the same
<-- nickz has quit (Ping timeout: 240 seconds)
<joshuaspence> D11108
<phabot> D11108: Fix method name - https://secure.phabricator.com/D11108
<epriestley> e.g., "class X defines 'shouldWriteInverseTransaction', which is suspiciously similar to overridable method 'shouldWriteInverseTransactions' in parent class Y. If this is not a mistake, annotate the method with "@not-an-override-I-promise""
<joshuaspence> i think @override isn't too bad if it's optional
<epriestley> We could only warn you if you actually used it, though, and I'd guess most code won't.
Like, it's heavyweight / cumbersome enough (and I encounter these issues so rarely) that I'd probably not bother, realistically.
<joshuaspence> yeah, idk
<epriestley> I wonder if we could annotate base classes as, like "strict template class".
And then warn on new non-private methods introduced in subclasses.
Since those are always wrong on EdgeType, PHIDType, Application, and probably a lot of others.
(They're not always wrong on Controller, DAO, View, etc., so we couldn't always do it.)
<joshuaspence> yeah, that seems sort-of not-so-bad
<epriestley> Not sure if that'd be worth it, but I think it'd be a strong signal for the most copy-pastey classes, at least.
Which are also probably the classes where an error is most likely to occur.
Maybe we could do, like:
- Recognize @override as an option.
- Allow classes to be annotated as @override-required.
well
I don't really want to have to put @override on everything
I feel like, at least in this codebase, we actually want the opposite.
<joshuaspence> i like the "strict template class" idea best
<epriestley> Like @newapi
And then you'd mark some classes as "@newapi-required".
Although "@newapi" is a bad name
```