A very well known quote is: Less is more.
For the model-classes that's for sure. Right now users see all the methods of every model, including the one which are responsible for building the model. If we only show does methods which we want to expose, the API should be much easier to read and use.
Another advantage is that we can define different implementations. For instance: right now the JavaClass contains some code for handling the package, while this is actually part of the JavaSource. This is done to be able to create a JavaClass without source. This results is some duplicate code. My idea is to have a DefaultJavaSource and NoJavaSource implementation, but for the user it's just JavaSource and he won't have to notice any difference.