Трансляция кода из Groovy в Java в IntelliJ IDEA Дипломная работа Медведева Максима Научный руководитель: Громов П. С.
Groovy Динамический Объектно-ориентированный Совместим с Java На JVM Groovy-класс является Java-классом и наоборот Наследование сохраняет динамические свойства Расширяет синтаксис Java
Мотивация Ускорение критических частей кода Groovy медленнее Java в 5-10 раз Кроссъязыковые рефакторинги Изменение сигнатуры метода Добавление параметра Пожелания пользователей InetlliJ IDEA
Постановка задачи Транслятор исходного кода на Groovy в исходный код на Java в контексте IntelliJ IDEA Трансляция всех конструкций языка Около 90 Избавление от «динамичности» Вычисление типов Расстановка статических ссылок
Архитектура Транслятор блоков Транслятор выражений Транслятор классов Метод Выражение Замыкание Анон. класс Контекст трансляции
Трансляция ссылок def list=[1, 2, 3] print list[0] print list.get(1); print list.empty List list = new ArrayList (Arrays.asList(1, 2, 3)); print(DefaultGroovyMethods.getAt(list, 0)) print(list.get(1)); print(list.isEmpty());
Трансляция замыканий def x=0 list.each{int y -> x+=y } print x final Reference x=new Reference (0); DefaultGroovyMethods.each(list, new Closure (this, this) { public Number doCall(int y) { int i=x.get()+y; x.set(i); return i; }
Результаты Транслятор реализован Вывод типов Расстановка ссылок Улучшен вывод типов бинарных и унарных операторов Внедрен в IntelliJ IDEA Рефакторинг «Трансляция в Java» Появится в следующей версии IntelliJ IDEA