Terms/PostingsConsumer doesnt do it in general: e.g. startField doesn't tell you the number of terms, and startTerms
doesnt tell you the number of documents. so they must have finish() since they are filtering deleted docs on the fly.
For the per-document apis (Stored Fields, Term Vectors), we instead give you this number totally up-front (as it makes it easier to e.g. write numTerms into your file).
I'm not necessarily opposed to the redundant calls, but it should then also be done with the stored fields api. And i'd like to see if it really simplifies some of our existing impls (SimpleText, Lucene40) as well.
Finally, adding checks to AssertingCodec as a test is a good idea, however it still leaves our default merge implementation untested because the wrapped codec implements bulk merge.