File: PolyReceivers.java

package info (click to toggle)
checker-framework-java 3.2.0%2Bds-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 23,104 kB
  • sloc: java: 145,916; xml: 839; sh: 518; makefile: 404; perl: 26
file content (45 lines) | stat: -rw-r--r-- 1,301 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import org.checkerframework.checker.tainting.qual.PolyTainted;

public class PolyReceivers {

    static class MyClass {
        public void start(@PolyTainted MyClass this) {}
    }

    PolyReceivers(int i, Runnable... runnables) {}

    PolyReceivers(Consumer<String> consumer) {
        consumer.consume("hello"); // Use lambda as a constructor argument
    }

    interface Top {
        public void consume(String s);
    }

    interface Sub extends Top {
        public default void otherMethod() {}
    }

    interface Consumer<T> {
        void consume(T t);
    }

    void varargs(Runnable... runnables) {}

    public static void consumeStr(String str) {}

    public static void consumeStr2(String str) {}

    <E extends Consumer<String>> void context(E e, Sub s) {
        new PolyReceivers(PolyReceivers::consumeStr);

        Consumer<String> cs1 = (false) ? PolyReceivers::consumeStr2 : PolyReceivers::consumeStr;
        Consumer<String> cs2 = (false) ? e : PolyReceivers::consumeStr;
        Top t = (false) ? s : PolyReceivers::consumeStr;

        new PolyReceivers(42, new MyClass()::start); // Use lambda as a constructor argument
        varargs(
                new MyClass()::start,
                new MyClass()::start); // Use lambda in a var arg list of method
    }
}