I have some experience with code generation, significantly less with diagramming. I have a few suggestions:
I notice you use human readable text. I suggest googling for Inflector.java and choosing an appropriate implementation. This will also help with variable names for unlabelled relationships between classes (pluralization gives you
List<Foo> foos and stuff like that).
I use UML diagrams, but I use an xml serialized form. The UML XMI stuff from OMG has been helpful to me. It's much easier to import/export the underlying information for UML diagrams than to lay them out yourself. This might not be applicable since you seem to want to do the diagramming portion yourself. Much has been written on laying out diagrams. I suggest you do some reading if you want to generate diagrams from source without resulting in a jumbled mess.
I use both antlr and StringTemplate. Starting with a good parser/grammar to read source is nice. StringTemplate is pretty nice for generating source code. I also use it at work for email templates. If you don't want to read source, suck in a jar or class file and go to town. I have a lot of code built around BCEL. You might want to look at ASM if you don't like BCEL.