Extensible Code Generation with Java, Part 1