Janino Compatibility Matrix

What modern Java syntax compiles, and what doesn't.

The plugin uses Janino as its embedded compiler, and it doesn’t implement the full modern Java language. Below are the results of direct testing.

Works Doesn’t work
Java 8-and-earlier syntax (loops, try/catch, arrays, generics on JDK types, switch statements) Lambda expressions (x -> ...) — Compilation of lambda expression NYI
Text blocks ("""...""", Java 15+) Method references (Foo::bar) — Compilation of method reference NYI
Local classes, e.g. class Box { ... } inside a block final class declared as a local class — IDENTIFIER expected instead of 'class'
switch expressions (case X -> value, Java 14+) — Unexpected token "switch" in primary
var local-variable type inference (Java 10+) — Local variable type inference NYI
Collections generic-typed with a local class type their elements as Object; needs an explicit cast ((Hit) list.get(i))

Compile failures for unsupported syntax are normal compiler errors, mapped precisely to the script line and harmless to the running server — they simply won’t compile until Janino adds support for that feature.