Yet another clue. If instead of trying to complete on variable `s'--whose declared type is Server--and instead try to complete on an object literal for that type, Analyzer completion works. That is, if instead of this:
Server s = new Server();
s. <-- try to complete here
I do this:
(new Server()). <-- try to complete here
This seems to work. Interestingly, if I try to complete on the type, but not on a new object literal of that type, instead of getting just the class variables (static variables and methods in Java-speak), completion "works", but it gives the wrong results. For example:
Server. <-- try to complete here
This SHOULD only complete class (or "static") variables and methods. It should filter out instance variables and methods, but it does not. This may be a separate problem.
Presumably, these things work perfectly in C++ (though I haven't checked), since CEDET and Semantic seem to have the most robust support for C/C++. In the syntax and semantics, Java is a pretty close match to C++, so I'm sort of surprised this doesn't work.