1
2
3
4
5
6
7
8
9
10
11
12 package com.puppycrawl.tools.checkstyle.grammar.java8;
13
14 import java.lang.annotation.ElementType;
15 import java.lang.annotation.Target;
16 import java.util.List;
17 import java.util.function.Supplier;
18
19
20 public class InputMethodReferences7 {
21 interface LambdaInt {
22 <S, T> void m(S p1, T p2);
23 }
24
25 interface MyFunctionalInterface {
26 void invokeMethodReference();
27 }
28
29 static class LambdaImpl implements LambdaInt {
30 <S, T> LambdaImpl(S p1, T p2) {
31 }
32
33 public <S, T> void m(S p1, T p2) {
34 }
35 }
36
37 public void m() {
38 }
39
40 public void main(String[] args) {
41 MyFunctionalInterface fi = new InputMethodReferences7()::<Integer, String, Long> m;
42 LambdaInt li = LambdaImpl::<@TA Object, @TB Object> new;
43 Supplier s = Bar::<String> m;
44 li = li::<@TA Object, @TB Object> m;
45 s = Bar::<List<String>> m;
46 s = Bar::<List<List<?>>> m;
47 }
48 }
49
50 class Bar<T> {
51 static Object m() {
52 return null;
53 }
54 }
55
56 @Target({ ElementType.TYPE_USE, ElementType.TYPE_PARAMETER })
57 @interface TA {
58 }
59
60 @Target({ ElementType.TYPE_USE, ElementType.TYPE_PARAMETER })
61 @interface TB {
62 }