How about we start by adding ctors that don't require a reader, and do treat them as 4.x fodder?
I'd prefer not, because then there needs to be very sophisticated backwards compat to know which one to call. and subclassing gets complicated.
I would really prefer we just choose to fix the API, either 1) 5.0-only or 2) break it in a 4.x release
From my perspective, Benson would be probably be the one most impacted by such a 4.x break. So if he really wants to do this, I have no problem.
setReader throws IOException, but the existing constructors don't. Analyzer 'createComponents' doesn't. How to sort this out?
I dont see the problem. I think createComponents doesnt need to throw exception: instead the logic of Analyzer.tokenStream changes slightly, to call components.setReader(r) in both cases of the if-then-else. Make sense?