Я только что закончил первую версию плагина компилятора Java 6, который автоматически генерирует оболочки (прокси, адаптер, делегат, называйте это как хотите) на основе аннотации.
Поскольку я занимаюсь смешанными проектами Java / Scala, я хотел бы иметь возможность использовать одну и ту же аннотацию внутри моего кода Scala и получать такой же сгенерированный код (кроме, конечно, в Scala). Это в основном означает начинать с нуля.
То, что я хотел бы сделать, и для которого я еще не нашел пример, - это как сгенерировать код внутри плагина компилятора Scala так же, как и в плагине компилятора Java. То есть я сопоставляю / нахожу, где используется моя аннотация, получаю AST для аннотированного интерфейса, а затем прошу API дать мне Stream / Writer, в котором я выводю сгенерированный исходный код Scala, используя манипуляции со строками .
Эту последнюю часть я не смог найти. Итак, как мне сказать API создать новый исходный файл Scala и дать мне Stream / Writer / File / Handle, чтобы я мог просто написать в нем, и когда я это сделаю, компилятор Scala компилирует его в тот же прогон, в котором был запущен плагин?
Зачем мне это делать? Во-первых, потому что чем оба плагина имеют одинаковую структуру, то и обслуживание простое. Во-вторых, я хочу открыть его с открытым исходным кодом, и просто нет способа поддержать каждый вариант, который бы кто-нибудь захотел, поэтому я ожидаю, что потенциальные пользователи захотят расширить генерацию своим собственным кодом. Для них это будет намного проще, если им просто нужно выполнить printf () вместо изучения AST API (это относится и ко мне).