Матрица совместимости с Janino
Что из современного Java-синтаксиса компилируется, а что — нет.
Плагин использует Janino как встроенный компилятор, и он реализует не весь современный Java-синтаксис. Ниже — результаты прямого тестирования.
| Работает | Не работает |
|---|---|
Java 8-и-раньше синтаксис (циклы, try/catch, массивы, generics для JDK-типов, switch-операторы) |
Lambda-выражения (x -> ...) — Compilation of lambda expression NYI |
Текстовые блоки ("""...""", Java 15+) |
Method references (Foo::bar) — Compilation of method reference NYI |
Локальные классы, например class Box { ... } внутри блока |
final class, объявленный как локальный класс — IDENTIFIER expected instead of 'class' |
switch-выражения (case X -> value, Java 14+) — Unexpected token "switch" in primary |
|
Локальный вывод типа var (Java 10+) — Local variable type inference NYI |
|
Коллекции с generic-типом от локального класса типизируются как Object; нужен явный каст ((Hit) list.get(i)) |
Ошибки компиляции для неподдерживаемого синтаксиса — это обычные ошибки компилятора, с точной привязкой к строке скрипта и без вреда для работы сервера. Они просто никогда не скомпилируются, пока Janino не добавит соответствующую поддержку.