package com.puppycrawl.tools.checkstyle.grammars.java8; import java.lang.annotation.ElementType; import java.lang.annotation.Target; import java.util.Arrays; import java.util.List; import java.util.function.Function; import java.util.function.Supplier; public class InputMethodReferences7 { interface LambdaInt { <S, T> void m(S p1, T p2); } interface MyFunctionalInterface { void invokeMethodReference(); } static class LambdaImpl implements LambdaInt { <S, T> LambdaImpl(S p1, T p2) { } public <S, T> void m(S p1, T p2) { } } public void m() { } public void main(String[] args) { MyFunctionalInterface fi = new InputMethodReferences7()::<Integer, String, Long> m; LambdaInt li = LambdaImpl::<@TA Object, @TB Object> new; Supplier s = Bar::<String> m; li = li::<@TA Object, @TB Object> m; s = Bar::<List<String>> m; s = Bar::<List<List<?>>> m; } } class Bar<T> { static Object m() { return null; } } @Target({ ElementType.TYPE_USE, ElementType.TYPE_PARAMETER }) @interface TA { } @Target({ ElementType.TYPE_USE, ElementType.TYPE_PARAMETER }) @interface TB { }