| // Test case for Issue 1027: |
| // https://github.com/typetools/checker-framework/issues/1027 |
| |
| // Use -J-XX:MaxJavaStackTraceDepth=1000000 as parameter |
| // to javac to see a longer stacktrace. |
| |
| import java.util.Map; |
| import java.util.Set; |
| import java.util.function.Function; |
| import java.util.stream.Collectors; |
| import java.util.stream.Stream; |
| import org.checkerframework.checker.nullness.qual.KeyFor; |
| |
| public class Issue1027 { |
| |
| // Stand-alone reproduction |
| |
| class Repr<T> { |
| void bar(Function<T, String> p) {} |
| } |
| |
| @SuppressWarnings("nullness") |
| Repr<@KeyFor("this") String> foo() { |
| return null; |
| } |
| |
| void zoo(Issue1027 p) { |
| p.foo().bar(x -> ""); |
| } |
| |
| // Various longer versions that also used to give SOE |
| |
| void foo(Map<String, String> arg) { |
| arg.keySet().stream().map(key -> key); |
| } |
| |
| Stream<String> foo(Set<String> arg) { |
| return arg.stream().map(key -> key); |
| } |
| |
| String foo(Stream<String> stream) { |
| return stream.map(key -> key).collect(Collectors.joining()); |
| } |
| } |