From 5d7bf5d57aa729108679745c19af2959a1bd64cb Mon Sep 17 00:00:00 2001 From: Kyle Wood Date: Sun, 23 Sep 2018 14:00:46 -0500 Subject: [PATCH] Enable experimental ASM support for Java 11 plugins (#1480) JEP 181 brings a new bytecode format for nest mates. ASM API 7 supports this, but API 7 is still experimental. Attempting to load a Java 11 class that contains nest mates will cause an UnsupportedOperationException, as API 6 can't handle them. This doesn't really require any changes to the rest of the code, since this is just related to ASM's visitor. We want to use the stable API 6 for all other plugins, only using the experimental API when required, so we check the class version first. This should be removed as soon as ASM API 7 is stable. --- ...ntal-ASM-support-for-Java-11-plugins.patch | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 Spigot-Server-Patches/0382-Enable-experimental-ASM-support-for-Java-11-plugins.patch diff --git a/Spigot-Server-Patches/0382-Enable-experimental-ASM-support-for-Java-11-plugins.patch b/Spigot-Server-Patches/0382-Enable-experimental-ASM-support-for-Java-11-plugins.patch new file mode 100644 index 0000000000..360c847025 --- /dev/null +++ b/Spigot-Server-Patches/0382-Enable-experimental-ASM-support-for-Java-11-plugins.patch @@ -0,0 +1,55 @@ +From 09b0529f9a30a17ba7c288f1ea973300b8f4e84f Mon Sep 17 00:00:00 2001 +From: Kyle Wood +Date: Sun, 23 Sep 2018 12:52:21 -0500 +Subject: [PATCH] Enable experimental ASM support for Java 11 plugins + +JEP 181 brings a new bytecode format for nest mates. ASM API 7 supports +this, but API 7 is still experimental. Attempting to load a Java 11 +class that contains nest mates will cause an +UnsupportedOperationException, as API 6 can't handle them. This doesn't +really require any changes to the rest of the code, since this is just +related to ASM's visitor. + +We want to use the stable API 6 for all other plugins, only using the +experimental API when required, so we check the class version first. + +This should be removed as soon as ASM API 7 is stable. + +diff --git a/pom.xml b/pom.xml +index 1e7d2b550..6d8b27e92 100644 +--- a/pom.xml ++++ b/pom.xml +@@ -83,7 +83,7 @@ + + org.ow2.asm + asm +- 6.2 ++ 6.2.1 + compile + + +diff --git a/src/main/java/org/bukkit/craftbukkit/util/Commodore.java b/src/main/java/org/bukkit/craftbukkit/util/Commodore.java +index d172a1aeb..7f2a73d6f 100644 +--- a/src/main/java/org/bukkit/craftbukkit/util/Commodore.java ++++ b/src/main/java/org/bukkit/craftbukkit/util/Commodore.java +@@ -127,7 +127,16 @@ public class Commodore + ClassReader cr = new ClassReader( b ); + ClassWriter cw = new ClassWriter( cr, 0 ); + +- cr.accept( new ClassVisitor( Opcodes.ASM6, cw ) ++ // Paper start - experimental support of Java 11 ++ final int apiVersion; ++ if ( cr.readShort(6) == Opcodes.V11 ) { ++ apiVersion = Opcodes.ASM7_EXPERIMENTAL; ++ } else { ++ apiVersion = Opcodes.ASM6; ++ } ++ ++ cr.accept( new ClassVisitor( apiVersion, cw ) ++ // Paper end - experimental support of Java 11 + { + @Override + public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) +-- +2.19.0 +