it is a very bad practice to throw exceptions from a builder.

From Builder javadocs:
"All builders should try to be robust in the face of trouble. In situations where failing the build by throwing CoreException is the only option, a builder has a choice of how best to communicate the problem back to the caller. One option is to use the IResourceStatus.BUILD_FAILED status code along with a suitable message; another is to use a MultiStatus containing finer-grained problem diagnoses. "