retrolambda icon indicating copy to clipboard operation
retrolambda copied to clipboard

Type-Use Annotations in Catch clause cause ArrayIndexOutOfBounds exception

Open stephaniestroka opened this issue 8 years ago • 0 comments

I ran into the following problem while trying to "retrolambdify" my code.

Error! Failed to run Retrolambda
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.rangeCheck(ArrayList.java:653)
    at java.util.ArrayList.get(ArrayList.java:429)
    at net.orfjackal.retrolambda.asm.tree.MethodNode.visitTryCatchAnnotation(MethodNode.java:550)
    at net.orfjackal.retrolambda.asm.MethodVisitor.visitTryCatchAnnotation(MethodVisitor.java:761)
    at net.orfjackal.retrolambda.asm.ClassReader.readTypeAnnotations(ClassReader.java:1641)
    at net.orfjackal.retrolambda.asm.ClassReader.readCode(ClassReader.java:1186)
    at net.orfjackal.retrolambda.asm.ClassReader.readMethod(ClassReader.java:1017)
    at net.orfjackal.retrolambda.asm.ClassReader.accept(ClassReader.java:693)
    at net.orfjackal.retrolambda.asm.ClassReader.accept(ClassReader.java:506)
    at net.orfjackal.retrolambda.Transformers.backportInterface(Transformers.java:64)
    at net.orfjackal.retrolambda.Retrolambda.run(Retrolambda.java:74)
    at net.orfjackal.retrolambda.Main.main(Main.java:26)

It is caused by the following code:

    public default Consumer<T> suppressExceptions(Consumer<? super Exception> handler) {
        return object -> {
            try {
                consume(object);
            } catch (@Nonnull Exception exception) {
                handler.consume(exception);
            }
        };
    }

If I remove the @Nonnull annotation in the catch clause, retrolambda works.

stephaniestroka avatar Oct 28 '16 16:10 stephaniestroka