I've never known all the rules for interpreting "encoded" signatures
like "package.class.func()Ljava/util/Set". I usually make a
reasonable guess for what I think it specifies. I'd really like to
know the exact rules, as strings like this often come up in exception
stack traces. Where is this documented? Would the JLS cover this in
a readable form?