Almost completely removed idf from the Weights – it still lingers in explain().
Right, explain() is a big TODO of a refactoring job, you did the right thing, its not easily solved until we refactor it big-time so that any arbitrary Similarity can explain its own scoring. Not to make any promises, but I think by doing such a thing (letting a Similarity control how the explaining works), we will make progress towards LUCENE-3118 too: if you customize the scoring system for your app, you should be able to explain the scores in a way that make sense to your app too.
The DocScorer factory methods now need both the Weight and the Stats; that's the best I could do for now.
This sounds like a good step to me! We want to just pass only the Stats to the DocScorer factory methods, but we have some more work to do before that... such as better handling of the whole boosting situation and pushing all responsibility for query normalization into stats.
once we have done this, i think Weight/Stats will make sense (except for naming) as it will be be the parallel of Scorer/DocScorer, full responsibility for scoring is in the Similarity and Weight/Scorer only handle things like seeking to terms, creating docsenums, iterating postings lists, etc