Robert: After reviewing the code:
The fixed-nonchangeable "default" in AnalyzerWrapper is PerField, which is a large overhead and should only be used in stuff like PerFieldAnalyzerWrapper (this class should call super(PerField) in its own ctor). But for other use cases of AnalyzerWrapper I have to use global strategy or the one of a wrapped analyzer). It looks like the current impl in AnalyzerWrapper is somehow assuming you want to wrap per field.
I would suggest to make it mandatory in Lucene trunk, and add the missing ctor in Lucene 4.x, too. The default one should be deprecated with a hint that it might be a bad idea to use this default.
My use case is:
I have lots of predefined Analyzers for several languages or functionality in my search application. I have some additional AnalyzerWrappers around that simply turn any other analyzer into a phonetic one or ASCIIFolding one (so I can use that with another field). So, my wrapper just takes one of these per-language Analyzers and wraps with another additional TokenFilter. As the underlying Analyzer is global reuse, I need to make the wrapper global, too - currently impossible. Per field is a waste of resources in this case.
Only PerFieldAnalyzerWrapper should use PerField strategy hardcoded (as it is per field), the base class not!
So I would suggest to make the base class AnalyzerWrapper copy the ctor of the superclass Analyzer and deprecate the default ctor in 4.x. For my above example (to wrap another analyzer), I still need the resuse strategy of the inner analyzer, so I need set getter on Analyzer.java, too (see current patch).