Преобразование AST в Groovy: создание макроса для предоставления базового конструктора

Я хотел бы сделать макрос, который бы существенно расширил это:

@WithBasicConstructor
class Person {
  private String name
  private String address
}

в это:

class Person {
  private String name
  private String address

  Person(String name, String address) {
    this.name = name
    this.address = address
  }
}

Я прочитал код для @Immutable, чтобы понять, как это делается. Кто-нибудь пользовался новым AstBuilder?

Есть идеи, как это реализовать? Есть ли предпочтительный вариант между AstBuilder для строки/кода/спецификации?


person Alex Baranosky    schedule 18.02.2011    source источник
comment
какие желательные свойства предоставит этот @WithBasicConstructor, которые еще не предоставлены @Immutable?   -  person Dónal    schedule 18.02.2011
comment
@Immutable применяет к классу большое количество других вещей, отличных от того, что я хочу   -  person Alex Baranosky    schedule 20.02.2011


Ответы (1)


Вы можете использовать (или скопировать) @groovy.transform.TupleConstructor из groovy 1.8.
Что касается настроек... Мне нравится buildFromSpec, с ним меньше сюрпризов.
Но я бы посоветовал вам попробовать buildFromCode, проверить его ограничения и особенности, немного поиграть со всеми.

person jpertino    schedule 18.02.2011