Skip Navigation

Eclipse compiler issue

I am wondering if anyone can help me.

I have an issue with compiling some code in Eclipse but not with IntelliJ or javac.

I am using sneakyThrow to bubble a checked exception up through 2 streams.

Here is the smallest reproducible code I can make:

 
    
import java.io.IOException;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;

public class Example {
    public static void main(String[] args)
    throws IOException {
        List<List<Integer>> input = List.of(List.of(1, 2), List.of(2, 4));

        // Should return any List whose elements are all even.
        List<List<Integer>> output = input.stream()
            .filter(bubblePredicate(o -> o.stream()
                .allMatch(bubblePredicate(i -> {
                    if (i > 10) {
                        throw new IOException("Number too large.");
                    }
                    return i % 2 == 0;
                }))))
            .collect(Collectors.toList());

        System.out.println(output);
    }

    private interface ThrowingPredicate<S, E extends Exception> {
        boolean test(S s) throws E;
    }

    private static <S, E extends Exception> Predicate<S> bubblePredicate(ThrowingPredicate<S, E> callable)
    throws E {
        return s -> {
            try {
                return callable.test(s);
            }
            catch (Exception e) {
                sneakyThrow(e);
                return false;
            }
        };
    }

    private static <E extends Throwable> void sneakyThrow(Exception exception)
    throws E {
        throw (E)exception;
    }
}

  

Compiles and runs completely fine with javac 11.0.12, but doesn't on Eclipse 4.21.0.I20210906-0500 nor Eclipse 4.27.0.20230309-1200.

Has anyone encountered this before, or have any idea what I am misunderstanding?

0 comments

No comments