Patch Set 8: No score; No score

If external subclasses do not need to call it, make it package private. If some users outside the package needs to call it you need to open it up and using protected (in this case) and document the restriction. At least eclipse has a numbner of special @-notations for this purpose.

Regardless of whether it is part of the API, it should be documented since it is used in so many places.

About the exceptions you are probably mostly right, exception for "internal" in the name. If it is truly an "ouch, something bad that we have no idea about what it is", it should be a RuntimeException and not a checked one.