Использование groovy AST Transform для модификации Java - PullRequest
2 голосов
/ 02 ноября 2009

Можно ли будет использовать код преобразования groovy ast для управления классами Java?

Если да, приведите пример.

Если нет, уточните почему.

Ответы [ 2 ]

5 голосов
/ 05 ноября 2009

Да, можно использовать Groovy AST Transformations с Java-кодом. Groovy компилируется в байт-код Java и основывается на библиотеках Java. Взаимодействие между двумя языками отличное.

Существует целый раздел на отличном сайте, который охватывает AST Transformations .

Вот пример смешанного Java / Groovy-приложения. У вас есть стандартный интерфейс и реализация Java. Классы groovy используют преобразование @Delegate AST, а также invokeMethod.

Классы Java:

interface IFoo {
    public String someMethod(String arg1);
}

class Foo implements IFoo {
    public String someMethod(String arg1) { 
        arg1+arg1;
    }
}

Классные классы:

class Bar implements IFoo {
    @Delegate Foo foo = new Foo()
    def otherMethod() {
        someMethod("abcdef")
    }
}

Выполнение new Bar (). OtherMethod () вернет 'abcdefabcdef'.

0 голосов
/ 02 ноября 2009

Может быть. Ваша первая проблема будет найти компилятор Java, который предлагает вам AST. Попробуйте компилятор Eclipse; здесь вам просто нужно сопоставить все типы с теми, которые ожидаются преобразователем Groovy AST. Утиная печать поможет, но только если два AST содержат совместимую информацию (в чем я сомневаюсь).

После этого вам нужно найти способ получить AST от компилятора до того, как сгенерируется байт-код, а затем способ вставить модифицированного AST в компилятор снова получить байт-код.

В целом, вероятно, не невозможно, но это потребует некоторой работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...