boolean (PsiType sType, PsiType tType, @Nullable InferenceSession session, PsiExpression... args) { final PsiType capturedSType = sType;//todo capture of Si session != null && sType != null ? PsiUtil.captureToplevelWildcards(sType, session.myContext) : sType; final PsiClassType.ClassResolveResult sResult = PsiUtil.resolveGenericsClassInType(capturedSType); final PsiMethod sInterfaceMethod = LambdaUtil.getFunctionalInterfaceMethod(sResult); LOG.assertTrue(sInterfaceMethod != null); final PsiSubstitutor sSubstitutor = LambdaUtil.getSubstitutor(sInterfaceMethod, sResult); final PsiClassType.ClassResolveResult tResult = PsiUtil.resolveGenericsClassInType(tType); final PsiMethod tInterfaceMethod = LambdaUtil.getFunctionalInterfaceMethod(tResult); LOG.assertTrue(tInterfaceMethod != null); final PsiSubstitutor tSubstitutor = LambdaUtil.getSubstitutor(tInterfaceMethod, tResult); for (PsiExpression arg : args) { if (!argConstraints(arg, session, sInterfaceMethod, sSubstitutor, tInterfaceMethod, tSubstitutor)) { return false; } } return true; }