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.