Как мне сгенерировать новый исходный код в текстовой форме в плагине компилятора Scala?

Я только что закончил первую версию плагина компилятора Java 6, который автоматически генерирует оболочки (прокси, адаптер, делегат, назовите его как хотите) на основе аннотации.

Поскольку я делаю смешанные проекты Java / Scala, я хотел бы иметь возможность использовать одну и ту же аннотацию в моем коде Scala и получать такой же сгенерированный код (за исключением, конечно, Scala). По сути, это означает, что нужно начинать с нуля.

Что я хотел бы сделать и для чего я еще не нашел примера, так это как мне сгенерировать код внутри подключаемого модуля компилятора Scala таким же образом, как и в подключаемом модуле компилятора Java. То есть я сопоставляю / нахожу, где используется моя аннотация, получаю AST для аннотированного интерфейса, а затем прошу API предоставить мне Stream / Writer, в котором я выводю сгенерированный исходный код Scala, используя манипуляции со строками .

Эту последнюю часть я не смог найти. Итак, как мне сказать API создать новый исходный файл Scala и дать мне Stream / Writer / File / Handle, чтобы я мог просто писать в нем, и когда я закончу, компилятор Scala компилирует его в тот же запуск, в котором был вызван плагин?

Зачем мне это нужно? Во-первых, потому что оба плагина имеют одинаковую структуру, что упрощает обслуживание.Во-вторых, я хочу открыть его исходный код, и просто нет возможности поддерживать каждый вариант, который кому-то нужен, поэтому я ожидаю, что потенциальные пользователи захотят расширить генерацию своим собственным кодом. Им будет намного проще, если им просто нужно будет выполнить printf () вместо изучения AST API (это также относится ко мне).

8
задан Sebastien Diot 2 October 2011 в 10:12
поделиться