Added retrolambda.javaHacks configuration option by lyubomyr-shaydariv · Pull Request #143 · luontola/retrolambda
In some cases javac may produce incorrect but executable byte code that cannot be translated with ASM therefore making class downgrade impossible. This pull request enables:
-Dretrolambda.javacHackssupport for the tool<javaHacks>support for the Maven plugin
I could downgrade the code using a patched 2.5.5-SNAPSHOT version and the downgraded code seems to work correctly. The option name javaHacks is a possible subject to change or rename. For example, enabling the key will allow to downgrade the following code that cannot be processed with Retrolambda 2.5.4:
import java.lang.annotation.ElementType; import java.lang.annotation.Target; import java.util.function.Consumer; @SuppressWarnings("all") final class JavacBug implements Consumer<Iterable<?>> { @Target(ElementType.TYPE_USE) @interface A { } @Override public void accept(final Iterable<?> t) { final @A Object o = null; assert o != null; } }
As of Retrolambda 2.5.4 the code above fails with even for the latest JDK 1.8 javac (1.8.0_181):
java.lang.RuntimeException: Failed to backport class: JavaBug
at net.orfjackal.retrolambda.Transformers.transform(Transformers.java:129)
at net.orfjackal.retrolambda.Transformers.transform(Transformers.java:107)
at net.orfjackal.retrolambda.Transformers.backportClass(Transformers.java:47)
at net.orfjackal.retrolambda.Retrolambda.run(Retrolambda.java:92)
at net.orfjackal.retrolambda.Main.main(Main.java:28)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 21
at net.orfjackal.retrolambda.asm.ClassReader.readLabel(ClassReader.java:2251)
at net.orfjackal.retrolambda.asm.ClassReader.readTypeAnnotations(ClassReader.java:1678)
at net.orfjackal.retrolambda.asm.ClassReader.readCode(ClassReader.java:1210)
at net.orfjackal.retrolambda.asm.ClassReader.readMethod(ClassReader.java:1032)
at net.orfjackal.retrolambda.asm.ClassReader.accept(ClassReader.java:708)
at net.orfjackal.retrolambda.asm.ClassReader.accept(ClassReader.java:521)
at net.orfjackal.retrolambda.Transformers.lambda$transform$4(Transformers.java:107)
at net.orfjackal.retrolambda.Transformers.transform(Transformers.java:125)
Please note that JDK 1.8 may be a must, for example when using tools like Checker Framework. Please see https://gitlab.ow2.org/asm/asm/issues/317845 for more details.