based on Josh Marinacci's bespokeIDE project - uses Java's compiler API